刚开始接触深度学习的时候,迁移学习与fine-tune确实有点搞不清楚。其实迁移学习是一个大的方向,fine-tune是实现迁移学习常用的一个方法。那么:
1.什么是迁移学习呢?
迁移学习顾名思义就是把已经训练好的模型的参数迁移到新的模型来帮助新模型的训练。考虑到大部分的数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学习到的模型参数,通过某种方式来分享给新的模型,从而加快优化模型的学习效率不用像大多数模型那样从零开始。
2.什么是fine-tune?
fine-tune是进行迁移学习的一种手段。一般我们本身的数据集量比较小,无法重头开始训练一个效果良好的模型。于是,我们只能通过迁移学习,将一个网络,比如(VGG)前面5大层保持模型参数不变(这里的模型参数是指已经通过Imagenet数据集训练好的模型参数)。因为前面几层主要是提取图片的特征。因此,我们也可以把这几层当作特征提取器,保持原有的权重不变,提取现有的图片的特征。微调就是将调整后面的全连接层,或者最后的几个卷积层加全连接层,来实现我们想要的结果,一般根据自己要分类的类别数等等进行调整。
3.何时以及如何fine-tune?
首先要注意的是:网络的前几层学到的是通用的特征,后面几层学到的是与类别相关的特征。
使用的四个场景:
a. 新数据集比较小且和原数据集相似,因为新数据集比较小,如果fine-tune可能会过拟合;又因为新旧数据集类似,我们期望他们高层特征类似,可以使用预训练网络当作特征提取器,用提取的特征训练线性分类器。
b. 新数据集比较大且和原数据集类似,因为新数据集足够大,可以微调整个网络。
c. 新数据集比较小且和原数据集不相似,新数据集比较小,最好不要fine-tune。和原数据集不类似,最好也不要使用高层特征。这时,可以使用前面的特征来训练分类器。
d.新数据集大且和原数据集不相似。因为新数据集足够大,可以重新训练,但是在实践中fine-tune预训练的模型还是有益的,新数据集足够大,可以微调整个网络。
4.一般训练思路?
一般显示运用模型前面几层已有的参数,提取特征。然后用提取到的特征来训练我们最后的分类器。训练完毕后。最后可以根据网络来微调后面的几个卷积层以及最后的全连接层。