Transfer learning 详解

迁移学习文章翻译

CS231n Convolutional Neural Networks for Visual Recognition

下文翻译中,基于特定术语不确定,要么采取翻译后加标注原英文方式,要么直接放置原文的方式,避免语义误解。

读者对翻译如有疑惑,可以自行点击上述超链接进入原文学习。


(一)使用场景

实践中,很小有人从头开始(随机初始化)训练整个卷积神经网络, 原因是大多数人都没有足够的数据集。因此,更常见的是,使用在一个预训练模型(已在较大的数据集训练过,如ImageNet,包含120万张、1000中类别的图像),然后根据具体任务目标,将其作为初始化基础或固定特征提取器(fixed feature extractor)。使用迁移学习的三种主要场景如下:

1. 将卷积网络作为固定特征提取器。使用一个已经在ImageNet上训练的卷积网络,删除其最后一个全连接层(如使用ImageNet训练过,这一层共有1000个输出节点),然后将该卷积网络作为一个新数据集的固定特征提取器。In an AlexNet, this would compute a 4096-D vector for every image that contains the activations of the hidden layer immediately before the classifier.  我们将这些特征称为CNN codes。这些codes是由ReLU函数激活(最小值为0)。It is important for performance that these codes are ReLUd (i.e. thresholded at zero) if they were also thresholded during the training of the ConvNet on ImageNet (as is usually the case). Once you extract the 4096-D codes for all images, train a linear classifier (e.g. Linear SVM or Softmax classifier) for the new dataset.

2. 调整卷积网络。第二种使用策略是,不仅要使用新的数据集替换预训练卷积网络的分类器,还要通过继续反向传播来调整权重。可以对卷积网络的所有层进行调整,也可以保留前面的几层不变(防止过拟合),仅仅调整卷积网络更高层级。这是因为有人观察到,卷积网络前面部分更多包含一些共性特征(例如识别边线和色块),这些共性特征对许多任何都非常有用。但是卷积网络的后面部分则更多的包含原数据集的细节特征。以在ImageNet上训练的模型为例,由于该数据集包含许多不同品种的狗狗,这个模型就可能会展现出更多的区别不同狗狗品种的细节特征。

3. 使用预训练模型。现代卷积网络一般会在ImageNet上,使用多个GPU并花费2-3周的时间训练而成,因此可以发现有一些人会发布他们的最终版本卷积网络,供其他人使用。例如,the Caffe library就有个网站叫做 Model Zoo,很多人在上面分享他们的预训练模型。


(二)调整的策略

在一个新数据集上应该使用怎么类型的迁移学习?有很多因素需要考虑,但是有两点非常重要。一是新数据集的大小,二是与原数据集的相似度(即图片的内容及类型是相似和不同,如显微镜下的图片与ImageNet图片就很不同)。不过要记住,卷积网络前几层的特征更加一般化,后面部分的特征更加特定化。下面根据常见的四种情况讨论:

1. 新数据集很小且与原数据集相似。在数据量小的情况下,为避免过渡拟合,调整卷积网络并不是一个好想法。由于新数据集与原数据集相似,因此预期卷积网络更高层级的特征与新数据集相关性也较好。因此,此时最好在CNN codes上训练一个线性分类器。

2. 新数据集很大且与原数据集相似。有新数据集很大,因此在对卷积网络进行调整时不必过于担心过度拟合的问题。

3. 新数据集很小且与元数据集很大不同。由于数据量小,因此最好仅仅训练一个线性分类器。又由于数据与原数据不同,不应从网络顶部训练分类器,由于顶部包含更多的细节特征。最好从网络的前部分开始训练新的SVM分类器。

4. 新数据集很大且与元数据集很大不同。由于数据集很大,因此可以考虑从头开始训练一个卷积网络。但是,以一个预训练模型作来初始化权重仍然非常有益。这样我们就有足够的数据和信心来调整整个网络了。


(三)实用建议

在迁移学习过程中,还有一些提示需要记住:

1. 预训练模型的限制。需要注意,如果你想用一个预训练模型,那么在使用网络的结构方面可能会受到一些限制。例如,你不能任意的从一个预训练模型中抽取其卷积层。但是,有一个变化是明确的:基于参数分享(parameter sharing),你可以在不同空间尺寸的图片上运行预训练模型。这在Conv/Pool layers上体现的非常明显,由于其前向函数(forward functions)与输入值空间大小是相互独立的 (as long as the strides “fit”)。 在 FC layers 的情况下,由于 FC layers 能够转化为卷积层(Convolutional Layer),因此也是可行的。例如,在AlexNet上,the final pooling volume before the first FC layer is of size [6x6x512]. Therefore, the FC layer looking at this volume is equivalent to having a Convolutional Layer that has receptive field size 6x6, and is applied with padding of 0.

2. 学习速率。相对新的线性分类器使用的随机初始化权重来说, 一般使用较小的学习速率对卷积网络的权重进行调整。这里因为我们预期卷积网络的权重本身较好,我们不希望过快或过度的进行改变(特别是在其上有一个随机初始化权重的新的线性分类器的情况下)。


你可能感兴趣的:(Transfer learning 详解)