迁移学习 入门笔记(1)概念篇
最近在了解迁移学习,搜索到了王晋东的《迁移学习简明手册》,打算看看,也顺便做点笔记。
pdf资源链接:gitcode资源链接
代码及其他更丰富的资源,在作者的github账户下:https://github.com/jindongwang/transferlearning
有的公式对于初学者来说,真的很难懂,先知道个大概框架就是了(对,我就是在说我自己(╥﹏╥))
对于本书,可以搭配一个综述视频看,链接为:https://www.bilibili.com/video/BV1ct41167kV(两者搭配着相互看,会理解很多)
00 其他讲解推荐
- 一个李宏毅老师的讲解:
非常基础,非常推荐,主要讲的是domain adaptation。
https://www.bilibili.com/video/BV1TL411p7Us - 原作者的分享视频:
https://www.bilibili.com/video/BV13W41187uW/ - 知乎这篇也感觉写非常好,里面提到的文章在详细阅读中
https://zhuanlan.zhihu.com/p/364791227 - 关于各种方法种类简单介绍可以看这个:https://blog.csdn.net/SHU15121856/article/details/106874558
- 分享一个知乎作者写的,他还有一系列文章,打算都看看:
https://zhuanlan.zhihu.com/p/50710267
01 迁移学习基本概念
1.1 定义
可以简单理解为,迁移学习作为机器学习的一个重要分支,侧重于将已经学习过的知识迁移应用于新的问题中。
迁移学习的核心问题是,找到新问题和原问题之间的相似性,才可以顺利地实现知识的迁移。
这样,给迁移学习下一个更加学术一点的定义:
迁移学习,是指利用数据、任务、或模型之间的相似性,将在旧领域学习过的模型,应用于新领域的一种学习过程。
1.2 为什么需要迁移学习?
原因主要概括为:
- 大数据与少标注之间的矛盾;
- 大数据与弱计算之间的矛盾;
在配置一般的情况下,如何让普通人也可以利用大量数据和模型呢? - 普适化模型和个性化需求之间的矛盾;
我们的愿景是提高学习模型的泛化能力,使之适应不同的数据情形。
但个性化需求太多种多样。
因此,我们对于每一个通用的任务构建通用的模型,让通用模型可以解决绝大多数的公共问题。
更个性化的模型,思考是否可以在通用模型上进行改造和适配呢? - 特定应用的需求。
比如推荐系统的冷启动问题。一个新的推荐系统,没有足够的用户数据,如何进行精准的推荐?
基于上面问题,迁移学习是如何处理解决呢?
- 如,大数据与少标注/弱计算:迁移数据标注/模型迁移;
大概可以简单理解为,先寻找到一些与目标数据相近的有标注的数据,从而利用这些数据来构建模型,再将这个模型放置到目标数据上来进行微调。
1.3 比较
将迁移学习和传统机器学习进行比较:

1.4 负迁移
我们知道,迁移学习指的是,利用数据和领域之间存在的相似性关系,把之前学习到的知识,应用于新的未知领域。而迁移学习的核心问题是,找到两个领域的相似性。
只要找到了这个相似性,进行合理利用,就能较好地完成迁移学习的任务。
但是,如果这个相似性找的不合理,即,两个领域之间不存在相似性,或者基本不相似。则会大大损害迁移学习的效果。
这种情况下,任务基本就完不成,这时候就可以说出现了“负迁移”。
更学术一点的定义:负迁移指的是,在源域上学习到的知识,对于目标域上的学习产生负面作用。
产生负迁移的原因主要有:
- 数据问题:源域和目标域压根不相似;
- 方法问题:源域和目标域是相似的,但是,迁移学习方法不够好,没找到可迁移的成分。
一种对负迁移处理的思路,是采用传递式迁移学习:
而当两个领域不相似时,传递迁移学习却可以利用处于这两个领域之间的若干领域,将知识传递式的完成迁移。
就像下图所示:

02 迁移学习的研究领域
迁移学习的常用分类方法如下图:

对于上图中的部分名词,做了一个简单搜索:


关于基于实例、特征、关系、模型的迁移学习,则是迁移学习按照方法分类:(核心问题是:我们把源域学到的知识以什么形式迁移到目标域)
基于实例的迁移学习,是会把源域和目标域中相似的样本,作为“训练数据”(也可理解为,对不同样本赋予不同权重);
基于特征的迁移学习,是把源域和目标域映射到相同的特征空间(是目前研究比较多的方向)。


03 迁移学习的应用
列出了一些常见应用。
3.1 计算机视觉
迁移学习已被广泛地应用于计算机视觉的研究中。
特别地,在计算机视觉中,迁移学习方法被称为 Domain Adaptation。
Domain adaptation 的应用场景有很多,比如图片分类、图片哈希等。
关于什么是图片哈希:

