何恺明团队:stop gradient是孪生网络对比学习成功的关键

文 | Happy

源 | 极市平台


本文是FAIR的陈鑫磊&何恺明大神在无监督学习领域又一力作,提出了一种非常简单的表达学习机制用于避免表达学习中的“崩溃”问题,从理论与实验角度证实了所提方法的有效性;与此同时,还侧面证实了对比学习方法成功的关键性因素:孪生网络。

paper: https://arxiv.org/abs/2011.10566

Abstract

孪生网络已成为无监督表达学习领域的通用架构,现有方法通过最大化同一图像的两者增广的相似性使其避免“崩溃解(collapsing solutions)”问题。在这篇研究中,作者提出一种惊人的实证结果:Simple Siamese(SimSiam)网络甚至可以在无((1) negative sample pairs;(2)large batch;(3)momentum encoders)的情形下学习有意义的特征表达。

作者通过实验表明:对于损失与结构而言,“崩溃解”确实存在,但是“stop-gradient”操作对于避免“崩溃解”有非常重要的作用。作者提出了一种新颖的“stop-gradient”思想并通过实验对其进行了验证,该文所提SimSiam在ImageNet及下游任务上均取得了有竞争力的结果。作者期望:这个简单的基准方案可以驱动更多研员重新思考无监督表达学习中的孪生结构。

Method

上图给出了该文所提SimSiam的示意图,它以图像的两个随机变换作为输入,通过相同的编码网络(它包含一个骨干网络和一个投影MLP头模块,表示为h)提取特征并变换到高维空间。此外作者还定义了一个预测MLP头模块h,对其中一个分支的结果进行变换并与另一个分支的结果进行匹配,该过程可以描述为,SimSiam对上述特征进行负cosine相似性最小化:

注:上述公式等价于规范化向量的MSE损失。与此同时,作者还定义了一个对称损失:

上述两个损失作用于每一张图像,总损失是所有图像损失的平均,故最小的可能损失为-1.

需要的是:该文一个非常重要的概念是Stop-gradient操作(即上图的右分支部分)。可以通过对上述公式进行简单的修改得到本文的损失函数:

也就是说:在损失的第一项,不会从接收梯度信息;在其第二项,则会从接收梯度信息。

SimSiam的实现伪代码如下,有没有一种“就这么简单”的感觉???

# Algorithm1 SimSiam Pseudocode, Pytorch-like# f: backbone + projection mlp# h: prediction mlpfor x in loader: # load a minibatch x with n samples  x1, x2 = aug(x), aug(x) # random augmentation  z1, z2 = f(x1), f(x2) # projections, n-by-d  p1, p2 = h(z1), h(z2) # predictions, n-by-d  L = D(p1, z2)/2 + D(p2, z1)/2 # loss  L.backward() # back-propagate  update(f, h) # SGD update    def D(p, z): # negative cosine similarity  z = z.detach() # stop gradient  p = normalize(p, dim=1) # l2-normalize  z = normalize(z, dim=1) # l2-normalizereturn -(p*z).sum(dim=1).mean()

我们再来看一下SimSiam的基础配置:

  • Optimizer: SGD用于预训练,学习率为, 基础学习率为,学习率采用consine衰减机制,weight decay=0.0001,momentum=0.9。BatchSize默认512,采用了SynBatchNorm。

  • Projection MLP:编码网络中投影MLP部分的每个全连接层后接BN层,其输出层后无ReLU,隐含层的的维度为2048,MLP包含三个全连接层。

  • Prediction MLP:预测MLP中同样适用了BN层,但其输出层后无BN与ReLU。MLP有2个全连接层,第一个全连接层的输入与输出维度为2048,第二个的输出维度为512.

  • Backbone:作者选用了ResNet50作为骨干网络。

作者在ImageNet上线进行无监督预训练,然后采用监督方式冻结骨干网络训练分类头,最后在验证集上验证其性能。

Empirical Study

在该部分内容中,我们将实证研究SimSiam的表现,主要聚焦于哪些行为有助于避免“崩溃解”。

Stop-gradient

上图给出了Stop-gradient添加与否的性能对比,注网络架构与超参保持不变,区别仅在于是否添加Stop-gradient

