2018.1. 二次更新 / 重点介绍迁移学习和其相关方向,完整删除之前的答案,并重新规整了迁移学习内容和代表性文章。
迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。
早在2009年,Sinno Jialin Pan 和 Qiang Yang 就发表了一篇迁移学习的survey [link]。他们将迁移学习通过Source (迁移源) / Target (迁移目标) Domain Label 更细节的分支为以下几个方向:
并给出了数学定义:
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 的方法,认知度较高的是:
Multi-task Learning
多任务学习 (multi-task learning) 与上个章节介绍的方向最大的不同是我们需要把 Source 和 Target 两个或者更多任务同时学好。在多任务学习中,任一任务的训练目标都是同等重要的。因此,这里 Source/Target Domain 的分类姑且没有太大意义(除非特定情况)。
进行多任务学习我们主要希望观察并研究:
最简单直接的多任务学习网络就是直接应用一个普通的网络结构在最后输出层前分叉到不同的任务预测层。而这样的设计真的可以帮助网络学习到好的特征么?
除了网络设计,多任务学习中还有一个 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 上扒的图片,另外两个是实体拍摄图片但一个高分辨率一个是低分辨率。
比较具有代表性的作品:
因此不可否认,现在尝试解决 Domain Adaptation 的方法都不得不利用 Target Domain 的信息去缩小 co-variant shift. 完全只利用于 Source Domain 的信息仍然是个重要的课题。
Unsupervised Transfer Learning
在这个方向可适用于的任务非常有限,比如 Dimension Reduction。由于缺乏 Source Label 因此也无法采用绝大部分的 Deep Learning 方法,(但比如Auto-encoder 是其中一个基于 Deep Learning 的降维方式,但很难归类于 Transfer Learning)。因此这里不展开讨论了。
关于迁移学习大致概括到此为止,更多相关文献希望读者直接找相关的论文研读。
后面是我提出一些公开问题,让大家重新思考迁移学习的意义和重要性。
事实上,即使在前文 survey 的数学定义里都提到了迁移学习是 "aim to improve"。但事实上,在特定情况下迁移学习甚至会产生相反的效果。这种情况叫 negative transfer。在进行迁移学习的时候,我们都默认不同的任务具备相关性,但如何定义相关性,如何数学描述任务之间相关性的强弱都是偏向人类的主观决定。我们经常使用 ImageNet 作为 fine-tuning 的 pre-trained model 因为 ImageNet 本身数据集之大保证了学习的网络有较高的泛化性,但如果用的小的数据集呢?结果还会一样么?还是会比从零学习的网络更差?
e.g. DeepMind 新出的 AlphaGo Zero 就是从零学习的比前一个版本基于人类图谱的 AlphaGo Lee 要强的多。
即使有相当多的实验结果表明,多任务学习比单任务学习的准确率较高,或者说泛化能力更强。但是多任务学习是否真正在学通用的特征我们无从得知。也有可能多任务学习仅仅是部分神经元负责负责特定网络,由于这多任务的分配导致网络结构比单任务小了而提高准确度我们也可说不是不可能。如何理解多任务网络结构,如何观察并确认特征的泛化能力也是一个重要的问题。
迁移学习无疑是机器学习里重要的问题之一。理解迁移学习不仅可以让我们理解学习到的特征而且让我们重新理解了神经网络”学习“的本质和方式。近期在迁移学习上的文章和研究不断的增多,但仍然有很多公开问题值得我们去挖掘和思考。希望这篇回答能给读者对迁移学习有着一定的认知,后期我会继续更新此回答如果有高价值的研究更新。