CS231n 卷积神经网络与计算机视觉 11 卷积神经网络的 迁移学习 和微调

本文是Stanford cs231n的课程,目前官网正在更新,不是最终版

1 迁移学习

实际中很少有人从头开始训练一个卷积神经网络,一般来说没有足够的可用的数据. 反而一般使用大数据集已经训练过的ConvNet来作为初始模型或者直接作为固定特征的提取器,以下是三种迁移学习的情景:
1. ConvNet as fixed feature extractor. 拿来训练好的网络将最后一层全连接层(分类用)去掉 然后将剩下的部分看做一个特征提取器,在 AlexNet中会对每张图片输出4096维向量,这些向量是之前用于分类的,我们将其称为CNN codes. 只要我们得到了所有图片的CNN codes就可以建立一个线性分类器用于新数据的分类了。
2. Fine-tuning the ConvNet. 第二个策略是不仅对顶层的分类其进行重新训练和替换还对其与训练的参数通过反向传播进行微调。可以对所有的参数都进行微调,也可以让之前几层的参数固定只对高层部分进行微调(为防止过拟合,刚开始几层一般都是比较通用的).但是后面几层可能会更多的包含训练集的细节。
3. Pretrained models. 现在的ConvNets 需要花费2-3周时间用多个GPU在ImageNet上训练,有很多人就会释放出最红版本的 checkpoints 以便他人使用调优 fine-tuning. 例如 Caffe library 就有一个Model Zoo 人们可以分享他们的权重。

2.选择何种方式?

如何进行微调,选择何种迁移学习方式? 主要影响因素有:1数据的大小,2数据类型与ImageNet是否相似(比如一些医学图像就与其不相似) ,以下是一些经验:
1. 数据集很小并且与原数据集相似。如果数据集很小不适合进行微调因为可能会过拟合,所以最好得到CNN codes 然后训练一个线性分类器。
2. 数据集很大并且与原数据集相似。因为数据多了,应该不会过拟合,可以通过网络进行微调。
3. 新数据集很小且与原数据集不同。因为数据集很小所以最好用训练线性分类器的方法,但是因为与原数据不同所以最好不要用最顶端的与原数据相关联的层,最好用早一点的层的激活值来训练SVM分类器。
4. 数据集大而且与原数据集不同。使用原模型为初始值然后对整个网络进行微调。

3 实施建议

  1. 考虑原始模型的约束. 如果要使用预训练模型,在将其使用到新数据集上时要注意网络结构上的约束 ,例如不能随便的从原始预训练模型中去掉一层.但是一些改变也是允许的,例如由于参数共享在步长适合的前提下可以允许输入不同尺寸的图片
  2. 学习速率。因为原始模型的参数已经比较优秀了,我们在微调的时候需要设置一个小点的步长,因为我们不想迅速的破坏这些参数,尤其是使用随机初始值训练新的线性分类器的时候。

4 拓展阅读

  1. CNN Features off-the-shelf: an Astounding Baseline for Recognition 在ImageNet-pretrained ConvNet 上训练了 SVMs 并得到了一些领先的结果.
  2. DeCAF 在 2013年汇报了同样的结果论文中的框架是基于Python的C++ Caffe library的先驱.
  3. How transferable are features in deep neural networks? 研究了迁移学习的细节.

这里写图片描述

你可能感兴趣的:(CS231n,卷积神经网络CS231n笔记,卷积神经网络,深度学习,迁移学习,计算机视觉,ConvNet)