上图left表示训练损失,可以看到:在无Stop-gradient时,优化器迅速找了了一个退化解并达到了最小可能损失-1。为证实上述退化解是“崩溃”导致的,作者研究了输出的规范化结果的标准差。如果输出“崩溃”到了常数向量,那么其每个通道的标准差应当是0,见上图middle。

作为对比,如果输出具有零均值各项同性高斯分布,可以看到其标准差为。上图middle中的蓝色曲线(即添加了Stop-gradient)接近,这也就意味着输出并没有“崩溃”。

上图right给出了KNN分类器的验证精度,KNN分类器可用于训练过程的监控。在无Stop-gradient时,其分类精度仅有0.1%,而添加Stop-gradient后最终分类精度可达67.7%。

上述实验表明:“崩溃”确实存在。但“崩溃”的存在不足以说明所提方法可以避免“崩溃”,尽管上述对比中仅有“stop-gradient”的区别。

Predictor

上表给出了Predictor MLP的影响性分析,可以看到:

  • 当移除预测MLP头模块h(即h为恒等映射)后,该模型不再有效(work);

  • 如果预测MLP头模块h固定为随机初始化,该模型同样不再有效;

  • 当预测MLP头模块采用常数学习率时,该模型甚至可以取得比基准更好的结果(多个实验中均有类似发现).

Batch Size

上表给出了Batch Size从64变换到4096过程中的精度变化,可以看到:该方法在非常大范围的batch size下表现均非常好

Batch Normalization

上表比较了投影与预测MLP中不同BN的配置对比,可以看到:

  • 移除所有BN层后,尽管精度只有34.6%,但不会造成“崩溃”;这种低精度更像是优化难问题,对隐含层添加BN后精度则提升到了67.4%;

  • 在投影MLP的输出后添加BN,精度可以进一步提升到68.1%;

  • 在预测MLP的输出添加BN后反而导致训练变的不稳定。

总而言之,BN有助于训练优化,这与监督学习中BN的作用类似;但并未看到BN有助于避免“崩溃”的证据

Similarity Function

所提方法除了与cosine相似性组合表现好外,其与交叉熵相似组合表现同样良好,见上表。此时的交叉熵相似定义如下:

可以看到:交叉熵相似性同样可以收敛到一个合理的解并不会导致“崩溃”,这也就是意味着“崩溃”避免行为与cosine相似性无关。

Symmetrization

尽管前述描述中用到了对称损失,但上表的结果表明:SimSiam的行为不依赖于对称损失:非对称损失同样取得了合理的结果,而对称损失有助于提升精度,这与“崩溃”避免无关

Summary

通过上面的一些列消融实验对比分析,可以看到:SimSiam可以得到有意义的结果而不会导致“崩溃”。优化器、BN、相似性函数、对称损失可能会影响精度,但与“崩溃”避免无关;对于“崩溃”避免起关键作用的是stop-gradient操作。

Hypothesis

接下来,我们将讨论:SimSiam到底在隐式的优化什么?并通过实验对其进行验证。主要从定义、证明以及讨论三个方面进行介绍。

Formulation

作者假设:SimSiam是类期望最大化算法的一种实现。它隐含的包含两组变量,并解决两个潜在子问题,而stop-gradient操作是引入额外变换的结果。我们考虑如下形式的损失:

其中分别表示特征提取网络与数据增广方法,x表示图像。在这里,作者引入了另外一个变量,其大小正比于图像数量,直观上来讲,是x的特征表达。

基于上述表述,我们考虑如下优化问题:

这种描述形式类似于k-means聚类问题,变量与聚类中心类似,是一个可学习参数;变量与样本x的对应向量(类似k-means的one-hot向量)类似:即它是x的特征表达。类似于k-means,上述问题可以通过交替方案(固定一个,求解另一个)进行求解:

对于的求解,可以采用SGD进行子问题求解,此时stop-gradient是一个很自然的结果,因为梯度先不要反向传播到,在该子问题中,它是一个常数;对于的七届,上述问题将转换为:

结合前述介绍,SimSiam可以视作上述求解方案的一次性交替近似。

