迁移学习与fine-tuning

迁移学习与fine-tuning

文章目录

  • 迁移学习与fine-tuning
  • 前言
  • 一、迁移学习是什么?
  • 二、Fine-tuning是什么?
  • 三、总结


前言

一、迁移学习是什么?

顾名思义就是把已训练好的模型(预训练模型)参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。通常,源领域数据量充足,而目标领域数据量较小,这种场景就很适合做迁移学习,例如我们我们要对一个任务进行分类,但是此任务中数据不充足(目标域),然而却又大量的相关的训练数据(源域),但是此训练数据与所需进行的分类任务中的测试数据特征分布不同(例如语音情感识别中,一种语言的语音数据充足,然而所需进行分类任务的情感数据却极度缺乏),在这种情况下如果可以采用合适的迁移学习方法则可以大大提高样本不充足任务的分类识别结果。

二、Fine-tuning是什么?

使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的。当然最后一层是可以修改的,因为我们的数据可能并没有1000类,而只有几类。把最后一层的输出类别和层的名称改一下就可以了。用别人的参数、修改后的网络和自己的数据进行训练,使得参数适应自己的数据,这样一个过程,通常称之为微调(fine tuning).

微调时候网络参数也是要更新的,finetune的过程相当于继续训练,跟直接训练的区别是初始化的时候:
  a. 直接训练是按照网络定义指定的方式初始化(如高斯随机初始化)
  b. finetune是用你已经有的参数文件来初始化(就是之前训练好的caffemodel)

三、总结

Fine-tuning是实现迁移学习的手段之一;
以下是常见的两类迁移学习场景:
1 卷积网络当做特征提取器。使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AlexNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、Softmax等)来分类图像。

2 Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(generic features)(例如边缘检测,色彩检测),这些特征对许多任务都有用。后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要Fine-tuning后面的层。

举个例子:
设今天老板给你一个新的数据集,让你做一下图片分类,这个数据集是关于Flowers的。问题是,数据集中flower的类别很少,数据集中的数据也不多,你发现从零训练开始训练CNN的效果很差,很容易过拟合。怎么办呢,于是你想到了使用Transfer Learning,用别人已经训练好的Imagenet的模型来做。做的方法有很多:
1.把Alexnet里卷积层最后一层输出的特征拿出来,然后直接用SVM分类。这是Transfer Learning,因为你用到了Alexnet中已经学到了的“知识”。
2.把Vggnet卷积层最后的输出拿出来,用贝叶斯分类器分类。思想基本同上。
3.甚至你可以把Alexnet、Vggnet的输出拿出来进行组合,自己设计一个分类器分类。这个过程中你不仅用了Alexnet的“知识”,也用了Vggnet的“知识”。
4.最后,你也可以直接使用fine-tune这种方法,在Alexnet的基础上,重新加上全连接层,再去训练网络。

参考文章链接:https://www.zhihu.com/question/49534423/answer/127022241


写的不好,如果有问题请及时指出,我会及时纠正。如果您认可我的文章,希望你能关注我的微信公众号,我会不定期更新工作中学到的东西和一些技术比较前沿的东西。

迁移学习与fine-tuning_第1张图片

你可能感兴趣的:(机器学习系列问题,机器学习,深度学习,人工智能)