深度学习之---如何更好的finetune

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

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

这也是最常用的,因为一般我们并不会简单的把模型像1一样当做特征提取器使用,而是让模型去fit我们的训练数据,使得性能更好。因此我们除了像第一步里面一样去掉最后一个FC层伊以外,在网络训练过程中还要更新权重,进行BP传导(方法见下文)。最简单粗暴的就是对修改后的全部网络层进行权重更新(当自己的数据库较大时),但是当我们本身任务的数据库较小时,为了避免过拟合,我们需要对网络的前几层固定参数(不更新权重),而只更新网络结构的后面几层。这是因为网络的前几层得到的特征是比较基础local的特征,基本适用于全部任务(边缘,角点特征),而网络层数越高的层,和数据库全局信息联系越紧密,(网络越靠后,信息越global,越靠前,越local,local的信息是多数情况共享的,而global的信息和原图紧密相关)

版权声明:本文为博主原创文章,转载请附上博文链接!
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 特征上训练一个线性分类器。(因为数据量小,所以使用全局微调的话,前面几层比较泛化的特征可能会被训练的过拟合)
  •     新数据集很小且与原数据集不同。由于数据库较小,不适合进行finetune,由于数据库差异大,应该在单独训练网络结构中较高的层,前面几层泛化能力比较强的就不用训练了,直接固定权值。(因为前几层的数据泛化能力强,而我们需要队后几层包含特定的数据集特征的层进行训练)
  •     数据集很大并且与原数据集相似。由于数据多了,应该不会过拟合,可以通过试图微调网络。
  •     数据集大而且与原数据集不同。由于数据集很大,我们可能会期望从头开始训练一个 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有什么区别?
---------------------  
作者:NodYoung  
来源:CSDN  
原文:https://blog.csdn.net/nnnnnnnnnnnny/article/details/70156637?utm_source=copy  
版权声明:本文为博主原创文章,转载请附上博文链接!

参考:https://blog.csdn.net/TTdreamloong/article/details/80380736

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值