此外需要注意:(1)上述分析并不包含预测器h;(2) 上述分析并不包含对称损失,对称损失并非该方法的必选项,但有助于提升精度。

Proof of concept

作者假设:SimSiam是一种类似交错优化的方案,其SGD更新间隔为1。基于该假设,所提方案在多步SGD更新下同样有效。为此,作者设计了一组实验验证上述假设,结果见下表。

在这里,等价与SimSiam。可以看到:multi-step variants work well。更多步的SGD更新甚至可以取得比SimSiam更优的结果。这就意味着:交错优化是一种可行的方案,而SimSiam是其特例。

Comparison

前述内容已经说明了所提方法的有效性,接下来将从ImageNet以及迁移学习的角度对比一下所提方法与其他SOTA方法。

上图给出了所提方法与其他SOTA无监督学习方法在ImageNet的性能,可以看到:SimSiam可以取得具有竞争力的结果。在100epoch训练下,所提方法具有最高的精度;但更长的训练所得收益反而变小。

上表给出了所提方法与其他SOTA方法在迁移学习方面的性能对比。从中可以看到:SimSiam表达可以很好的迁移到ImageNet以外的任务上,迁移模型的性能极具竞争力

最后,作者对比了所提方法与其他SOTA方法的区别&联系所在,见上图。

  • Relation to SimCLR:SimCLR依赖于负采样以避免“崩溃”,SimSiam可以是作为“SimCLR without negative”。

  • Relation to SwAV:SimSiam可以视作“SwAV without online clustering”.

  • Relation to BYOL: SimSiam可以视作“BYOL without the momentum encoder”.

全文到此结束,对该文感兴趣的同学建议去查看原文的实验结果与实验分析。

Conclusion

该文采通过非常简单的设计探索了孪生网络,所提方法方法的有效性意味着:孪生形状是这些表达学习方法(SimCLR, MoCo,SwAR等)成功的关键原因所在。孪生网络天然具有建模不变性的特征,而这也是表达学习的核心所在。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

 

[1] SimCLR: A simple framework for contrastive learning of visual representations

[2] SimCLRv2: Big self-supervised models are strong semi-supervised learners.

[3] SwAV:Unsupervised learning of visual features by contrasting cluster assignments

[4] MoCo: Momentum contrast for unsupervised visual representation learning.

[5]MoCov2:Improved baselines with momentum contrastive learning

[6] BYOL: Bootstrap your own latten: A new aproach to self-supervised learning.

[7] CPC: Data efficient image recognition with contrastive predictive coding.

[8] PIC: Parametric instance classification for unsupervised visual feature learning.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团无人配送CVPR2020论文CenterMask解读

计算机视觉技术是实现自动驾驶的重要部分,美团无人配送团队长期在该领域进行着积极的探索。不久前,高精地图组提出的CenterMask图像实例分割算法被CVPR2020收录,本文将对该方法进行介绍。 CVPR的全称是IEEE Conference on Computer Vision an…

如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

在平常的开发中经常会有很多列表页面,每做一个列表页就需要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件。如果版本更新迭代比较频繁,如此以往,就会使项目工程变得无比庞大臃肿。 如果看过这篇文章或者…

从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展

文 | 谷育龙Eric源 | 搜索推荐广告排序艺术我是谷育龙Eric,研究方向有深度学习、搜索推荐,喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。CIKM作为信息检索、数据挖掘等领域的国际一流会议,每年都有很多搜索推荐广告领域的精彩论文。…

复杂风控场景下,如何打造一款高效的规则引擎

| 在互联网时代,安全已经成为企业的命脉。美团信息安全团队需要采用各种措施和手段来保障业务安全,从而确保美团平台上的用户和商户利益不会受到侵害。 本文主要介绍了美团在打造自有规则引擎Zeus(中文名“宙斯”)的过程中&#x…

Android消息队列图片记录

很早之前为了给学生讲明白整个消息队列是怎么个情况,于是大概阅读了一下消息队列的整个工作过程,鉴于网上大部分都是文字说明,没有一个图例,于是做出了下面这张图,权当作以后复习之用,也供大家学习参考&…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

