李宏毅机器学习34——Transfer learning

摘要:

这节课学习了迁移学习,简单来说,就是用一些与目标数据没有直接联系的数据,进行神经网络的训练,这种方法弥补了一般情况下训练神经网络,目标数据缺乏的缺陷。

这节课中,与目标数据没有直接联系的数据叫做source data

根据source data和target data有无label,将迁移学习分为四个大类,这节课主要学习了其中两个大类。对于target data和source data都是labeled的情况,直觉的想法就是用source data直接训练,用target data进行微调,但是这样容易导致过拟合,这节课学习了几种解决办法。对于source data和target data相似的情况,还可以采取多任务同时进行方法。

对于target data是unlabeled,source data是labeled的情况,以手写数字辨识和图片分类为例,讲了两种针对不同情况的方法。其中domain-adversarial training包含了GAN中的思想。

目录

一、什么是Transfer learning

二、target data和source data都是labeled

1.model fine-tuning

2.解决方法:

3.multitask learning

二、target data是unlabeled,source data是labeled

1.domain-adversarial training

2.zero-shot learning

总结:


一、什么是Transfer learning

在实际应用中,由于目标数据的缺乏,我们可以收集一些不直接相关的数据,然后将这两类数据联系起来,用来训练模型,这就是迁移学习。

下面就是将研究生和漫画家两种看似不同的人联系起来。

李宏毅机器学习34——Transfer learning_第1张图片

Source data表示与任务不直接相关的数据,

Target data表示与任务直接相关的数据,

这两类数据按照有无label,分成四个类别。

李宏毅机器学习34——Transfer learning_第2张图片

 

二、target data和source data都是labeled

一般来说target data很少,source data有很多。

1.model fine-tuning

举例:辨识某个人的声音

target data:辨识某个人的声音

source data:许多其他人的声音数据

想法就是用source data直接训练一个model,然后用target data进行微调model。

问题是目标数据量太少,很容易过拟合。

李宏毅机器学习34——Transfer learning_第3张图片

2.解决方法:

1. conservation training

想法就是做微调时加一些限制,例如source dataoutputtarge data output不能差太远。这个限制就有点类似正则化

李宏毅机器学习34——Transfer learning_第4张图片

2.layer transfer

将用source data训练好的model,复制其中某几个layer的参数到新的model,然后用target data去训练这个model,训练时,不改变复制过来layer的参数。

这样做的好处是,target data只需要考虑很少的参数,这样可以避免过拟合。

李宏毅机器学习34——Transfer learning_第5张图片

需要复制哪些layer,要考虑具体问题,一般在语音辨识中,会copy后面几个layer。每个人发音不太一样,面几层提取的特征太细与个人相关度较高,而后面几层则代表了发音的一般特征

如果是图像处理,一般复制前几层layer前面几层包含的往往是纹理,线条等最简单的特征 ,可以用于其他物体的识别,后面几层则和识别的具体物体相关性较强不能用于其他物体的识别

3.multitask learning

Multitask的想法就是让机器同时学会几种不同的任务。

做法:让model共用其中的一些layer,同时去训练source data 和target data。

李宏毅机器学习34——Transfer learning_第6张图片

举例:多语言的语音辨识

训练一个model,来同时辨识多种语言。这个model的前几个layer会共用相同的参数。

同样的道理,这个方法还可以做多种语言的翻译。

李宏毅机器学习34——Transfer learning_第7张图片

这是实际训练的结果。

蓝色是只用普通话进行训练的结果,看到随着training data的数据量变大,错误率下降。
下面的橙色是用欧洲语言作为source data 进行迁移学习后的结果。

李宏毅机器学习34——Transfer learning_第8张图片

二、target data是unlabeled,source data是labeled

1.domain-adversarial training

举例:手写数字的辨识

Source data是普通的手写数字,有labeled。

Target data是不同背景下的手写数字,是unlabeled。

这种情况下,一般将Source data看做是training data,Target data看做是testing data。显然,这两种data是不匹配的。

李宏毅机器学习34——Transfer learning_第9张图片

如果直接做一个分类器,来识别图片属于哪类data,提取特征,得到下面的结果,

容易看出来,蓝点代表source data,明显分成十份,代表从09,而红点则代表target data。这两类data有明显的差别。

李宏毅机器学习34——Transfer learning_第10张图片

由此可见,直接训练的话,两种data差距太大,大概率训练不出来。所以需要特别的处理。这就需要Domain-adversarial training,它把source datatarget data转换到同样的领域上,让它们有同样的分布。

做法:

这里需要在特征提取后接上一个领域的分类器(domain classifier),这个领域分类器的作用是,要侦测出现在特征抽取器输出的特征是属于哪个领域的(来自哪个分布的)。现在特征抽取器要做的事情是尽量骗过这个领域分类器,而后者是尽量防止被骗。类似于GAN中的生成器和判别器。

只骗过领域分类器是不够的,因为特征提取可以只输出0,这样领域分类器的输出必然是一样的。

这要引入label predictor,它的输出就是10个类别。

简单来说,输入一张图片,首先进行特征提取,然后将输出传给领域分类器和标签预测器。领域分类器的训练目的是让两个domain 混合到一起。

标签预测器则是将数据进行标签分类。

要注意的是,这三个神经网络是有着不同的训练目标,这与一般的神经网络是有区别的。

李宏毅机器学习34——Transfer learning_第11张图片

2.zero-shot learning

举例:

假设source data是有labeled的动物图片。而target data则是unlabeled的图片。

另外,target data的图片从来没出现在source data中。处理这种问题,就需要zero-shot learning。

这个问题看起来没办法解决,但是在语音识别中,经常会遇到这种情况,因为我们没办法掌握所有词的source (training) data。

李宏毅机器学习34——Transfer learning_第12张图片

zero-shot learning的做法是建立database,将每个类别用它本身的属性进行表示,而且属性要足够多,使得每个属性组合起来能代表单独的分类。

训练时,将图片输出到NN中,输出一段数字序列表示对应的特征。

李宏毅机器学习34——Transfer learning_第13张图片

测试时,只要找到target data的特征,然后在数据库中的最接近的类别

李宏毅机器学习34——Transfer learning_第14张图片

有时候属性集会比较复杂,可以使用attribute embedding。f(*)和g(*)代表不同的NN。

简单来说就是将image 和attribute 都用vector表示,然后将将相同分类的两种vector投影到一个维度上。这个过程就是找到f和g的NN。

李宏毅机器学习34——Transfer learning_第15张图片

按照上面的想法,loss函数应该是这样:

这样是有问题的,我们只考虑x和对应的y越接近越好,这样模型会把所有x和y投影到同一个点,这样就会导致无法分类,另外,没考虑到x与非对应的y也要尽可能远离。

修改的loss函数:

李宏毅机器学习34——Transfer learning_第16张图片

这样loss函数就符合上面的要求了。

还有另一种方法:

Convex combination of semantic embedding

将一张图片丢到一个训练好的NN中,NN将输出image可能的类别和对应的概率。

将得到类别的vector按对应的比例相加,得到image的vector,然后找到与image的vector最接近的类别。

李宏毅机器学习34——Transfer learning_第17张图片

总结:

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

迁移学习也有一些问题,有一种特殊情况叫 negative transfer。在进行迁移学习的时候,我们都默认不同的任务具备相关性,但如何定义相关性,如何数学描述任务之间相关性的强弱都是偏向人类的主观决定。实际上,在特定情况下,迁移学习甚至会产生相反的效果。


 

 

你可能感兴趣的:(李宏毅机器学习34——Transfer learning)