Transfer Learning & Fine-tune (迁移学习与模型微调)
本文为《CS231n》的学习笔记
1. Transfer Learning 的几种形式
实际上,很少有人从头开始训练一个完整的卷积网络(随机初始化),因为拥有足够大小的数据集的情况相对较少。相反,常见的做法是在非常大的数据集(例如ImageNet,它包含120万个图像,包含1000个类别),然后将ConvNet用作初始化或固定的特征提取器,用于感兴趣的任务。三种主要的迁移学习场景如下:
1.1 ConvNet 作为固定的特征提取器
取一个在ImageNet上预先训练过的ConvNet,删除最后一个完全连接的层(该层的输出是像ImageNet这样的不同任务的1000个类分数),然后将ConvNet的其余部分作为新数据集的固定特征提取器。在AlexNet中,这将为每一张图像计算4096维的向量,包含紧靠在分类器前面的隐藏层激活函数值。我们称这些为特征的 CNN 编码。如果在ImageNet上对ConvNet进行训练时也对这些代码进行了阈值化(通常情况下),那么这些代码将被重新划分(即在零处阈值),这一点很重要。如果在 ImageNet 上对 ConvNet 进行训练时也对这些代码进行了阈值化(通常情况下),这些编码是经过 ReLU处理的,这对模型的效果比较重要。提取所有图像的4096-D编码特征后,为新数据集训练线性分类器(例如线性SVM或Softmax分类器)。
1.2 微调 (fine-tune) 卷积网络
第二种策略不仅是在新的数据集上替换和重新训练ConvNet上的分类器,而且通过继续反向传播来微调预训练网络的权重。可以对ConvNet的所有层进行微调,也可以将一些较早的层保持固定(由于过度拟合的问题),而只对网络的某些较高级别的部分进行微调。这是因为观察到ConvNet的早期特性包含了对许多任务都有用的更通用的特性(例如边缘检测器或色斑检测器),但ConvNet的后期层对原始数据集中包含的类的细节变得越来越具体。例如,在犬种之间的许多代表性的特征可能是专门用来区分犬种的。
1.3 预训练模型
由于现代的ConvNet需要2-3周的时间在ImageNet上跨多个gpu进行训练,因此人们通常会为了其他可以使用网络进行微调的人的利益而发布最终的 ConvNet check point。例如,Caffe 库有一个 model zoo,人们在那里分享他们的网络权重。
2. 何时以及如何 fine-tune
你如何决定在新的数据集上进行哪种类型的迁移学习?这是几个因素的函数,但最重要的两个因素是『新数据集的大小』(小或大),以及它『与原始数据集的相似性』(例如,在图像内容和类方面类似于ImageNet,或者非常不同,例如显微镜图像)。请记住,ConvNet功能在前面几层中更为通用,在以后的层中更为原始数据集特有,以下是一些常见的经验法则,适用于4个主要场景。
(1) 新数据集很小,和原始数据集相似。由于数据很小,因此出于过度拟合的考虑,对ConvNet进行微调不是一个好主意。由于数据与原始数据相似,因此我们希望ConvNet中更高级别的特性也与此数据集相关。因此,最好的办法是在CNN编码上训练一个线性分类器。
(2) 新数据集很大,与原始数据集相似。既然我们有更多的数据,我们就更有信心,如果我们试图通过整个网络进行微调,我们就不会过度适应。
(3) 新的数据集很小,但与原始数据集大不相同。由于数据量很小,所以最好只训练一个线性分类器。由于数据集非常不同,所以从包含更多特定于数据集的特性的网络顶部训练分类器可能不是最好的方法。相反,它可能会更好地从网络的某个早期激活训练SVM分类器。
(4) 新数据集很大,与原始数据集大不相同。由于数据集非常大,所以我们可以从零开始训练ConvNet。然而,在实践中,使用来自预训练模型的权重进行初始化通常仍然是有益的。在这种情况下,我们将有足够的数据和信心对整个网络进行微调。
总得来说,考虑优先级为:『新数据集的大小』>『与原始数据集的相似性』,当数据集比较大的时候,可以对整个网络(卷积层及最后的输出层)进行 fine-tune;当数据比较小的时候,肯定不会对网络中卷积层进行 fine-tune,如果与原始数据集相似,则可以保持卷积层不变,只对输出层进行 fine-tune,否则取卷积的前几层保持不变,接上线性分类器进行 fin-tune。
3. 实用建议
在进行迁移学习时,还需要记住一些其他事项。
(1) 来自预训练模型的约束。请注意,如果您希望使用预训练的网络,那么您可能会在可用于新数据集的网络结构方面受到一些限制。例如,您不能随意从预先训练的网络中取出Conv层。然而,有些变化是直截了当的:由于参数共享,您可以轻松地在不同空间大小的图像上运行预训练网络。对于Conv/Pool层,这一点很明显,因为它们的前向功能独立于输入卷的空间大小(只要跨距“合适”)。对于FC层,这仍然适用,因为FC层可以转换为卷积层:例如,在AlexNet中,第一个FC层之前的最终池卷大小为[6x6x512]。因此,在这个体积下的全链接层等效于一个感受野为 6x6 大小,padding 为 0的卷积层。
(2) 学习率。与计算新数据集类分数的新线性分类器(随机初始化)的权重相比,对正在微调的ConvNet权重使用较小的学习速率是很常见的。这是因为我们期望ConvNet权重相对较好,所以我们不希望对它们进行过快和过多的扭曲(尤其是当上面的新线性分类器是从随机初始化中训练出来的)。
4. 额外的参考
CNN Features off-the-shelf: an Astounding Baseline for Recognition实用在 ImageNet 上预训练得到的卷积特征训练 SVM 并报告了一些世界先进 (SOTA) 的结果。
DeCAF在2013年报告了类似的发现。这篇文章的框架(DECAF)是基于Python的C++ Caffe 库的前体。
How transferable are features in deep neural networks?对迁移学习的表现进行了详细的研究,包括一些关于层协同适应的非直观发现。