SimCLR v2算法笔记

2023-05-16

论文:Big Self-Supervised Models are Strong Semi-Supervised Learners
链接:https://arxiv.org/abs/2006.10029

这篇是发表于NIPS2020的SimCLR V2,有非常漂亮的结果。

流程是这样的(参考Figure3):先在一个无标签数据集上做自监督训练,这部分其实和SimCLR没有太大区别,就是对网络复杂度和非线性变换层做了调整,但是效果大增;然后在一个有标签的小数据集上做fine tune;最后将fine tune的模型作为teacher model做蒸馏,数据集采用的是无标签数据集。

这篇论文在一开始就放出了一个非常重要的结论,那就是在自监督训练(包括fine-tune)过程中,网络结构的复杂性对效果影响很大,具体来说网络结构越宽越深,则效果越好,尤其是当有标签的数据越少时,这种影响越明显。这部分其实在SimCLR论文中也有体现了,参考SimCLR论文中的Figure7,只不过在SimCLR V2中对这方面做了更多的实验(比如fine tune),注:SimCLR中用的网络主要是ResNet-50(4✖️),SimCLR V2中用的主要是ResNet-152(3✖️+SK),注意这个SK

SimCLR V2引入了蒸馏,也就是将fine tune后的复杂模型当做teacher model,蒸馏到简单的student model上,这部分做法的主要初衷应该是在引入复杂网络后出于对模型效率的考虑(当然论文中也做了相同网络的蒸馏,也就是self-distilled,也能进一步提升效果),而且蒸馏本身就是Hinton老爷子的工作,所以结合起来就比较自然。另外蒸馏时候可以仅用无标签的数据(默认),或者联合使用有标签和无标签的数据,这样整个训练过程就结束了,如Figure3所示。
在这里插入图片描述

Table1很重要的一个信息就是网络深度和宽度对自监督和fine-tune阶段效果的影响还挺大的,尤其当有标签的数据较少时,这种影响更明显(参考Figure1),但是看最后一列有监督的结果可以发现这些改变对有监督训练的影响并没有那么大,或许是因为模型复杂度和数据复杂度没有对齐的原因,有监督训练中数据复杂度已经到达瓶颈了

其次是SK,从表格来看,是否用SK对结果的影响也很大,这一点值得探究原因,至少说明在网络结构方面还有很多可探索的空间。另外还有一个点,fine-tuned on 100%这一列的效果是要普遍优于supervised的,也就是相同的数据和网络结构,不同的训练方式下,最终会相差2个点左右,这个在SimCLR论文附录的TableB.1中也有类似结果,这或许就是半监督的魅力。最后还有一个点是在有标签数据仅有1%的时候,fine tune的网络结构越复杂,却似乎没有出现明显的过拟合现象,指标上升依旧非常稳健,这一点也比较有意思,这部分如果可以给出训练阶段的指标对比就更好了。
在这里插入图片描述

SimCLR V2和SimCLR还有一个不同点是非线性层的数量和fine tune时候的起始层位置,这部分在论文中的Figure5有非常清晰的对比,分别是a和b。结论就是非线性层数量为3(SimCLR的非线性层数量是2),fine tune的时候从第一层开始效果最好(SimCLR在fine tune的时候是完全丢掉非线性层的)。这结果确实有点魔性,因为在有标签数据占比较少时对指标的影响还是比较大的,而且其他一些自监督算法中也能看到类似的影子,比如BYOL
在这里插入图片描述

Table2是蒸馏相关的,变量包括损失函数的构成和数据集构成,损失函数部分最后默认使用蒸馏损失,而不考虑有监督的损失;数据集部分有些疑惑,论文中有些部分写的是只有无标签数据,但是这里又包含有标签数据,但其实有标签数据占比较小,所以影响应该也不大。
在这里插入图片描述

Figure6这个蒸馏相关的实验也很有借鉴意义。从图例来看,黑色线、蓝色线(参考Table1)和红色线(student和teacher一样)都比较好理解,这部分重点还是红色线和蓝色线的对比,可以看出self-distilled(学生网络和教师网络一样)可以进一步提升模型的效果,因此论文中在做常规的蒸馏(学生网络比教师网络简单)之前,会先做一次self-distilled,进一步提升教师网络的效果。绿色线的含义应该是固定了teacher是ResNet-152(2✖️+SK),如果是这样的话绿色线和红色线的最后一个点应该是重合的,从图中看好像只是差不多重合而已。
在这里插入图片描述

