什么是迁移学习 (Transfer Learning)?这个领域历史发展前景如何?

关注者
2,426
被浏览
114,523

22 个回答

收录于编辑推荐 ·

2018.1. 二次更新 / 重点介绍迁移学习和其相关方向,完整删除之前的答案,并重新规整了迁移学习内容和代表性文章。


什么是/为什么要迁移学习?

迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。

迁移学习的粗略介绍

早在2009年,Sinno Jialin Pan 和 Qiang Yang 就发表了一篇迁移学习的survey [link]。他们将迁移学习通过Source (迁移源) / Target (迁移目标) Domain Label 更细节的分支为以下几个方向:

并给出了数学定义:

Given a source domain D_S = \left\{ X_S, f_S(X)\right\} and learning task T_S , a target domain D_T= \left\{ X_T, f_T(X)\right\} and learning task T_T , transfer learning aims to help improve the learning of the target predictive function f_T(\cdot) in D_T using the knowledge in D_S and T_S , where D_S\neq D_T , or T_S\neq T_T .

Inductive Transfer Learning

Inductive 的语义解释为归纳,我们可以直接理解为学习适用于Target Domain的网络特征。尤其注意,在 inductive 的迁移学习里,我们有 Target Domain 的 Ground Truth Label,这就意味着我们想要迁移的数据所在 Domain 将直接会学习网络和其特征提供指导作用(假设用深度学习方法,则通过Back-progagation方式)。

Self-Taught Learning

Self-Taught Learning 若直接放在现在深度学习的背景下意义并不明。根据原作者引用的文献来看,他们先从网络上下载大量的图片,通过 Sparse Coding 的方式学习通用普世的图片特征,再直接从中找给定的任务比如图片分类所用的图片特征来做迁移学习。(注意文章发表于09年前,所以那时候 Sparse Coding 的热潮相当于现在 Deep Learning 的热潮)

我们把这个思想放在现在的深度学习上,有点类同于通过 ImageNet 或其他大型数据集学习到的网络特征运用于一个图片分类或其他基于图片特征的任务。

而基于 pre-trained model 的网络训练对于 train-from-scratch 的提升有多少,相信大家对于不同的实验任务里有自己的经验。但不可否认,在绝大多数的情况下,有 ImageNet pre-trained 训练的模型在泛化能力上有或多或少的提升。其中有一篇论文也论述了好的初始值对于模型训练的重要性:[ALL YOU NEED IS A GOOD INIT]

由于神经网络训练局限于一个性质叫 Catastrophic Forgetting,意思是如果我们将 pre-trained 的模型作为初始值训练一个全新的任务,模型之前学习到的特征将灾难性遗忘,也意味着之前网络训练的任务结果将非常糟糕。

由于这一的性质,所有单一基于最原始的深度学习的任务看上去都像暴力求解,只适用于特定任务,并无法得到像人类一样通向普世的学习特征。

当然,也有部分工作尝试寻找解决 Catastrophic Forgetting 的方法,认知度较高的是:

  • Progressive Neural Networks - 通过 Lateral Connection 的方式将一学习好的模型参数通过另一层网络教给一个新的任务。由于在网络设计中,已训练完成的模型将会被 Freeze 因此在 back-propagation 优化参数的方式并不影响已学习完成的网络。这种网络设计很自然的避免了 Catastrophic Forgetting 的出现,但也引出了一些新的问题。
  1. 不断的加入新的任务会引出新的网络分支,以及 lateral connection 分支,这种学习效率显然是很低的,因为我们一次只能学一个任务。
  2. 我们无法确定先学哪个任务将会给后续的任务有一个最好的结果。i.e. 我们不清楚任何关于任务的相关和层级信息,因此找到最优方法需要 n 个任务的排列也就是 n! 种方式,再一次突出了学习效率之低。(better to learn from A -> B or B -> A?)
