迁移学习

先说一下什么是迁移学习,迁移学习的概念为:迁移学习是一种机器学习方法,就是把为任务A开发的模型作为初始点,重新使用在为任务B开发模型中。

迁移学习要问的问题是,我们能不能在一些不直接相关的数据的情况下,来帮助我们现在要做的任务,答案是可以的。在介绍迁移学习前先解释下什么是不直接相关的数据。请看下图:

同样声明此图是从台湾李宏毅老师的PPT上截取的,非常感谢李宏毅老师。



比如我们做猫和狗的分类,原数据是做大象和老虎的分类,他们都是自然界真实的动物,所以是相似的数据,但是是不同的任务。下面另外两个做的都是猫和狗的分类,但是原数据的猫和狗是卡通式的,和我们要做的任务还是不一样。但跟我们要做的任务的数据是有一定关系的。

我们使用迁移学习的一个非常重要的原因就是我们手中的数据比较少,需要用迁移学习的方法来完成我们的任务。我也许会对迁移学习这个方法有些疑惑,为什么这个方法有效,其实举个简单的例子就很好理解了。比如,我们马上就要去工作了,但是不知道要怎么工作,我们就可以通过别人诉说工作的经历来知道我们自己以后工作将是一个什么样情况,就会知道走上社会如何去工作。同样,神经网络也是如此。这是对迁移学习的一个通俗的解释。

迁移学习是很多方法的集合,很多方法都是属于迁移学习的,在讨论这些方法之前,首先解释下几个名字。一个是Source data,什么是Source data 呢?Source data 就是和我们要做的任务不是直接相关的数据。另外一个是Target data,就是我们所要做的任务的数据。讨论的思路是按照如下图所示来进行的:



先讨论Source data 与Target data都有标签的情况下所使用的迁移学习方法:

(1)Model Fine-tuning

什么是Model Fine-tuning,请看下图:



这个图已经说得很清楚了,只是有一点需要解释下,那就是One-shot learning,表面的意思是只有一个样本,其实不见得只能是只有一个样本才算是One-shot learning,他这个意思就是说Target data比较少。因为Target data 比较少,所以容易过拟合,所以训练的时候还是要注意方法的。其中一个方法是Conservative Training,其实它就是Model Fine-tuning的一种,具体介绍请看下图:



上图说得也非常明白,我们训练的时候,要让他的输出值 和参数尽量接近,这样不容易过拟合。另外一个方法就是Layer Transfer,也是属于Model Fine-tuning的一种,具体介绍请看下图:



其实就是将训练好的一些层数复制过来,然后仅仅对不是复制过来的层进行训练。

这两个方法中Layer Transfer是一个非常常见的小技巧,现在有个问题就是,哪些层应该进行迁移,哪些层不应该进行迁移呢,在不同的任务中,需要迁移的层往往是不一样的。比如在语音识别上,通常是迁移最后几层,在做有关图像方面的时候,通常是迁移前面几层,对后面几层进行单独训练。这需要根据具体情况来做处理。

(2)Multitask Learning

Multitask learning 与 fine-tune略有不同的地方是,fine-tune是只关心微调后的模型在target data上效果好不好,不关心source data的表现怎么样,而multitask learning是同时都关心模型在这两种数据上的表现,就是希望都表现得不错。具体介绍请看下图:



神经网络是很适合这种多任务学习的,下面解释下上图左边的第一个,我们可以建一个网络,假设两个不同的任务,它们用的是同样的特征,我就学习一个网络,输入是两个不同任务同样的特征,但中间会有分叉,一部分是任务A的答案,一部分是任务B的答案。前面的几层,会同时使用任务A和任务B的数据去训练。右边的是输入的特征是不共享的,只有中间的层是共享的。

可能会有人担心说,迁移学习会不会有负面的效应,这个是有可能的,如果两个任务不像的话硬要做迁移,可能导致在两个数据上的表现都非常差。但是两个任务到底是否相似,并没有一个标准,如果不断地尝试的话,就显得太浪费时间了,有人就提出一个方法来解决这个问题,那就是Progressive Neural Networks,请看下图:



这个网络可以对原模型不做任何干扰,所以不会对原模型造成破坏,另一方面,我可以用原模型的参数,但是如果表现不好的的话我可以将原模型的参数设为0,就是效果好我就用这些参数,效果不好我就不用。

接下来讨论Target data没有标签,Source data有标签所使用的迁移学习方法。

先说明一下这个情况,如下图所示:



(1)Domain-adversarial training



如果学习这样一个模型的话,就是所说的特征提取器,特征提取器是经过Source data和Target data训练出来的,没有标签的数据是可以训练出一个特征提取器的。把MNIST丢进去,其特征是蓝色的点,MNIST-M丢进去,其特征是红色的点。也就是说将这两种数据丢进网络进行特征提取的时候,提取的特征完全不一样。这就导致虽然后面的分类器能比较好的将MNIST分类好,但是对MNIST-M却无能为力。那就要想办法使提取的特征的特性给消除掉。用什么方法呢,这个方法就是Domain-adversarial training,那怎么样能把提取出的特征的特性给去除掉呢,在后面接一个domain 分类器就行了,如下图所示:



Domain classifier要做的就是根据特征提取器提取出来的特征,判断这个特征是来自哪个数据。但是仅仅只是上面的结构还是没办法让特征提取器做好,也就说,提取出的特征可能会使类别的预测不太好,为了也能使类别的预测也好,就形成了如下的网络结构图:



这个图已经说得很明白了。

(2)Zero-shot learning

Zero-shot learning的情况跟上面介绍的类似,但是有些区别,请看下图:



上面识别的任务都是一样的,但是,Zero-shot learning是两个任务是不一样的。在训练的时候都没见过草泥马这个动物,这和Domain-adversarial training是不一样的。所以直接进行识别肯定是不行的。那该怎么办呢,采取的办法是不直接来预测是哪种动物,而是来预测其特征,根据特征来判断它属于是哪种动物。就是说有一个特征跟某种动物的对应数据库,看下它的特征跟哪个动物对应,如果没有对应,就选择最相近的特征来进行对应。

剩下的两种情况感觉不常见,就没进一步了解,贴一下图,标注的部分就是没有介绍的两种情况。



其实迁移学习属于一个领域,这里只是对迁移学习做了一个初步的介绍,想要更多地了解迁移学习还是要多读论文了。

展开阅读全文

页面更新:2024-05-14

标签:下图   请看   模型   特征   动物   两个   情况   方法   数据   工作

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top