shartoo +

李宏毅深度学习:迁移学习

本文总阅读量
欢迎star我的博客

笔记视频:https://www.bilibili.com/video/av15889450/#page=26

1 基本概念

迁移学习:当前训练的数据集与目标任务没有直接相关。此处的不直接相关特指以下情形:

1.1 为何会考虑迁移学习

数据不充足的情况下,可能会考虑使用迁移学习,比如以下情况。

目标领域 目标任务 不相关的数据
语音识别 对台湾语做识别 从youtube上爬取英文、中文语音数据训练模型来迁移学习
图像分类 医疗数据极度缺乏,做医疗诊断时 使用已有的海量图像数据(coco,imagenet等)
文本分析 特定领域,比如法律文件分析 可以从其他领域的文本分析迁移

2 可以用迁移学习做什么

2.1 模型fine-tuning

当我们的特定任务所拥有的数据集非常少(比如识别某个人的声音,但是那个人的声音数据很少),但是非相关的数据集很多(比如来自很多人的很多语音数据),我们无法用某一个人的声音数据来训练一个语音识别模型,这种情况要做迁移学习,可以称之为one-shot。用许多人的语音数据训练模型,再来某个人的语音数据来fine-tuning。

问题

目标数据集太少,即便是用非直接相关数据训练出了一个初始模型,然后用目标数据集做迁移学习,很容易会导致过拟合

3 迁移学习技巧

3.1 Conservation Training

例如,已经有大量的source data数据(比如语音识别中大量的不同speaker的语音数据),以及target data(某个speaker的语音数据)。此时如果直接用source data训练出来的模型,再用target data做迁移学习,模型可能就会坏掉。

可以在training的时候,加一些限制(就是加一些非L1,L2的正则化),使得训练完成之后,前后两次模型效果差不太多。

3.2 Layer transfer

先用源数据训练出一个模型,然后将这个模型的某些层网络直接复制到新的网络中,然后只用新数据训练网络的余下层网络。这样训练时只需要训练很少的参数。

但是,哪些层应该被transfer,哪些不应该被transfer? 不同的任务之中,需要transfer的网络层不同。

网络层迁移学习的实验结果(图像任务)

ImageNet的数据120万图像分为source和target,按照分类数量划分,其中500个分类作为source,另外500个为target。其中横轴为transfer learning复制的网络层,其中0代表没有复制网络层,纵轴为分类准确率。可以发现,当我们只复制前面几个网络层时,效果有提升,但是复制得太多效果就开始变差。

上图中

source和target不是同种分类数据时

如果source和target是不同的分类数据,比如source数据是自然风光,而target是人造物体,那么做transfer learning时,其准确率会大幅度降低。

如果只复制前面几层时,与没有复制没有太多区别。

3.3 多任务学习

一个成功的实例是,多语言语音识别。输入是不同语言的语音,前面的几层公用参数,后面的几层不同参数。

4 progressive neural network

先训练一个Task1的网络,训练完成之后,固定其参数。再去训练一个Task2,它的每个隐藏层的都会去接 Task1的隐藏层输出。它的好处是,即便Task1和Task2完全不像,Task2的数据不会影响到Task1的模型参数,所以迁移的结果一定不会更差,最糟糕的情况就是直接训练Task2模型(此时Task1的输出设置为0)

5 labeled source data & unlabeled target data

源数据为标记数据$(x^s,y^s)$ 作为训练集,而目标数据为非标记数据$x^t$为测试集。比如下图的MNIST数据集为训练集,而MNIST-M为测试集,其中MNIST-M同样为手写字,不过其背景变为风景和彩色的。

我们分析下领域对抗训练,把CNN作为特征抽取工具,会发现source data有很明显的分类现象,而target data却没有。

如上图中,MNIST数据集很明显的分为10个团,而MNIST-M没有。此时对于MNIST-M无能为力。

所以,我们希望CNN的feature extractor能够消除领域特性,就需要使用 domain-adversarial training

5.1 domain-adversarial training

feature extractor与domain classifer做相反的事,domain classifer 极力区分当前数据的来源,而feature extractor希望domain classifer能够无视domain 的差异。

其实际做法是,在计算BP时,feature extractor 将domain classifer的梯度乘以负1,然后传给 domain classifer。

以下是这种训练出来的实验结果

6 zero-shot

即:测试集里面的分类数据是训练集中从未出现过的,比如训练集的分类是毛和狗,而测试集里面却有草泥马

这种任务,在语音识别中很常见,训练集中不可能出现所有的语音和词汇。在语音上的做法是,不去直接辨别一段声音属于哪个word,而是去辨别一段声音属于哪个音标,然后做一个音标和tab之间的对应关系表,即lexics。所以,即便某些词汇没有出现在训练集,也可以从音标和lexics表得到。

那么,这个操作应用到图像中就是以每种分类的特定属性替代分类。比如狗这个分类,以furry,4 legs,tail这些属性来表示,切记这些属性必须足够丰富才可以。那么在训练时,就不直接识别分类,而是识别图像具备哪些属性。

测试集的时候,即便来了一个未出现的动物,也可以使用这些属性描述。

如果属性集太大,还可以做 attribute embedding。

其中$f(x^2)和g(y^2)$ 都可能是神经网络。

6.1 zero-shot的成功应用

机器翻译

在没有日语翻译成韩文的数据集,由于有韩语翻译到英文、日文和英文翻译到日文,所以可以完成从日语翻译成韩文。根据学习好的encoder,把各种语言的词汇映射到空间中的向量,会出现下图的结果

上图中,不同颜色代表不同语言,处于相同位置的代表意义相同。

我的博客

观点

源码