SIMCLR V2论文整理

2021-09-27  本文已影响0人  赵小闹闹

摘要
目前利用大量无标签数据的主要方法是无监督预训练+监督型调参。本文提出的方法包括三部分1)使用SIMCLRv2对一个大型的resnet网络进行无监督预训练学习,2)在少量有标签数据上进行监督调参,3)在无标签数据上进行蒸馏以精炼模型并迁移特定任务的知识。利用1%的标签,在imagenet取得了73.9%的top1准确率,利用10%的标签,取得77.5%的top1准确率。

1.introduction

在机器学习中,对少量有标签的数据进行学习同时尽可能利用大量无标签数据的信息,是很重要的一个问题。一种半监督学习的方法是,在大量无标注的数据上进行无监督或者自监督学习的预训练,然后进行有监督的调参学习。这种思路在预训练过程中,对无标签数据进行任务不可知的学习(task-agnostic way)。在调参阶段,使用有标签的数据,进行特定任务学习(task-specific )。这一思想在NLP领域非常常见,即使用无标注的数据训练一个大模型,然后在少量有标注的数据上进行调参以解决特定任务。
本文提出的方法:预训练(sinclrv2)+调参+蒸馏


image.png

贡献:

在linear evaluation protocol模式下,simclrv2取得了79.8的top1准确率,比sota高4.3%。在1%/10%上调参模式下,取得 76.6% / 80.9% top-1准确率。蒸馏后73.9% / 77.5% top-1准确率。resnet50的标准监督学习方法的准确率是76.6%

2.method

自监督学习

simclrv2 xiangduiy v1的改进:

调参

simclr预训练后直接将投射头抛弃掉,使用f()进行调参。v2使用投射头的中间层进行调参。


simclrv1

自训练/蒸馏

蒸馏损失


image.png

3. 实验

128块云TPU,batchsize=4096,GN,800epoch.
提升模型深度和宽度有助于提升模型性能,但是宽度的贡献比深度小。


image.png

当使用投射头进行调参时,更深的投射头性能更好,一般使用投射头的第一层进行调参(第0层指的是hi)。


image.png
要注意使用更大的resnet时候,更深的投射头的贡献变小。
蒸馏一般使用两个损失,蒸馏损失+监督学习交叉熵损失。实验证明只使用蒸馏损失足够了。
image.png

蒸馏一般有两种,自蒸馏(蒸馏前后结构相同),普通蒸馏(学生比教师网络小)。为了获得最优的性能,本文先自蒸馏,然后再蒸馏成小模型。


image.png
与相关自监督方法对比
image.png
上一篇 下一篇

猜你喜欢

热点阅读