CS231n第八节:迁移学习 传送门:Transfer Learning and Fine-tuning Convolutional Neural Networks 本系列文章基于CS231n课程,记录自己的学习过程,所用视频资料为 2017年版CS231n,阅读材料为CS231n官网2022年春季课程相关材料
实际上,很少的人会训练整个卷积神经网络(使用随机的初始化),因为相对来说,很少有足够大的数据集可以用于训练。作为代替,常见的方式是在一个很大的数据集中预训练一个卷积神经网络(比如ImageNet,120万张1000类别图片),然后或者将这个训练后的网络参数作为初始化参数,或者直接作为一个特质提取器用于所关注的任务。三种常见的迁移学习类型如下所示:
获取一个使用ImageNet预训练的卷积神经网络,移除最后一个全连接层(这一层输出1000个类别得分),然后将剩余的卷积神经网络视为一个用于新数据集的特征提取器。在AlexNet中,这将为每张图像计算一个4096维的向量,其中包含紧接分类器之前的隐藏层的激活项。我们称这些提取得到的特征为 CNN code。 如果这些代码在ImageNet上训练的过程中也被阈值化(通常是这样),那么这些 CNN code 也需要进行ReLU,这对性能是很重要的。一旦你提取出了 4096维的结果,你就可以为这个新的数据集训练一个线性分类器(如线性SVM,Softmax分类器等)。
第二种策略是不仅在新的数据集上替换和重新训练卷积神经网络最后一层的分类器,而且还通过继续反向传播对预训练网络的权重进行微调。我们可以对卷积神经网络的所有层进行微调,也可以将前面的一些层固定下来(出于过拟合的考虑),只对网络的一些高层部分进行微调。这是由于通过观察发现,卷积神经网络的前面几层提取的特征包含更多的通用特征(如边缘特征或色块特征),这些特征对许多任务都有用,具有通用性。而网络的后面的层能对原始数据集中类别的细节特征进行更具体的提取。以ImageNet为例,它包含许多狗的品种,卷积神经网络的很大一部分表现力可能被用于区分狗的品种的具体特征。
由于现在的卷积神经网络一般需要2-3周的时间在多个GPU上进行训练,所以人们会发布他们的模型参数,以利于其他人使用这些网络进行微调。例如,Caffe库有一个模型Zoo,人们在那里分享他们的网络权重。
如何决定你应该在一个新的数据集上执行什么类型的迁移学习?这是由几个因素共同决定的,但最重要的两个因素是新数据集的大小(小或大),以及它与原始数据集的相似性(例如,在图像内容和类别方面类似于ImageNet,或非常不同,如显微镜图像)。考虑到卷积神经网络在前面的层中提取的特征比较通用,而在后面的层中提取的特征比较针对特定数据集,这里有一些通用的经验法则: