迁移学习Transfer Learning
本文搬迁自 「李宏毅机器学习」学习笔记-Transfer Learning,由于原作者总结得太好了,在此几乎完全搬运,仅略作修改。
The aim for Transfer Learning and Example
Aim
Transfer Learning要做的是:假设现在手上有与现在进行的task没有直接相关的data,使用这些data来帮助做一些事情。
Example
比如现在要做猫狗的分类器,所谓不直接相关的data就可能是
- Similar domain, different tasks(大象与老虎的图片,与猫狗图片的分布是相像的)
- Different domain, same task(猫狗的卡通图片,与猫狗图片的分布是不像的)
Why Transfer Learning?
为什么考虑transfer learning?因为我们只有很少的数据是符合任务处理要求的(Target Data),但是类似的数据(Source Data)却有很多。
例如,我们的任务是
- 辨识台语,我们只有很少台语数据,但是我们有很多其它语言的数据,类似中文、英语等等;
- 辨识医疗图像,数据很少,但是普通的image很多;
- 文本分析上,需要分析的文件是某个很specific的domain,数据很少,但是从网络上可以找到很多文本数据。
Transfer Learning - Overview (Four Class)
Target data是跟现在考虑的task直接相关的,source data跟我们现在考虑的task没有直接的关系。
Class1: source->labelled, target->labelled
Model Fine-tuning
如果target data的量特别少,少到只有几个example,这时候叫做one-shot learning。
训练的时候,先用source data训练出一个model,然后用target data去fine-tune这个model。其实就相当于把source data训练出的model当作当前model的初始值,然后在用target data训练。
训练的时候有很多小技巧,比如Conservative Training和Layer Transfer。
Conservative Training
为了避免target data在fine-tune模型时造成过拟合,要增加约束,即增加正则化项,希望同一笔data经过fine-tune前后两个模型的output越接近越好,或两个模型的参数越接近越好。
Layer Transfer
把Source data训练好的模型中的某些layer直接copy过来,用target data训练剩下的layer。这样的好处是,target data只需要训练较少的参数,避免了过拟合。
在不同的task上,需要被transfer的layer往往是不一样的。比如
- 在语音识别上,通常copy最后几层,重新训练前几层。这是因为语音识别神经网络前几层是识别语者的发音方式,后几层是识别,后几层与语者没有关系。
- 在图像识别上,通常copy前面几层,重新训练后面几层。这是因为图像识别神经网络的前几层是识别有没有基本的几何结构,因此可以transfer,而后几层往往学到的比较抽象,无法transfer。
所以,哪些layer要被transfer是case by case的。特别是运用之妙,存乎一心。