Progressive Neural Network / Visualisation
  • Overcoming catastrophic forgetting in neural networks - 显然 DeepMind 自己也不会满足这样的网络设计,对此问题再次进行研究。这次他们不直接用于 Deep Learning 的 back-propagation 方式而专注于 Bayesian Learning 通过 Full Bayesian posterior distribution 来计算网络参数。他们的方法,Elastic Weight Consolidation (EWC), 通过 Laplace Approximation 的方式来计算 Bayesian 那也无法进行数值计算的 log-likelihood,最后取得相当不错的效果。更多 comment 和介绍可参看这篇博文 [link]

Multi-task Learning

多任务学习 (multi-task learning) 与上个章节介绍的方向最大的不同是我们需要把 Source 和 Target 两个或者更多任务同时学好。在多任务学习中,任一任务的训练目标都是同等重要的。因此,这里 Source/Target Domain 的分类姑且没有太大意义(除非特定情况)。

进行多任务学习我们主要希望观察并研究:

  1. 多任务学习是否可以帮助网络学习一个泛化能力更好的特征?
  2. 通过多任务学习,我们能否寻找并理解不同任务的相关性和层级性?

最简单直接的多任务学习网络就是直接应用一个普通的网络结构在最后输出层前分叉到不同的任务预测层。而这样的设计真的可以帮助网络学习到好的特征么?

  • Cross-stitch Networks for Multi-task Learning - 这篇文章就直接暴力了测试了所有分叉的可能性,并指出不同的任务在不同的分叉上效果。后续他们提出了一个叫 Cross-Stitch Network 的网络结构,通过矩阵中 linear combination 的方式来融合不同任务里学到的特征。
  • Multi-task Self-Supervised Visual Learning - 类似的想法也出现在 Zisserman 最新的文章里。与 Cross-stitch Network 最大的不同是,这篇文章里并未将不同的任务分成不同的网络分支,而使用单一的网络结构,仅仅在基于 ResNet-101 的网络结构尾部 block 3 里的 23个 residual unit 通过 sparse linear combination的方式来输出各自的任务预测层。

除了网络设计,多任务学习中还有一个 Open Question 就是,如何寻找训练权重?

由于任务难度和数据集不同的缘故,在进行多任务学习中,有一种情况是网络中学到的特征被某一任务 dominate。一个简单的例子:我们同时训练 MNIST 和 ImageNet。由于我们知道MNIST是一个极其简单的数据集,而ImageNet是一个数据量大且复杂的多的数据集。那么模型训练将飞快的收敛 MNIST 的识别任务,且慢慢变成是基于 MNIST 特征网络的初始值的 ImageNet 训练。

近期 Kaiming He 提出的 Focal Loss for Dense Object Detection 重新刷新了我们对分类和识别任务的认知,尤其对 gradient propagation 的重要性有了新的理解。那么我们能否也找到一种类似的改进 loss function 的方法来帮助网络去训练一个 unbiased feature representation 呢?

对于 Multi-task Learning 的更多介绍可参考这个博文:An Overview of Multi-Task Learning for Deep Learning

Transductive Transfer Learning

Transductive 的字面意思是转导,通常来说要比 inductive transfer learning 要难的多。由于直接缺乏 Target Domain Label,在这个情况,我们只能依赖于 Source Domain 信息来尽可能的训练出泛化能力强的特征。

Domain Adaptation / Generalisation

Domain Adaptation 目标是学习 domain-invariant feature 使得学习到的特征不受限于 Source Domain 而导致 over-fitting。其主要会测试于 Office Dataset - Domain Adaptation - UC Berkeley,其中分为三个 Domain 其一是 Amazon 上扒的图片,另外两个是实体拍摄图片但一个高分辨率一个是低分辨率。