3.2 文本分类
由于文本数据有其领域特殊性,因此,在一个领域上训练的分类器,不能直接拿来作用到另一个领域上。
例如,在电影评论文本数据集上训练好的分类器,不能直接用于图书评论的预测。这就需要进行迁移学习。
3.3 时间序列
行为识别 (Activity Recognition) 主要通过佩戴在用户身体上的传感器,研究用户的行为。
行为数据是一种时间序列数据。不同用户、不同环境、不同位置、不同设备,都会导致时间序列数据的分布发生变化。
这种情况,也需要进行迁移学习。
在原书的基础上,搜索补充一下应用:


04 基础知识
本部分介绍迁移学习领域的一些基本知识。
4.1 关键定义
一些关键定义的截图:


4.2 总体思路
找到相似性(不变量),是进行迁移学习的核心。
但是如何度量和利用这种相似性呢?
度量工作的目标有两点:
一是很好地度量两个领域的相似性,不仅定性地告诉我们它们是否相似,更定量地给出相似程度。
二是以度量为准则,通过我们所要采用的学习手段,增大两个领域之间的相似性,从而完成迁移学习。
4.3 度量准则
计算两个向量(点、矩阵)的距离和相似度是许多机器学习算法的基础。
下面给出一些比较重要的准则:
-
MMD

理解:就是求两堆数据在 RKHS 中的均值的距离。
至于什么是希尔伯特空间:

-
KL散度

-
JS散度

-
Wasserstein 距离

-
分类器错误率

05 迁移学习的基本方法
迁移学习的基本方法可以分为四种。这四种基本的方法分别是:基于样本的迁移,基于模型的迁移,基于特征的迁移,及基于关系的迁移。
本部分简要叙述各种方法的基本原理和代表性相关工作。基于特征和模型的迁移方法是我们的重点。在后续的章节中,将会更加深入地讨论和分析。
5.1 基于样本迁移
基于样本的迁移学习方法 (Instance based Transfer Learning) 根据一定的权重生成规则,对数据样本进行重用,来进行迁移学习。
如在下面图中,目标域中只有狗着一类。在迁移时,为了最大限度地和目标域相似,我们可以人为地提高源域中属于狗这个类别的样本权重。

但这类方法通常只在领域间分布差异较小时有效,对自然语言处理、计算机视觉等任务效果并不理想。引入基于特征迁移。
5.2 基于特征迁移
基于特征的迁移方法 (Feature based Transfer Learning) 是指将通过特征变换的方式互相迁移,来减少源域和目标域之间的差距;或者将源域和目标域的数据特征变换到统一特征空间中,然后进行分类识别等等。
这类方法通常假设源域和目标域间有一些交叉的特征。
5.3 基于模型迁移
基于模型的迁移方法 (Parameter/Model based Transfer Learning) 是指从源域和目标域中找到他们之间共享的参数信息,以实现迁移的方法。
这种迁移方式要求的假设条件是:源域中的数据与目标域中的数据可以共享一些模型的参数。
5.4 基于关系迁移
这种方法比较关注源域和目标域的样本之间的关系。
该方向的研究成果较少。
06 第一类方法:数据分布自适应
这章包括接下来的07,08都是基于基于特征的迁移学习。
基本思想是,由于源域和目标域的数据概率分布不同,那么最直接的方式就是通过一些变换,将不同的数据分布的距离拉近。
(“分布到底哪一部分不一样,我们要去对齐哪一部分”)
根据数据分布的性质,这类方法又可以分为边缘分布自适应、条件分布自适应、以及联合分布自适应。
6.1 边缘分布自适应
边缘分布自适应方法 (Marginal Distribution Adaptation) 的目标是减小源域和目标域的边缘概率分布的距离,从而完成迁移学习。
从形式上来说,边缘分布自适应方法是用 P(xs)和 P(xt) 之间的距离,来近似两个领域之间的差异:

核心思想:

我们先假设这个空间φ是已知的,求距离看能得到什么。
TCA利用的“距离”是MMD。令 n1, n2分别表示源域和目标域的样本个数,那么它们之间的 MMD 距离可以计算为:

提问,MMD 是做了一件什么事呢?
求映射后源域和目标域的均值之差。
对于TCA过程感兴趣的,可以阅读原书。是迁移学习的一个经典方法。
6.2 条件分布自适应
条件分布自适应方法 (Conditional Distribution Adaptation) 的目标是减小源域和目标域的条件概率分布的距离,从而完成迁移学习。
用如下公式来近似两个领域之间的差异:

目前单独利用条件分布自适应的工作较少,原文中提到一种方法:STL(Stratiffed Transfer Learning),可以自行了解。

6.3 联合分布自适应
联合分布自适应方法 (Joint Distribution Adaptation) 的目标是减小源域和目标域的联合概率分布的距离,从而完成迁移学习。
则,对应近似计算两个领域之间差异的公式为:

