当前位置: 首页 > 科技观察

预训练后,性能下降,自训练会取代预训练吗?

时间:2023-03-19 11:57:14 科技观察

早在2018年底,FAIR的研究人员就发表了一篇名为《Rethinking ImageNet Pre-training》的论文,随后发表在ICCV2019上。该论文对预训练做出了一些非常有趣的结论。最近,谷歌大脑的研究团队对这一概念进行了扩展。在新论文《Rethinking Pre-training and Self-training》中,不仅讨论了预训练,还对自训练进行了研究,比较了自训练与有监督预训练和同组任务中自监督预训练的区别。论文地址:https://arxiv.org/abs/2006.06882作者通过实验得出以下结论:如果预训练任务和目标任务有差异,预训练(包括监督和自监督))可能会损害目标任务的准确性;自训练适用于不同规模的数据集和不同强度的增强数据的训练;自训练可以看作是预训练的补充,联合预训练和自训练可以获得更大的收益。以下是机器学习研究工程师AakashNain对发表于Medium、AITechnologyReview编译的论文《Rethinking Pre-training and Self-training》的解读。I.前言在进入论文的细节之前,让我们回顾一下一些术语。预训练是在不同领域(例如计算机视觉、自然语言处理、语音处理)中使用的一种非常普遍的做法。在计算机视觉任务中,我们经常使用在一个数据集上预训练好的模型,可以直接应用于另一个数据集。例如,使用ImageNet预训练是一种可以广泛应用于对象分割和对象检测任务的初始化方法。为了实现这一点,通常使用两种技术,迁移学习和微调。另一方面,自训练也试图在训练过程中结合模型对未标记数据的预测,以获得其他可用信息,从而提高模型性能。比如使用ImageNet改进COCO物体检测模型。首先在COCO数据集上训练模型,然后使用模型生成ImageNet伪标签(我们将丢弃原始ImageNet标签),最后将伪标签的ImageNet数据集与带标签的COCO数据集结合起来训练新模型。自监督学习是另一种常用的预训练方法。自监督学习的目的不仅仅是学习高级特征。相反,我们希望模型能够更好地学习并且对各种不同的任务和数据集更加稳健。2.研究动机作者希望解决以下问题:预训练对训练结果有多大帮助?什么情况下使用预训练是无效的?与预训练相比,我们可以使用自训练并获得相似或更好的结果吗?如果自训练比预训练好(现在假设是这样),它比预训练好到什么程度?在什么情况下自训练比预训练更好?自训练的灵活性和可扩展性如何?3.Setup1.Datasetandmodeltargetdetection:作者使用COCO数据集(118,000张图片)进行有监督学习下的目标检测训练。ImageNet数据集(120万张图像)和OpenImage数据集(170万张图像)用作未标记的数据集。使用具有EfficientNet-B7的RetinaNet对象检测器作为主干网络。图像的分辨率保持在640x640,金字塔级别为P3到P7,每个像素使用9个锚点。语义分割:使用PASCALVOC2012分割训练集(1500张图像)在监督学习下进行语义分割训练。对于自我训练,作者使用了增强的PASCAL图像数据集(9000张图像)、标记和未标记的COCO(240,000张图像)和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预训练的checkpoint。使用EfficientNet-B7作为评估架构,为该模型设置了两个不同的检查点,如下所示:1)ImageNet:通过AutoAugment在检查点上训练EfficientNet-B7,在ImageNettop-1精度上达到84.5%。2)ImageNet++:论文《Self-training with Noisy Student improves ImageNet classification》中提出的NoisyStudent方法被用于训练EfficientNet-B7oncheckpoints,利用了额外的3亿张未标记图像,达到了86.9%的top-1准确率。随机初始化训练的结果被标记为RandInit。4.自训练自训练是基于NoisyStudent方法实现的,分为三个步骤:在标记数据(如COCO数据集)上训练teacher模型。使用教师模型在未标记的数据(例如ImageNet数据集)上生成伪标签。训练学生模型以联合优化人工和伪标签的损失。4.实验1.增强和标注的数据集大小对预训练的影响作者使用ImageNet进行有监督的预训练,改变标注的COCO数据集的大小来研究预训练对结果的影响。实验过程中,不仅会改变标注数据的大小,还会使用不同增强强度的数据集,使用以EfficientNet-B7为骨干网络的RetinaNe模型进行训练。作者观察到以下几点:使用高强度数据增强时,监督预训练会损害性能:作者指出,当他们使用如上所述的标准增强方法Augment-S1时,预训练有助于获得结果。但是随着增强强度的增加,预训练对结果的帮助不大。事实上,他们观察到在使用最强的数据增强(Augment-S3)时,预训练会显着损害性能。更多标记数据会降低监督预训练的价值:这不是新发现。我们都知道,当数据量较小时,预训练对结果有帮助。但是如果有足够数量的标记数据,从头开始训练不会产生糟糕的结果。作者发现了相同的结论,这与FAIR论文《Rethinking ImageNet Pre-training》一致。我的看法:大多数在ImageNet上训练的模型不使用非常强大的增强方法。在大量扩充数据后,模型可能无法正确收敛。在实践中,模型有时可能会过度拟合增强,尽管这需要进行适当的详细研究。2.增强和标记数据集大小对自训练的影响作者使用相同的模型(使用具有EfficientNet-B7主干的RetinaNet检测器)和相同的任务(COCO数据集对象检测)来研究自训练的效果。作者使用ImageNet数据集进行自我训练(在这种情况下丢弃了ImageNet的原始标签)。作者观察到以下几点:自训练有助于大数据集和高强度增强,即使预训练会对结果产生负面影响:作者发现,在使用大量数据增强时,将自训练应用于随机初始化的模型,这不仅提高了基线结果,而且在相同情况下也超过了预训练结果。本次实验的结果如下:自训练适用于各种不同大小的数据集,可以看作是对预训练的补充:作者发现自训练的另一个有趣的方面是它可以作为预训练的补充。简而言之,当与随机初始化模型或预训练模型相结合时,自我训练会持续提高性能。在不同的数据大小下,性能增益是一致的。但是,使用ImageNet++预训练时,相比使用随机初始化和ImageNet预训练,增益相对较小。这有什么具体原因吗?是的,ImageNet++初始化是从使用另外3亿张未标记图像的检查点获得的。3.Self-supervisedpre-trainingvsself-trainingSupervisedImageNet预训练会伤害最大数据集和高强度数据增强下的训练效果。但是自我监督的预训练呢?自监督学习(无标签预训练)的主要目标是建立一个通用表示,可以转移到更多类型的任务和数据集。为了研究自监督学习的效果,作者使用了完整的COCO数据集和最高强度的增强。目标是将随机初始化与使用SOTA自监督算法预训练的模型进行比较。我们在实验中使用SimCLR的检查点,然后在ImageNet上对其进行微调。由于SimCLR只使用ResNet-50,所以RetinaNet检测器的骨干网络被ResNet-50替代。结果如下:在这种情况下,我们观察到自我监督下的预训练会损害训练效果,但自我训练仍然可以提高性能。5.你学到了什么?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》指出了类似的发现,即在OpenImages数据集上进行预训练会损害COCO的性能,尽管两者都标有边界框。这意味着我们不仅希望任务相同,而且最好标签也相同,以便预训练真正有益于结果。同时,作者指出了另外两个有趣的现象:ImageNet的预训练模型,即使有额外的人工标签,效果也不如自训练。使用高强度数据增强方法(Augment-S4),使用PASCAL(训练+增强数据集)进行训练实际上会损害准确性。同时,通过在同一数据集上自我训练生成的伪标签提高了准确性。4.自训练的可扩展性、通用性和灵活性从作者进行??的所有实验中,我们可以得出以下结论:在灵活性方面,自训练在每个条件设置下都表现良好,无论是数据较少的状态,更多数据状态,弱数据增强或强数据增强。自训练不依赖于模型架构或数据集。它适用于不同的架构,如ResNets、EfficientNets、SpineNet和不同的数据集,如ImageNet、COCO、PASCAL。一般来说,无论预训练失败还是成功,自训练都效果很好。在可扩展性方面,当我们拥有更多标记数据和更好的模型时,自我训练已被证明表现良好。5.自我训练的局限性虽然自我训练可以带来好处,但它也有一些局限性:与预训练模型的微调相比,自我训练需要消耗更多的计算量。预训练的加速范围从1.3倍到8倍不等,具体取决于预训练模型的质量、数据增强的强度和数据集的大小。自训练不能完全替代迁移学习和微调,这两种技术在未来也将大量使用。6.结论《Rethinking Pre-training and Self-training》本文提出了许多关于预训练、联合训练、任务调整和一般表示的基本问题。解决这些问题比建立具有数十亿参数的模型更重要,并且可以帮助我们对深度神经网络做出的决策有更好的直觉。