为什么“Pretrained+Fine-tuning”

来源:互联网 发布:windows7编程32 编辑:程序博客网 时间:2024/05/17 22:03

Deep Learning或者说CNN在图像识别这一领域取得了巨大的进步,那么自然我们就想将CNN应用到我们自己的数据集上,但这时通常就会面临一个问题:通常我们的dataset都不会特别大,一般不会超过1万张,甚至更少。

这种情况下,直接使用train from scratch的方式在小数据集上容易过拟合,尤其是在数据分布差异化很大的场景下。然后就有了迁移学习了,Transfer Learning关心的问题是:什么是“知识”以及如何更好地运用之前得到的“知识”。这可以有很多方法和手段。而本文所说的pretrained+fine-tuning只是其中的一种手段。

pretrained+fine-tuning有什么好处

至少有以下两方面:
1. 解决了我们小样本下使用GoogLeNet这样复杂的网络上容易过拟合的问题;
2. 节省了训练时间。因为网络前面几层提取的特征具备一定的泛化能力(generic)。

pre-trained+finetuning都具有哪些方式:

pre-trained+finetuning通常有两种方式:

  • ConvNet as fixed feature extractor:拿来pretrained的模型,将最后一层全连接层(分类用)去掉,然后将剩下的部分看做一个特征提取器,后面再加一个线性分类器就可以了。比如:在 AlexNet中会对每张图片输出4096维向量,这些向量是用于分类的,只要我们得到了所有图片的这些向量就可以建立一个线性分类器用于新数据的分类了。
  • Fine-tuning the ConvNet:和第一种方法不同的是,这里不仅对顶层的分类进行重新替换和训练,还对卷积层的一些参数通过反向传播进行微调。可以对所有的参数都进行微调,也可以让前几层的参数固定只对高层部分进行微调(为防止过拟合,因为刚开始几层的特征一般是比较通用的,而后面几层可能会包含更多原始训练集的细节)。

具体实践中如何选择不同的pretrained+fine-tuning方式

pretrained+fine-tuning策略取决于多种因素,但最重要的是新数据集的大小以及新数据集与原数据集的相似度。谨记网络前面几层的 DCNN 特征更加泛型(generic),在后面层中更加具有数据集特定性(dataset-specific)。

  • 数据集很小并且与原数据集相似。由于数据集很小,不适合进行微调(可能会过拟合);由于数据类似于原数据,模型更高层次的特征也与此数据集相关。所以最好是在 CNN 特征上训练一个线性分类器。
  • 新数据集很小且与原数据集不同。由于数据较小,只训练一个线性分类器可能更好;由于数据集不同,从网络顶部就开始训练分类器可能会包含更多的原数据集的特定特征。所以最好用网络前部的层来训练分类器。
  • 数据集很大并且与原数据集相似。由于数据多了,应该不会过拟合,可以通过试图微调网络。
  • 数据集大而且与原数据集不同。由于数据集很大,我们可能会期望从头开始训练一个 DCNN。不过,在实践中从一个预训练模型开始初始化权重仍然是一种有益的方法。所以我们可以使用原模型为初始值然后对整个网络进行微调。
    这里写图片描述

参考:
深度学习系列Part2:迁移学习和微调深度卷积神经网络 (原版英文链接Deep Learning Part 2: Transfer Learning and Fine-tuning Deep Convolutional Neural Networks)这篇文章通过了一个具体案例来介绍Fine-tuning,值得一看;
知乎 fine-tuning:利用已有模型训练其他数据集 ,MXNet下Pretrained+Finetuning的正确姿势这里写链接内容 ;
cs231n transfer learning (翻译版CS231n 卷积神经网络与计算机视觉 11 卷积神经网络的 迁移学习 和微调) ;
迁移学习与fine-tuneing有什么区别?

0 0
原创粉丝点击