原书在这里则介绍了JDA 方法。
(注意,这里的“联合”是因为同时需要适配两个分布,而不是概率上的“联合分布”!!!)
(同时需要对其边缘分布和条件分布)

6.4 动态分布自适应
一些很基本的介绍:

07 第二类方法:特征选择
特征选择法的基本假设是:源域和目标域中均含有一部分公共的特征,在这部分公共的特征上,源领域和目标领域的数据分布是一致的。
此类方法的目标就是,选择出这部分共享的特征,依据这些特征构建模型。
7.1 核心方法
该领域比较经典的一个方法是SCL(Structural Correspondence Learning) 。
这个方法的目标就是,找到两个领域公共的那些特征。
作者将这些公共的特征叫做Pivot feature。找出来这些 Pivot feature,就完成了迁移学习的任务。
7.2 简单介绍

08 第三类方法:子空间学习
子空间学习法通常假设源域和目标域数据在变换后的子空间中会有着相似的分布。
按照特征变换的形式,将子空间学习法分为两种:基于统计特征变换的统计特征对齐方法,以及基于流形变换的流形学习方法。
8.1 统计特征对齐
统计特征对齐方法主要将数据的统计特征进行变换对齐。对齐后的数据,可以利用传统机器学习方法构建分类器进行学习。
SA 方法 (Subspace Alignment,子空间对齐)是一个代表性方法。

基于SA方法,后面又提出了SDA(Subspace Distribution Align-ment)。该方法是在SA的基础上,加入了概率分布自适应。
有别于 SA 和 SDA 方法只进行源域和目标域的一阶特征对齐,Sun 等人提出了 CORAL方法 (CORrelation ALignment),对两个领域进行二阶特征对齐。
8.2 流形学习
我觉得这部分,原书就解释得很好,这里直接截原书:

比较有代表性的方法是GFK(Geodesic Flow Kernel) 。
09 深度迁移学习
使用深度神经网络进行迁移学习。
对比非深度方法还有两个优势:自动化地提取更具表现力的特征,以及满足了实际应用中的端到端 (End-to-End) 需求。
9.1 深度网络的可迁移性
前面几层都学习到的是通用的特征(general feature);随着网络层次的加深,后面的网络更偏重于学习任务特定的特征(speciffc feature)。
提问:如何得知哪些层能够学习到 general feature,哪些层能够学习到 speciffc feature。更进一步:如果应用于迁移学习,如何决定该迁移哪些层、固定哪些层?
对于这部分,之前已经有研究进行实验:

实验结果如下:

先看蓝色的 BnB 和 BnB+(就是 BnB 加上 ffnetune)。
对BnB 而言:
- 原训练好的 B 模型的前 3 层直接拿来就可以用而不会对模型精度有什么损失。
- 对于一开始精度下降的第 4 第 5 层来说,是因为feature 变得越来越 speciffc,所以下降了。
BnB+ 来说,结果基本上都保持不变。说明 ffnetune 对模型结果有着很好的促进作用
对 AnB 来说:
原书解释很好,这里截图:

AnB+,加入了 finetune ,AnB+ 的表现对于所有的 n 几乎都非常好。
这说明:finetune 对于深度迁移有着非常好的促进作用!
把上图的结果进行合并,就得到下面的图:

提问,分数据集时,里面有相似的时候,会不会影响结果。
作者重新分数据集,使A,B两个数据集里面几乎没有相似的类别,得到下面你的图:

上图说明,随着可迁移层数的增加,模型性能下降。但是,前 3 层仍然还是可以迁移的。
同时,与随机初始化所有权重比较,迁移学习的精度是很高的。
9.2 最简单的深度迁移:finetune
Finetune,也叫微调、fine-tuning,是深度学习中的一个重要概念。就是利用别人已经训练好的网络,针对自己的任务再进行调整。

9.3 深度网络自适应
finetune 的基本假设也是训练数据和测试数据服从相同的数据分布,无法处理训练数据和测试数据分布不同的情况。
深度网络的自适应主要完成两部分的工作:
一是哪些层可以自适应,这决定了网络的学习程度;
二是采用什么样的自适应方法 (度量准则),这决定了网络的泛化能力。
绝大多数深度迁移学习方法都采用了以下的损失定义方式:

9.4 深度对抗网络迁移
生成对抗网络 GAN(Generative Adversarial Nets),一共包括两个部分:
一部分为生成网络 (Generative Network),此部分负责生成尽可能地以假乱真的样本,这部分被成为生成器 (Generator);
另一部分为判别网络 (Discriminative Network),此部分负责判断样本是真实的,还是由生成器生成的,这部分被成为判别器 (Discriminator)。
生成器和判别器的互相博弈,就完成了对抗训练。

里面提到的一些方法:DANN,DSN,SAN,DAAN,有需要可以具体搜索了解。
10 上手实践
原书这里提出一些实践链接,可自行查阅。
