迁移学习与卷积神经网络微调
(原笔记仍为草稿,尚在完善中。)
本篇目录:
迁移学习
实践中很少有人从随机初始化开始训练整个卷积网络,因为通常难以获得足够大的数据集。更常见的做法是,先在大规模数据集上预训练网络,例如含 120 万张图像、1000 个类别的 ImageNet,再将预训练网络作为新任务的初始化,或作为固定的特征提取器。迁移学习主要有以下三种使用方式:
- 将卷积网络作为固定特征提取器。取一个在 ImageNet 上预训练的网络,去掉最后的全连接层——该层输出的是原任务中 1000 个类别的得分——把剩余部分作为新数据集的固定特征提取器。以 AlexNet 为例,每张图像会得到一个 4096 维向量,对应分类器之前隐藏层的激活值,我们称其为 CNN 特征编码。如果原网络在 ImageNet 训练时对该层使用了 ReLU(通常如此),提取特征时也必须经过 ReLU,即在 0 处截断,这对性能很重要。提取所有图像的 4096 维特征后,再为新数据集训练线性分类器,例如线性 SVM 或 Softmax 分类器。
- 微调卷积网络。第二种策略不仅替换顶层分类器并在新数据集上重新训练它,还继续进行反向传播,微调预训练网络的权重。可以微调全部层,也可以为避免过拟合而固定部分底层,只微调较高层。依据是:卷积网络的早期特征较通用,例如边缘和色块检测,对许多任务都有帮助;越靠后的特征则越针对原数据集的类别细节。例如,ImageNet 包含许多犬种,网络的部分表示能力可能专门用于区分不同犬种。
- 预训练模型。原笔记指出,在 ImageNet 上使用多块 GPU 训练卷积网络可能需要 2—3 周,因此研究者经常公开训练好的模型检查点,供其他人微调使用。例如,Caffe 的 Model Zoo(模型库)就用于分享网络权重。
何时微调、如何微调?选择迁移学习策略取决于多种因素,其中最重要的是新数据集的大小,以及它与原数据集的相似程度:图像内容和类别是否接近 ImageNet,还是像显微图像那样差异很大。记住,早期特征更通用,后期特征更依赖原数据集。针对四种典型情况,可以参考以下经验:
- 新数据集较小,且与原数据集相似。数据少时微调整个网络容易过拟合。由于两个数据集相似,预训练网络的高层特征通常仍然适用,因此较好的选择是在 CNN 特征编码上训练一个线性分类器。
- 新数据集较大,且与原数据集相似。数据充足时,对整个网络进行微调,发生过拟合的风险相对更容易控制。
- 新数据集较小,但与原数据集差异很大。数据少时通常仍宜只训练线性分类器。但因为顶层特征较依赖原数据集,从网络顶层提取特征未必合适;改用较早层的激活值来训练 SVM,可能效果更好。
- 新数据集较大,且与原数据集差异很大。数据足够多时,可以考虑从头训练卷积网络。不过实践中,用预训练模型权重初始化通常仍有帮助;此时也有足够的数据支持对整个网络进行微调。
实践建议。进行迁移学习时,还需注意以下几点:
- 预训练模型对架构的约束。使用预训练网络会对新任务的架构带来一些限制,例如不能任意移除原网络的卷积层。但有些调整很直接:借助参数共享,网络可以处理空间尺寸不同的图像。对卷积层、池化层而言,只要步幅设置能匹配输入,其前向计算方式就不依赖于输入的具体宽高。全连接层也可以通过转换为卷积层做到这一点。例如,原文以 AlexNet 中第一层全连接之前的 [6×6×512] 池化输出为例,此时全连接层等价于感受野为 6×6、填充为 0 的卷积层。
- 学习率。微调预训练卷积网络时,通常使用比新加入的随机初始化线性分类器更小的学习率。预训练权重已有较好的表示能力,不希望它们在短时间内发生过大的变化,尤其是在顶层分类器仍从随机权重开始学习时。
补充参考资料
- 《现成的 CNN 特征:表现惊人的识别基线》在 ImageNet 预训练网络的特征上训练 SVM,并报告了多项领先结果。
- DeCAF 在 2013 年报告了类似发现。论文中的 DeCAF 框架基于 Python,是后来 C++ Caffe 库的前身。
- 《深度神经网络中的特征有多强的可迁移性?》详细研究了迁移学习性能,其中还讨论了层间协同适应的一些不直观现象。