比较具有代表性的作品:

  • Unsupervised Domain Adaptation by Backpropagation - 个人很喜欢这篇文章。这篇文章的新颖点是利用 classifier 在 Source 和 Target Domain 的相似性,通过 Source Domain 的 back-propagation 同时算出 Source 和 Target Domain 的 gradient 并将两者梯度结合来更新 feed-forward 的 feature extractor 。这样的设计会将 feature extractor 在没有 Target Label 的情况下也能学会 Target Domain 的 feature。
  • Learning Transferable Features with Deep Adaptation Networks - 本文作者是清华大学的 Mingsheng Long 也是 Domain Adaptation 的专家,可从 Google Scholar 上看出他的近乎所有文章都在研究这个问题。这篇文章包括作者后续的文章里都用到了一个叫作 max mean discrepancies (MMD) 定义为 Source Target Domain 的 feature 距离方式。将此距离包含于 loss function 会有助于网络避免出现 co-variant shift 使得学习到的特征是 domain-invariant。

因此不可否认,现在尝试解决 Domain Adaptation 的方法都不得不利用 Target Domain 的信息去缩小 co-variant shift. 完全只利用于 Source Domain 的信息仍然是个重要的课题。

Unsupervised Transfer Learning

在这个方向可适用于的任务非常有限,比如 Dimension Reduction。由于缺乏 Source Label 因此也无法采用绝大部分的 Deep Learning 方法,(但比如Auto-encoder 是其中一个基于 Deep Learning 的降维方式,但很难归类于 Transfer Learning)。因此这里不展开讨论了。

关于迁移学习大致概括到此为止,更多相关文献希望读者直接找相关的论文研读。

后面是我提出一些公开问题,让大家重新思考迁移学习的意义和重要性。

重新思考1:迁移学习一定有用吗?

事实上,即使在前文 survey 的数学定义里都提到了迁移学习是 "aim to improve"。但事实上,在特定情况下迁移学习甚至会产生相反的效果。这种情况叫 negative transfer。在进行迁移学习的时候,我们都默认不同的任务具备相关性,但如何定义相关性,如何数学描述任务之间相关性的强弱都是偏向人类的主观决定。我们经常使用 ImageNet 作为 fine-tuning 的 pre-trained model 因为 ImageNet 本身数据集之大保证了学习的网络有较高的泛化性,但如果用的小的数据集呢?结果还会一样么?还是会比从零学习的网络更差?

e.g. DeepMind 新出的 AlphaGo Zero 就是从零学习的比前一个版本基于人类图谱的 AlphaGo Lee 要强的多。

重新思考2:多任务学习一定在学通用的特征吗?

即使有相当多的实验结果表明,多任务学习比单任务学习的准确率较高,或者说泛化能力更强。但是多任务学习是否真正在学通用的特征我们无从得知。也有可能多任务学习仅仅是部分神经元负责负责特定网络,由于这多任务的分配导致网络结构比单任务小了而提高准确度我们也可说不是不可能。如何理解多任务网络结构,如何观察并确认特征的泛化能力也是一个重要的问题。

一些总结和展望

迁移学习无疑是机器学习里重要的问题之一。理解迁移学习不仅可以让我们理解学习到的特征而且让我们重新理解了神经网络”学习“的本质和方式。近期在迁移学习上的文章和研究不断的增多,但仍然有很多公开问题值得我们去挖掘和思考。希望这篇回答能给读者对迁移学习有着一定的认知,后期我会继续更新此回答如果有高价值的研究更新。

我最近在研究这个方向,一个比较重要的误区是总是有人把Transfer Learning和神经网络的训练联系起来,这两个概念刚开始是无关的。Transfer Learning是机器学习的分支,很多方法其实是不需要用NN的,而现在之所以Transfer Learning和神经网络联系如此紧密,主要因为NN的发展太快,太强大,太火爆,导致Transfer Learning的研究都往神经网络靠了。

----------------------------------------------------------------------------------------------------------------------

Transfer Learning的初衷是节省人工标注样本的时间,让模型可以通过已有的标记数据(source domain data)向未标记数据(target domain data)迁移。从而训练出适用于target domain的模型。我在某篇论文当中引用了一些图片来帮助大家更好的理解:


