本文灵感来自 FAIR 的论文《Rethinking ImageNet Pre-training》
博客地址:https://heartbeat.fritz.ai/pre-trained-machine-learning-models-vs-models-trained-from-scratch-63e079ed648f
来自摘要:我们使用从随机初始化训练的标准模型在 COCO 数据集上报告对象检测和实例分割的竞争结果。结果并不比他们的 ImageNet 预训练对应物差,唯一的例外是增加训练迭代次数所以随机初始化的模型可能会收敛。随机初始化的训练非常稳健;即使在以下情况下,我们的结果也成立:(i) 仅使用 10% 的训练数据,(ii) 用于更深入和更广泛的模型,以及 (iii) 用于多个任务和指标。
目录
ImageNet 预训练和微调范式
不同的训练模式
特征表示和随机初始化相关工作
归一化和收敛比较
实验设置和结果
增强的基线
用较少的数据进行实验
总结
迁移学习——预训练和微调范式
近年来,深度学习取得了很大进展。很难想象一个不使用深度学习的行业。大量数据的可用性以及计算资源的增加推动了这一进展。有许多众所周知的新颖方法促进了深度学习的发展。
其中之一是迁移学习,这是一种将一个训练模型学习到的表征/信息用于另一个需要针对不同数据和相似/不同任务进行训练的模型的方法。迁移学习使用预先训练的模型(即模型已经在一些更大的基准数据集上训练,比如 ImageNet)。
训练神经网络可能需要几分钟到几个月的时间,具体取决于数据和目标任务。直到几年前,由于计算限制,这仅适用于研究机构和技术组织。
但是随着预先训练的模型随时可用(以及其他一些因素),这种情况发生了变化。使用迁移学习,我们现在可以构建深度学习应用程序,以更快地解决与视觉相关的任务。
随着过去一年的最新发展,迁移学习现在也可以用于与语言相关的任务。所有这些都证明 Andrew Ng 几年前所说的话是正确的——迁移学习将成为商业 ML 成功的下一个驱动力。
不同的训练模式
在博客使用很少的数据构建强大的图像分类模型中, Francois Chollet 介绍了使用有限数据训练模型的过程。他从头开始训练一个模型 50 个 epochs,并在狗与猫分类上获得了 80% 的准确率。使用预训练模型的瓶颈特征,使用相同数据的准确率跃升至 90%。作为最后一步,在微调网络的顶层时,报告的准确率为 94%。
在这里很明显,与从头开始训练的模型相比,使用迁移学习和预训练模型可以提高准确性,而无需花费太多时间来收敛。这是否意味着预训练和微调范式明显优于从头开始训练?
上图有助于在训练模型时可视化一些可能性。右边的图像代表一个模型,其中训练模型的卷积基被冻结,从中获得的瓶颈特征用于重新训练进一步的层。这是使用预训练模型的典型场景。中间的图像代表一个模型,其中除了少数初始层外,网络的其余部分都经过训练。左边的最终模型代表从头开始训练模型——这就是我们将在本博客中研究的方法。
在预训练和微调范式中,模型训练从一些来自预训练模型的学习权重开始。这已经变得更加标准,尤其是在与视觉相关的任务(如对象检测和图像分割)方面。
在 ImageNet 上预训练的模型擅长检测边缘、模式等高级特征。这些模型理解某些特征表示,可以重用。这有助于更快地收敛,并用于对象检测、分割和活动识别等任务的最先进方法。但是这些表示有多好?
特征表示和随机初始化
预训练模型学习的特征表示是领域相关的。他们从他们接受过训练的基准数据集中学习。我们可以通过构建更大的数据集来实现通用特征表示吗?在这方面已经做了一些工作,其中注释了几乎是 ImageNet 大小的 3000 倍的数据集。
然而,随着用于预训练的数据集的大小,目标任务的改进效果不佳。它表明,简单地构建更大的数据集并不总是能在目标任务上获得更好的结果。另一种选择是使用随机权重初始化从头开始训练模型。
为了从头开始训练模型,网络中的所有参数或权重都是随机初始化的。论文Rethinking ImageNet Pre-training 中进行的实验使用 Mask R-CNN 作为基线。该基线模型在 COCO 数据集上进行了预训练和未预训练,并对结果进行了比较。
获得的结果证明,通过对模型进行足够次数的迭代训练并使用适当的技术,从头开始训练的模型也提供了与微调模型的比较和接近的结果。
相关工作
如果您习惯于使用预先训练的模型,那么从头开始训练可能听起来既费时又费力。为了质疑这个假设,我们可以从头开始查看先前对训练模型所做的研究,而不是使用预先训练的模型。
DetNet 和 CornerNet 使用专门的模型架构从头开始适应训练模型。但是没有证据表明这些特殊的架构与预训练和微调范式的结果有任何比较。
在这项工作中,作者考虑使用现有的基线架构进行一些更改。一种是训练模型进行更多迭代,另一种是使用批量标准化替代方案,如组标准化和同步批量标准化。有了这个,作者能够产生接近于微调方法的结果。
归一化和收敛比较
如果模型在没有适当标准化的情况下从头开始训练,则可能会产生误导性的结果,这可能意味着从头开始的训练根本不是最佳的。
对于与视觉相关的任务,训练数据由高分辨率图像组成。这意味着必须相应地调整批大小以满足内存限制。批量标准化适用于更大的批量。批量越大越好。但是由于高分辨率图像和内存限制,模型训练必须将其批量大小限制为较小的数字。这导致BN的不良结果。
为了避免这种情况,使用了组归一化和同步批量归一化。组标准化与批量大小无关。同步BN使用多个设备。这增加了有效批量大小并避免了小批量,从而可以从头开始训练模型。
微调模型取得了领先,因为预训练模型已经学习了高级特征。这意味着从头开始训练的模型无法像微调模型那样快速收敛。虽然这可以使微调模型更好,但还应该考虑在 ImageNet 等大型基准数据集上预训练模型所需的时间和资源。在 ImageNet 预训练期间,经过多次迭代训练了超过一百万张图像。所以为了让随机初始化训练赶上,模型需要多次训练迭代。
[图片上传中...(image-d29241-1628604915936-0)]
此处的图像总结了在两种情况下看到的训练样本数量 - 有和没有预训练。根据目标任务,样本可以是图像、实例或像素。对于分割任务,该模型在像素级别工作。对于对象检测,重要的是每个图像中对象的实例。我们看到,除了分割(像素级任务)之外,从头开始训练所需的训练图像数量要少得多。
实验设置和结果
以下是实验设置——使用的架构和超参数。实验使用具有 ResNet 和 ResNext 架构的 Mask R-CNN 作为基线。GN 或 SyncBN 用于归一化。该模型以 0.02的初始学习率进行训练,并在最后 60k 和 20k 次迭代中分别减少了 10 倍。训练数据水平翻转,基线模型没有测试时间增加。总共使用了 8 个 GPU 进行训练。
通过在 COCO 数据集上用 118K 训练和 5k 验证样本训练具有这些设置的模型,从头训练的模型能够赶上预训练模型的准确性。
在这种情况下,目标检测和图像分割是两个目标任务。边界框和掩码的平均精度是指标。正如我们在上图中所看到的,左边的一个是用 ResNet 101 和 GN 训练的,而右边的一个显示了带有 ResNet50 和 SyncBN 的 Mask RCNN 的结果。
我们看到,在微调时,预训练使模型领先一步,因为我们看到 AP 从接近 20 的值开始。而从头开始训练时,模型从接近 5 的 AP 值开始。但是需要注意的重要一点是,从头开始训练的模型继续给出接近的结果。这里的这些尖峰表示应用不同的时间表和学习率的结果,所有这些都合并到同一个图中。
增强的基线
作者还尝试对他们的基线模型进行改进。通过在训练期间添加规模增强,报告了更好的结果。同样,使用 Cascade RCNN 和测试时间增强也改善了结果。
我们看到,通过训练和测试时间的增加,从头训练的模型比预训练的模型给出了更好的结果。这些图显示了增强型基线模型的结果。
使用较少数据进行实验
最后的实验是尝试不同数量的训练数据。虽然这项工作的第一个有趣发现是,即使使用从头开始训练的模型,我们也可以获得可比较的结果,另一个令人惊讶的发现是,即使数据较少,从头开始训练仍然可以产生与微调模型接近的结果。
当仅使用整个 COCO 训练数据的 1/3,即接近 35K 图像时,实验表明微调方法在一些迭代后开始过度拟合。这表明 ImageNet 预训练不会自动帮助减少过拟合。但是尽管数据较少,从头开始的训练仍然赶上微调的结果。
当只使用十分之一的训练数据(接近 10k 个图像)进行训练时,会发现类似的趋势。我们可以在左图中看到——使用预训练和微调方法,模型在一些迭代后开始过度拟合。
我们在中间和右边的图中看到,从头开始训练的结果与微调模型的结果非常接近。如果我们尝试使用更少的数据怎么办?喜欢使用整个训练数据的百分之一?当仅使用 1k 图像时,从头开始训练仍然收敛得相当缓慢。但它会产生更糟糕的结果。虽然预训练模型的 AP 为 9.9,但所考虑的方法仅给出 3.5。这表明模型由于缺乏数据而过度拟合。
总结
无需更改架构或专门的网络,就可以从头开始针对目标任务进行训练。
从头开始训练需要更多的迭代才能充分收敛。
在许多情况下,从头开始训练并不比其 ImageNet 预训练对手差,低至 10k COCO 图像。
ImageNet 预训练加快了目标任务的收敛速度,但不一定有助于减少过度拟合,除非我们进入非常小的数据范围。
如果目标任务对定位比分类更敏感,则 ImageNet 预训练的帮助较小。
预训练有助于学习通用表示,但在评估预训练特征时我们应该小心。
结论
该论文并未声称无论如何都不推荐预训练和微调方法。但包括的实验表明,对于某些场景,从头开始训练模型的结果比微调/预训练方法略好。这意味着如果计算不是约束,那么对于某些场景和配置设置,从头开始训练的模型比微调的模型给出更好的结果。 这是一项有趣的研究,特别是因为预训练和微调范式更多地被用作标准程序。考虑到深度学习的应用领域——包括汽车、健康、零售等的用例,在这些用例中,即使准确性的微小改进也会产生巨大的差异——研究不仅要瞄准新颖和创新的方法,而且要更详细地研究现有方法。这可能会带来更好的见解和新发现。