早在2018年底,FAIR的研究人员就发布了一篇名为《Rethinking ImageNet Pre-training》的论文 ,这篇论文随后发表在ICCV2019。该论文提出了一些关于预训练的非常有趣的结论。
近期,谷歌大脑的研究团队对这个概念进行了扩展,在新论文《Rethinking Pre-training and Self-training》中,不仅讨论了预训练,还研究了自训练,比较了在同一组任务当中自训练与监督预训练、自监督预训练之间的差异。
论文地址:https://arxiv.org/abs/2006.06882
作者通过实验得出了以下结论:
1、如果预训练任务和目标任务存在差异,则预训练(包括监督和自监督)可能损害目标任务准确率;
2、自训练适用不同规模数据集和不同强度增强数据的训练;
3、自训练并且可以看作对预训练的补充,联合预训练和自训练可以获得更大的增益。
以下是机器学习研究工程师Aakash Nain对《Rethinking Pre-training and Self-training》这篇论文的解读,文章发表在Medium上,AI科技评论对文章进行了编译。
一、序言
在进一步探讨论文细节之前,我们先了解一些术语。预训练是运用在不同领域(例如计算机视觉、自然语言处理、语音处理)的一种非常普遍的做法。在计算机视觉任务中,我们通常使用在某个数据集上经过预训练并可直接运用到另一个数据集的模型。例如,利用ImageNet预训练就是一种可广泛运用到目标分割和目标检测任务的初始化方法。为实现此目的,我们常使用迁移学习和微调这两种技术。另一方面,自训练也尝试在训练期间结合模型对未标记数据的预测结果,以获得其他可用的信息来改善模型性能。例如,使用ImageNet来改进COCO目标检测模型。首先在COCO数据集上训练模型,然后将该模型用于生成ImageNet的伪标签(我们将丢弃原始的ImageNet标签),最后将带有伪标签的ImageNet数据集和有标签的COCO数据集结合来训练一个新的模型。自监督学习是另一种常用的预训练方法。自监督学习的目的不仅仅是学习高级特征。相反,我们希望模型学习的更好,有更好的鲁棒性以适用于各种不同的任务和数据集。
二、研究动机
作者希望能解决以下问题:
1、预训练对训练结果有多大程度的帮助?
2、什么情况下使用预训练是无效的?
3、与预训练相比,我们可以使用自训练并获得相似或更好的结果吗?
4、如果自训练优于预训练(暂做这样的假设),那它在多大的程度上比预训练好?
5、在什么情况下自训练比预训练更好?
6、自训练的灵活性和可扩展性如何?
三、设置
1、数据集和模型
1)目标检测:作者使用COCO数据集(11.8万张图片 )进行监督学习下的目标检测训练。ImageNet数据集(120万张图片 )和OpenImage数据集(170万张图片 )用作未标记的数据集。使用以EfficientNet - B7为主干网络的RetinaNet目标检测器。图像的分辨率保持在640 x 640,金字塔等级为P3到P7,每个像素使用9个锚点。
2)语义分割:使用 PASCAL VOC 2012分割训练集(1500张图片)进行监督学习下的语义分割训练。对于自训练,作者使用了增强的PASCAL图像数据集(9000张图片),标记以及未标记的COCO(24万张图片)和ImageNet(120万张图片)数据集。使用以EfficientNet-B7和EfficientNet-L2为主干网络的NAS-FPN模型。
2、数据增强
在所有实验中都使用了四种不同强度的增强策略来进行检测和分割。这四种策略按强度从低到高依次为:1)Augment-S1:这是标准“ 翻转和裁剪”增强操作,包括水平翻转和缩放裁剪。2)Augment-S2: 这包括论文《AutoAugment: Learning Augmentation Strategies from Data》中使用的AutoAugment,以及翻转和裁剪。3)Augment-S3:它包括大规模缩放、AutoAugment、翻转和裁剪。缩放范围比Augment-S1:更大。4)Augment-S4: 结合论文《RandAugment: Practical automated data augmentation with a reduced search space》中提出的RandAugment,翻转和裁剪,以及大规模缩放操作。此处的缩放等级与Augment-S2/S3相同。
3、预训练
为了研究预训练的有效性,作者使用了ImageNet预训练的检查点。使用EfficientNet-B7作为架构用于评估,对此模型,设置了两个不同的检查点,如下所示:1)ImageNet:通过AutoAugment在检查点上训练EfficientNet-B7,在ImageNet上达到84.5%了的top-1准确率。2)ImageNet ++:采用论文《Self-training with Noisy Student improves ImageNet classification》中提出的Noisy Student方法在检查点上训练EfficientNet-B7,其中利用了额外3亿张未标记的图像,并达到了86.9%的top-1准确率。采用随机初始化训练的结果标记为Rand Init。
4、自训练
自训练是基于Noisy Student方法实现的,有三个步骤:
在标记的数据(例如COCO数据集)上训练teacher model。
使用teacher model在未标记的数据(例如ImageNet数据集)上生成伪标记。
训练一个student model,以联合优化人工标签和伪标签上的损失。
四、实验
1、增强和标记数据集大小对预训练的影响
作者使用ImageNet进行监督预训练,并改变带标签的COCO数据集大小以研究预训练对结果的影响。实验过程中,不仅会改变标记数据的大小,而且还使用不同增强强度的数据集,使用以EfficientNet-B7为主干网络的RetinaNe模型来进行训练。作者观察到以下几点:
1)使用高强度的数据增强时,监督预训练会损害性能:作者注意到,当他们使用如上所述的标准增强方法Augment-S1时,预训练会对结果有所帮助。但是随着增加增强的强度,预训练并未对结果有太大帮助。实际上,他们观察到,在使用最强的数据增强(Augment-S3)时,预训练会严重损害性能。
2)更多带标签的数据会降低监督预训练的价值:这不是一个新发现。我们都知道,当数据量较小时,预训练会对结果有所帮助。但是有足够数量的标记数据时,从头开始训练也不会得到很差的结果。作者发现了相同的结论,这一观点与FAIR的论文《Rethinking ImageNet Pre-training》相一致。
我的看法:在ImageNet上训练的大多数模型都没有使用很高强度的增强方法。高强度增强数据后,模型可能无法正确收敛。实际上,模型有时可能会对增强过拟合,当然这还需要进行适当的细节研究。
2、增强和标记数据集大小对自训练的影响
作者使用相同的模型(使用带有EfficientNet-B7主干的RetinaNet检测器)和相同的任务(COCO数据集目标检测)来研究自训练的影响。作者使用ImageNet数据集进行自训练(这种情况下将丢弃ImageNet的原始标签)。作者观察到以下几点:
1)即使预训练对结果产生了负面影响,自训练也有助于大规模数据集和高强度增强的情况:作者发现,当使用大量数据增强时将自训练应用到随机初始化模型中,这样不仅可以提高基线结果,并且超过了同情况下预训练的结果。该实验结果如下:
2)自训练适用于各种不同大小的数据集,并且可以看作对预训练的补充:作者发现自训练另一个有趣的方面是,它可以作为预训练的补充。简而言之,当将自训练与随机初始化模型或预训练模型结合使用时,它始终可以提高性能。在不同数据大小下,性能增益是一致的。
但,使用ImageNet ++ 预训练时,与使用随机初始化和ImageNet预训练相比,增益相对更小。这有什么具体原因吗?是的,ImageNet ++初始化是从检查点获得的,在该检查点使用了另外3亿张未标记的图像。
3、自监督预训练 vs 自训练
有监督的 ImageNet预训练会损害最大规模数据集和高强度数据增强下的训练效果。但是自监督的预训练呢?自监督学习(不带标签的预训练)的主要目标是构建一种通用的表征,这种表征可以迁移到更多类型的任务和数据集中。为研究自监督学习的效果,作者使用了完整的COCO数据集和最高强度的增强。目的是将随机初始化与使用了SOTA自监督算法预训练的模型进行比较。在实验中使用SimCLR的检查点,然后在ImageNet上对其进行微调。由于SimCLR仅使用ResNet-50,因此RetinaNet检测器的主干网络用ResNet-50替换。结果如下:
在这种情况下,我们观察到自监督下的预训练会损害训练效果,但自训练仍可以提高性能。
五、学到了什么?
1、预训练和通用的特征表征
我们看到,预训练(监督以及自监督)并不总可以给结果带来更好的效果。实际上,与自训练相比,预训练总是表现不佳。这是为什么?为什么ImageNet预训练的模型对COCO数据集的目标检测效果反而不好?为什么通过自监督预训练学习表征无法提高性能?预训练并不能理解当下的任务,并可能无法适应。分类问题比目标检测问题容易得多。在分类任务上预训练的网络是否可以获得目标检测任务所需要的所有信息?用我喜欢的表达方式来说:即使这些任务只是彼此的子集,不同的任务也需要不同级别的粒度。
2、联合训练
正如作者所言,自训练范式的优势之一是它可以联合监督和自训练目标进行训练,从而解决它们之间不匹配的问题。为了解决任务间由于差异导致的不匹配问题呢,我们也可以考虑联合训练的方法,例如联合训练ImageNet和COCO这两个数据集?作者在实验中使用了与自训练相同的参数设置,发现ImageNet的预训练可获得+ 2.6AP的增益,但使用随机初始化和联合训练可获得+ 2.9AP的更大增益。而且,预训练、联合训练和自训练都是加性的。使用相同的ImageNet数据集,ImageNet的预训练获得+ 2.6AP的增益,预训练+联合训练再获得+ 0.7AP的增益,而预训练+联合训练+自训练则获得+ 3.3AP的增益。
3、任务调整的重要性
正如我们在上文所见,任务调整对于提高性能非常重要。论文《Objects365: A Large-scale, High-quality Dataset for Object Detection》指出了类似的发现,在Open Images数据集上进行预训练会损害COCO的性能,尽管两者都带有边框标记。这意味着,我们不仅希望任务是相同的,而且标记最好也是相同的,以使预训练对结果真正带来益处。同时,作者指出了另外两个有趣的现象:
1)ImageNet的预训练模型,即使带有额外的人工标签,其效果也比自训练差。
2)借助高强度的数据增强方法(Augment-S4),使用PASCAL(训练+ 增强数据集)进行训练实际上会损害准确率。同时,通过对同一数据集进行自训练而生成的伪标签可提高准确性。
4、自训练的可扩展性、通用性和灵活性
从作者进行的所有实验中,我们可以得出以下结论:
在灵活性方面,自训练在每种条件设置下均能很好地发挥作用,无论是少数据状态、多数据状态、弱数据增强还是强数据增强。
自训练不依赖于模型架构也不依赖于数据集。它可以与ResNets、EfficientNets、SpineNet等不同架构以及ImageNet、COCO、PASCAL等不同数据集很好地结合使用。
一般意义上来看,无论预训练是失败还是成功,自训练效果都是很好的。
在可扩展性方面,当我们拥有更多带标签的数据和更好的模型时,自训练被证明表现良好。
5、自训练的局限性
尽管自训练可以带来好处,但它也有一些局限性:
1)与在预训练模型上进行微调相比,自训练需要消耗更多的计算量。
2)预训练的加速范围是1.3倍至8倍,具体取决于预训练模型的质量、数据增强的强度和数据集的大小。
3)自训练并不能完全替代迁移学习和微调,这两种技术将来也会被大量使用。
六、总结
《Rethinking Pre-training and Self-training》这篇论文提出了很多有关预训练、联合训练、任务调整和普遍表征的基本问题。解决这些问题比建立具有数十亿参数的模型更为重要,可以帮助我们获得更好的直觉,以了解深度神经网络做出的决策。
雷锋网(公众号:雷锋网)雷锋网雷锋网
原文链接:https://medium.com/@nainaakash012/rethinking-pre-training-and-self-training-53d489b53cbc
雷锋网原创文章,未经授权禁止转载。详情见转载须知。