原文连接:https://blog.csdn.net/u011535541/article/details/83379151 转载自 Git使用教程 预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)一:Git是什么? Git是目前世界上最先…

主动学习入门篇:什么是主动学习?有哪些具体应用

文 | 淘系技术部 初类来源 | 知乎在大数据和算力的助力下,深度学习掀起了一波浪潮,在许多领域取得了显著的成绩。以监督学习为主的深度学习方法,往往期望能够拥有大量的标注样本进行训练,模型能够学到更多有价值的知识&#xff08…

LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

文章目录1. 题目信息2. LeetCode 59 解题3. LeetCode 54. 螺旋矩阵4.《剑指Offer》面试题291. 题目信息 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例:输入: 3 输出: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7…

如何查看Activity任务栈以及dumpsys_activity命令的简要使用及介绍

今天看到淘宝客户端的某个页面效果,效果是在两个Activity中做动画,为了知道究竟是不是在同一个Activity中做的效果,就必须采取一种手段来知道是不是同一个Activity.描述一下这个动画效果:列表页面点击图片,图片会滑动到…

论文浅尝 | 基于微量资源的神经网络跨语言命名实体识别

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答。来源:EMNLP 2018链接:https://www.aclweb.org/anthology/D18-1034问题背景与动机本文关注小语种/资源匮乏语言的跨语言命名实体识别问题&#xff0…

美团命名服务的挑战与演进

| 本文根据美团基础架构部技术专家舒超在2019 ArchSummit(全球架构师峰会)上的演讲内容整理而成。 命名服务主要解决微服务拆分后带来的服务发现、路由隔离等需求,是服务治理的基石。美团命名服务(以下简称MNS)作为服务…

NeurIPS 2020 | 自步对比学习:充分挖掘无监督学习样本

文 | 葛艺潇源 | PaperWeekly本文介绍一篇我们发表于 NeurIPS-2020 的论文《Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID》,该工作提出自步对比学习框架及混合记忆模型,旨在解决无监督及领域自适应表征学习中…

Postman安装与使用

原文链接:https://blog.csdn.net/fxbin123/article/details/80428216 一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。…

LeetCode 35. 搜索插入位置(二分查找)

文章目录1. 题目信息2. 解题2.1 暴力遍历2.2 二分查找1. 题目信息 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1:输入…

青年人在美团是怎样成长的?

2020年五四青年节,我们采访了美团技术团队9位青年代表,他们是来自清华大学、北京大学、中国科学院大学等国内高校的2位博士研究生和7位硕士研究生。在这个属于青年人的特别的日子里,我们请他们分享了自己在美团成长的故事。 道阻且长&#xf…

它来了它来了!2020深度学习硬核技术干货集锦!

这份干货来自于今天要给大家推荐的一个深度学习与计算机视觉领域知名公众号:「极市平台」。从2016年创立至今,极市平台深耕于DL与CV领域,输出300篇高质量原创文章,并积累了近10万名海内外专业算法开发者。极市平台公众号坚持每日更…

容器的使用和创建虚拟环境 vitualenv

xshell jupter容器的使用方法 #容器相当于子服务器 1 创建指定python版本的虚拟环境 方法1: 1.安装虚拟环境的第三方包 venv pip install venv 2.创建虚拟环境 cd 到存放虚拟环境的地址 在当前目录下创建名为env的虚拟环境: python -m venv env python…

Android中动态的更改selector中某张图片的属性

在我们平常开发的时候会有许多状态按钮,比如state_pressed,android:state_checked,或者就正常状态等等,我们做这样的效果通常需要三个文件,一张是按下的图片,一张是正常状态的图片,一张是管理它…

LeetCode 17. 电话号码的字母组合(回溯)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例:输入:"23" 输出:[&…

细数一行代码改变结局的炼丹骚操作

文 | 陀飞轮&圈圈&年年的铲屎官源 | 知乎tips总结知乎答主:陀飞轮谈一下自己知道的。尽量避开优化器、激活函数、数据增强等改进。。先上完整列表:Deep Learning: Cyclic LR、FloodingImage classification: ResNet、GN、Label Smoothing、Shuff…