上图是某行人检测任务数据集当中的4张图片,假设前两张正对着摄像机的行人作为训练集,后两张背对着的行人图片作为测试集,结果该模型的测试评分会很差,因为训练时没有考虑到摄像机观察角引起的问题,相类似在图像识别领域会有很多因素会降低识别率(例如光照,背景等)。ok,那能否用一些未标记的图片(类似图3,4这样的图),增强我们的行人检测模型,让它不仅可以识别正对着的行人,还可以识别背对着的行人?这就是迁移学习要干的事。

既然说到这个问题,就不得不提domain adaptation了,domain adaptation是迁移学习原先就有的概念,在研究source domain和target domain时,基于某一特征,会发现两个domain的数据分布差别很大,比如说选择某一区域的颜色信息作为图像特征,下图红线表示source dataset的颜色信息值分布,蓝线表示target dataset的颜色信息值分布,很明显对于这一特征来讲,两个域的数据本来就是有shift的。而这个shift导致我们evaluate这个模型的时候准确率会大大降低。

既然这个特征不合适,那我们就换特征,没错,domain adaptation旨在利用各种的feature transformation手段,学习一个域间不变的特征表达,基于这一特征,我们就可以更好的同时对两个域的数据进行分类了。

----------------------------------------------------------------------------------------------------------------------

至于发展前景,题主可以关注最近的论文,虽然有了迁移学习的帮助,但是大部分论文都会尽量去化简网络从而减少数据的需求量,由此来看,transfer learning并没有很好的解决样本标注的困难,就我来看,迁移学习距离成功还很远,有待进一步发展和提高。

迁移学习领域有一篇公认的比较好的综述,楼上都已经说了:A Survey on Transfer Learning

对于这篇论文我做了翻译和整理,如果你刚入门transfer learning,可以去这里下载这个文档:

迁移学习综述a survey on transfer learning的整理

我概括了论文当中精华的部分,并且加上了自己的理解,对迁移学习整体的研究做了概述。

到这还没完!!相信你也看到了这篇论文是很早以前的(2013),里面没有介绍最新的研究,实际上近几年迁移学习的变化是很大的,特别是deep neural network的发展让很多学者开始挖掘深度神经网络模型的迁移能力。

为什么深度神经网络模型具有强大的可迁移能力?回答这一点需要了解DNN的原理,DNN是一个通过pre-train获得数据的分层特征表达,然后用高层语义分类的模型,模型的底层是低级语义特征(比如说,边缘信息,颜色信息等),这样的特征实际上在不同的分类任务中都是不变的,而真正区别的是高层特征,这也解释了通常使用新的数据集去更新AlexNet,GoogleNet的最后几层网络权值,来实现简单的“迁移”这个小trick。具体细节可以参考这两篇论文:

Yosinski, J., Clune, J., Bengio, Y., and Lipson, H. How transfer-able are features in deep neural networks? In NIPS, 2014.

J. Donahue, Y. Jia, O. Vinyals, J. Hoffman, N. Zhang, E. Tzeng, and T. Darrell. Decaf: A deep convolutional activation feature for generic visual recognition. In ICML, 2014.

近两年迁移学习的发展很迅速,基于domain adapation这个方向,有不少和深度神经网络相结合的transfer模型,怎么结合的,具体就不做详细介绍了。基本思想都类似,为了保证域差异最小,loss项都会加一个MMD约束。

贴几篇论文:

Deep Transfer Network: Unsupervised Domain Adaptation

Learning Transferable Features with Deep Adaptation Networks

Unsupervised Domain Adaptation by Backpropagation

Unsupervised Domain Adaptation with Residual Transfer Networks(这篇文章我特别推荐一下,它打破了传统用一个分类器处理跨域数据,并首次提出用Residual Function来区分source classifier和target classifier)