在深度学习领域中,最强力的理念之一就是可以将神经网络学习的一种知识应用到另一个独立的任务中。
看上面的例子,首先我们有一个已经完成训练的神经网络,其目标是图像识别,我们有了绿色的1000000张图片并训练了上面的网络。
在完成图像识别后,我们希望将我们的模型用于放射诊断任务,这就是一种迁移。
我们的做法是,把以及训练好的网络的输出层及其权重都删除掉,然后重新随机权重给最后一层,并且让它在放射诊断数据上进行训练。
在使用源数据进行训练的时候,我们把这一过程称为预训练pre-training,其目标是训练网络的各层参数。
在使用放射数据进行训练的时候,我们把这一过程称为微调fine tuning
迁移学习起到作用的场合往往在于,我们有许多的源数据,但只有少量的目标数据,如上图绿色数据。
但是如果我们有红色数据分布的话,迁移学习不会有太大的坏处,但是也别指望这会对于模型有很大的帮助。因为少量的源数据无法给与神经网络的各个隐含层足够的信息。
when transfer learning make sense?
1.task A and B have the same input x
比如上面的例子中图片识别和放射检测都是图像输入
2.You have a lot more data for Task A than Task B
其原因在于,对于目标B来说每个样本b的价值很高,但是每个样本a的价值很低,如果要通过源域A给予目标域B足够的信息,就需要很多很多的样本a才能达到足够的价值。
3.Low level features from A could be helpful for learning B
所谓低层次特征比如说,上面例子中的普通图像识别也许给予神经网络各层颜色、边缘、光线等等低层次特征的学习参数,这有可能对放射图片识别带来帮助。