最后Table3是和现有算法的对比,最后3行的teacher model都是self-distilled的ResNet-152(3✖️+SK),可以看到仅用10%数据训的ResNet-50的效果(77.5%)已经超过了有监督的ResNet-50了(76.6%),amazing。同时从这个表格的3段式划分也可以大概窥见目前相关领域算法的大致情况,纯粹task-agnostic的算法要在指标上超过SimCLR v2还是有点困难的,所以可以在这一系列算法中添加fine tune的操作,应该会有不错的结果。而纯task-specific的论文主要还是围绕伪标签来的,整体上也有不错的结果,值得跟进。SimCLR系列算法在训练阶段都要求大batch size(复杂网络的前提下要千级别),这一点对机器资源要求比较高,应该会成为后续很多算法突破的方向。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimCLR v2算法笔记 的相关文章

  • linux 最简单的模块的编写和运行

    第一次动手编写一个内核模块 xff0c 但是查找了许多资料没有一个可以完美通过编译的 xff0c 郁闷 xff0c 最后还是解决了 xff0c 分享出来 首先是hello c include lt linux kernel h gt Nee
  • 截获或替换linux系统调用

    直接上代码吧 xff1a hello c include lt linux kernel h gt Needed by all modules include lt linux module h gt Needed for KERN inc
  • oracle临时表实际应用

    xff08 这段是后面添加的 xff1a 临时表 xff0c 在实际应用中 xff0c 其实和nologging的固定表 xff0c 是差不多的 xff0c 都是中间表 xff0c 所以这里为什么添加这段话 xff0c 是让自己记得 xff
  • linux sys_call_table 初始化

    前几天看内核中系统调用代码 xff0c 在系统调用向量表初始化中 xff0c 有下面这段代码写的让我有点摸不着头脑 xff1a const sys call ptr t sys call table NR syscall max 43 1
  • Linux gcc 利用反汇编来研究C语言函数堆栈的分配方式

    越来越感觉学习C和汇编才是最能接近计算机本质的途径 所以 xff0c 今天开始研究汇编了 xff0c 先从gcc反汇编开始 首先是下面的C代码 xff1a include lt stdio h gt int sum int a int b
  • ubuntu linux GAIM QQ

    sudo add apt repository ppa lainme pidgin lwqq sudo apt get update sudo apt get install pidgin lwqq sudo apt get install
  • Ubuntu 14.10 播放avi视频闪屏的简单解决方案

    昨天将ubuntu升级到了14 10版本 xff0c 没有得到想象中的视觉效果 但是 xff0c 后来却发现不能播放avi视频了 xff0c 尝试了各种播放器 xff0c 都无解 xff0c 总是闪屏 xff0c 而播放flv格式的视频就没
  • Ubuntu删除Compiz之后 恢复方法

    因为ubuntu14 10不能播放avi的问题纠结了很久 xff0c 最终使用转码软件解决的 但是还是不甘心啊 xff0c 总想解决这个问题或者知道问题的原因 偶然看到了系统中的compiz软件 xff0c 想到在网上看到的有人说是因为系统
  • Ubuntu14.10 unity-tweak-tool 不能正常打开的解决方法

    新的系统 xff0c 风格都变了 xff0c 折腾了一晚上 xff0c 想安装个苹果主题 xff0c 可是unity tweak tool 这个东西就是死活打不开 这么晚了 xff0c 不想多说了 xff0c 直接给解决方法吧 xff1a
  • 安装ubuntu14.04后做的一些事情

    ubuntu又折腾坏了 xff0c 于是有重新装系统了 装完之后 xff0c 美化美化 xff1a 1 本来嫌每次都sudo麻烦 xff0c 于是想将我的帐号设置为sudo不用输入密码 xff0c 但是编辑sudoer文件的时候 xff0c
  • LFS编译GCC GNU_USER_TARGET_OS_CPP_BUILTINS not declared in this scope

    gcc v 发现使用的gcc版本是4 7 安装gcc 4 4 or 4 3 xff0c 重新链接 xff0c 问题解决 apt get install gcc 4 4 g 43 43 4 4 进入 usr bin cd usr bin 建个
  • 将LFS系统通过grub装到优盘上启动

    最近在搞LFS xff0c 就是通过自己动手 xff0c 亲自编译源代码的方式 xff0c 建立自己的linux发行版 通过这个过程可以详细的深入了解linux内部的工作方式 xff0c 对理解操作系统的机制有很大的帮助 做这个项目 xff
  • kali linux 解决风扇猛转

    之前玩ubuntu的时候 xff0c 就感觉风扇猛转个不停 xff0c 之前是通过安装nvidia的闭源驱动 xff0c 然后再安装一个管理双显卡的工具解决的 xff0c 确实风扇及立马安静了下来 http www linuxidc com
  • PHP下十六位数值转IP地址

    PHP函数提供的long2ip和ip2long是IP和整形数值之间的转换 xff0c 没有和十六位数值的转换 xff0c 所以写下这个函数 function ntoip iphex len 61 strlen iphex 得到16进制字符串
  • linux系统备份命令

    tar cvpzf backup tgz exclude 61 proc exclude 61 lost 43 found exclude 61 backup tgz exclude 61 mnt exclude 61 sys exclud
  • 硬盘寻址能力的变换

    1 8G限制 硬盘寻址的限制 硬盘最初使用的寻址方法是柱面 磁头 扇区CHS xff08 Cylinder Head Sector xff09 xff0c 也称为3D模式 xff0c 是硬盘最早采用的寻址模式 通过分别指定柱面 磁头 扇区来
  • 关于动态new二维数组的问题

  • Linux 调节并自动保存屏幕亮度,重启有效

    用过几个Linux的发行版 xff0c 发现在笔记本上每次调节亮度后 xff0c 不能固定下来 xff0c 重新开机后就又恢复最大亮度了 之前一直用的是网上流行的方法 xff0c 即往etc rc local文件写入命令 xff0c 使其每
  • kali linux 安装Pidgin QQ

    首先 xff0c 需要kali开启PPA源 PPA xff08 Personal Package Archives xff1a 个人软件包档案 xff09 是Ubuntu Launchpad网络提供的一项服务 xff0c 允许个人用户上传软
  • 教你如何用Kali Linux制作windows 10安装优盘

    最近win10发布了 xff0c 看样子挺不错 虽然我一直用的是Linux xff0c 但是还是想体验一把win10 主要是尼玛我想看百度云里存放的教学视频 xff0c 但是里面的视频还需要特殊的播放器 xff0c 也是不得己 xff0c

随机推荐