这可能是最简单又有效的自监督学习方法了

文 | 王珣@知乎
本文已获作者授权,禁止二次转载

从Kaiming的MoCo和Hinton组Chen Ting的SimCLR开始,自监督学习(SSL)成了计算机视觉的热潮显学。凡是大佬大组(Kaiming, VGG,MMLAB等),近两年都是搞了几个自监督方法的。从一开始的新奇兴奋地看着Arxiv上新发布的SSL方法(像MoCo, SwAV, BYOL, SimSiam等这些方法着实有趣),但是有一些相关的文章多少有些泛滥了,让人有些眼花缭乱。最近FAIR的一个工作,着实让我眼前一亮,觉得好有意思,颇为叹服。关键的是这个方法特别简单,应当可以称之为最简单的SSL。

论文题目:
Barlow Twins: Self-Supervised Learning via Redundancy Reduction

论文链接:
https://arxiv.org/abs/2103.03230.pdf

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0324】 下载论文PDF~

藉此机会,我也自己梳理一下SSL在这不到两年的时间里的个人认为比较重要的认知变化的节点:从SimCLR,MoCo为起点,以这篇BarLow Twins为暂时的终点。从这个历史线上去看SSL的发展非常有趣:计算机视觉圈子对于SSL的认知在不断打脸的过程中不断深入。

1.首先是2020年初的SimCLR

这个文章的核心贡献有二:一是提供了使用google的丰富的计算资源和强大的工程能力,使用高达4096的mini-batch size,把SSL的效果推到了supervised方法差不多的效果(预训练模型做下游任务);二是细致地整理了一些对SSL效果提升很有用的tricks: 如更长的训练,多层MLP的projector以及更强的data augmentations。这些有用的trick在后来的SSL的论文中一直被沿用,是SSL发展的基石,而第一个点,则是指出了大batch-size出奇迹,为未来的论文指出了改进的路,或者树立了一个进击的靶子。

2.MoCo 共有两版本

原始版本是2019年末放出来的。在SimCLR出现后之后,又吸收SimCLR的几个SSL小技巧,改进出了V2版,但是整体方法的核心是没有变化的,V2仅仅是一个2页试验报告。相比于SimCLR大力出奇迹,恺明设计了一个巧妙的momentum encoder 和 dynamic queue 去获得大量的负样本。这里的momentum encoder 采用了动量更新机制,除了文章本身的分析,另一层的理解是:其实momentum encoder相当于是teacher, 而dynamic里是来自不同mini-batch的样本,所以teacher需要在时间维度上对于同一个样本的输出具有一致性,否则,要学习的encoder 也就是student,会没有一个稳定的学习目标,难以收敛;当然另一方面,teacher 也不能一直不变,如果teacher一直不变,student就是在向一个随机的teacher学习。综上,动量更新机制是一个相当好理解的选择。

阶段小结

抛开细节,SimCLR和MoCo的核心点,都是认为negatives(负样本) 非常重要,一定要有足够多的负样本,只不过实现方式略有不同。SimCLR 拿着TPU,直接把batch size搞到4096,一力降十会;恺明则是巧妙设计Momentum机制,避开了硬件工程的限制,做出了可以飞入寻常百姓家的MoCo。再次重申,这时候的认识,还是停留在需要大量的负样本,来提升SSL model的效果这个历史局限里。

3.BYOL 是Deep Mind 在2020年发布的工作

文章的核心点就是要破除负样本迷信 ,BYOL认为不使用负样本,照样可以训练出效果拔群的SSL model。但是如果直接抛弃负样本,只拉近正样本对的话,model 会容易陷入平凡解:对于任意样本,输出同样的embedding。为了在没有负样本的帮助下,解决这个问题。BYOL 在Projector之上,增加了一个新的模块,取名Predictor。整体可以理解为在MoCo的基础上,但是不再直接拉近正样本对(即同一个样本,不同增强后的输出)的距离,而是通过Predictor去学习online encoder 到 target encoder (即moco里的momentum encoder)的映射。另外,对target network梯度不会传递,即Stop-Gradient。(注:在MoCo中,momentum encoder也是没有梯度回传的,不过MoCo这么没有给momentum encoder回传梯度是因为queue里面的负样本来自过去的mini-batch,其计算图已经丢失,没有办法回传梯度,而如果只回传正样本对的梯度,会很不合理。而BYOL是只考虑正样本对,如果梯度对于online encoder 和 target encoder都回传,不存在这个不合理的点,因此,Stop-Gradient是BYOL的一个特别的设计。)

4.SimSiam 是在BYOL的再次做减法

这里在BYOL的基础上去除了momentum更新的target encoder, 直接让target encoder = online encoder。指出了predictor+stop-gradinent 是训练出强大SSL encoder的一个充分条件。

再次的阶段小结

在这个阶段,认识进展到了可以没有负样本的阶段,但是不使用负样本,模型就会有陷入平凡解的风险。为此,BYOL设计了predictor 模块,并为之配套了stop-gradient技巧;SimSiam通过大量的试验和控制变量,进一步做减法,去除了momentum update。让模型进一步变得简单。再次总结,就是predictor模块,避免了直接拉近正样本对,对于梯度的直接回传,让模型陷入平凡解。BYOL 和 SimSiam 在方法上都是很不错的,试验也做得很可信充分,可是对于方法的解释并没有那么深刻置信,可能要寻求一个扎实的解释也确实很难。可以参见(https://spaces.ac.cn/archives/7980),也是另一个角度的解释,颇为有趣合理。此时已经进入到了摆脱了负样本了,但是在不使用负样本的情况,要想成功训练好一个SSL model,需要引入新的trick: 即predictor+stop-gradient。这样子来看,难免有点像左手换右手的无用功,但是整体的技术认识是进步了很多的。

5.最后,终于到了这次的主角:Barlow Twins

在不考虑数据增强这种大家都有的trick的基础上, Barlow Twins 既没有使用负样本,没有动量更新,也没有predictor和stop gradient的奇妙操作。Twins 所做的是换了一种视角去学习表示,从embeddig本身出发,而不是从样本出发。优化目标是使得不同视角下的特征的相关矩阵接近恒等矩阵,即让不同的维度的特征尽量表示不同的信息,从而提升特征的表征能力。这种做法,和以前传统降维(如PCA)的方法是有共通之处的,甚至优化的目标可以说非常一致。

▲Barlow Twins 模型整体图

模型为,其模型参数记为

对于不同的视角下的输入,分别输出的特征, 其中

那么Twins 方法和以上的基于正负样本对的所有方法的区别,不严格(抛去特征normalize,BN等操作来说)的来说,可以用一句话,或者说两个式子来概括。

过去的方法大多基于InfoNCE loss 或者类似的对比损失函数,其目的是为了是的样本相关阵接近恒等矩阵,即

而Twins的目的是为了让特征相关阵接近恒等,即:

对于对比损失类方法,比如SimCLR或MoCo需要很大的Batchsize或者用queue的方式去模拟很大的batchsize, 而Twins需要极大的特征维度(8192)。这种特性和以上两个公式是完全对应且对称的。一个需要大,一个需要大

▲Barlow Twins 的核心在于提出了图中新的损失函数

总结

从历史线上来看,从SimCLR和MoCo说一定要有大量的负样本,到BYOL和SimSiam通过神奇操作(stop-grad+predictor)验证了负样本并非不可或缺,最终到了Twins切换了一直以来从对比学习去训练SSL的视角,转向从特征本身出发,推开了另一扇大门。对比而言,相比于最简单的裸InfoNCE,Twins仅仅是换了一个loss function (+大维度的特征)。不过,大的维度相比于增加batchsize的代价要小得多,就是多占一点的显存。

后台回复关键词【入群

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

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

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

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

相关文章

大众点评账号业务高可用进阶之路

引言 在任何一家互联网公司,不管其主营业务是什么,都会有一套自己的账号体系。账号既是公司所有业务发展留下的最宝贵资产,它可以用来衡量业务指标,例如日活、月活、留存等,同时也给不同业务线提供了大量潜在用户&…

Android官方开发文档Training系列课程中文版:电池续航时间优化之按需开启广播接收器

原文地址:http://android.xsoftlab.net/training/monitoring-device-state/manifest-receivers.html 监测设备状态变化最简单的实现方式就是为每种状态都创建一个广播接收器,然后只需在相应的广播接收器内依据当前的设备状态重新执行各自的任务即可。 …

LeetCode 493. 翻转对(归并排序)

1. 题目 给定一个数组 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 输入: [1,3,2,3,1] 输出: 2输入: [2,4,3,5,1] 输出: 3来源&#xff1a;力扣&#xff08;LeetCode&#x…

执行Dockerfile构建基础镜像,建立python工作环境

Docker Dockerfile&#xff1a;https://www.runoob.com/docker/docker-dockerfile.html 核心内容&#xff1a; 指令详解 COPY 复制指令&#xff0c;从上下文目录中复制文件或者目录到容器里指定路径。 格式&#xff1a; COPY [--chown<user>:<group>] <源路径…

论文浅尝 - ICML2020 | 通过关系图上的贝叶斯元学习进行少样本关系提取

论文笔记整理&#xff1a;申时荣&#xff0c;东南大学博士生。来源&#xff1a;ICML 2020链接&#xff1a;http://arxiv.org/abs/2007.02387一、介绍本文研究了少样本关系提取&#xff0c;旨在通过训练每个关系少量带有标记示例的句子来预测句子中一对实体的关系。为了更有效地…

美团外卖客户端高可用建设体系

背景 美团外卖从2013年11月开始起步&#xff0c;经过数年的高速发展&#xff0c;一直在不断地刷新着记录。2018年5月19日&#xff0c;日订单量峰值突破2000万单&#xff0c;已经成为全球规模最大的外卖平台。业务的快速发展对系统稳定性提出了更高的要求&#xff0c;如何为线上…

Android官方开发文档Training系列课程中文版:线程执行操作之定义线程执行代码

原文地址&#xff1a;http://android.xsoftlab.net/training/multiple-threads/index.html 引言 大量的数据处理往往需要花费很长的时间&#xff0c;但如果将这些工作切分并行处理&#xff0c;那么它的速度与效率就会提升很多。在拥有多线程处理器的设备中&#xff0c;系统可…

我哭了,工业界AI项目落地有多难?

文 | 皮特潘源 | CVer人工智能是近几年最火热的技术名词&#xff0c;如果不谈人工智能相当于落伍&#xff0c;但当真正进入人工智能领域时才发现&#xff0c;一开始以为“拦路虎”是算法&#xff0c;后面发现落地是一个巨大的难题。本文从作者的经历和经验教训展开&#xff0c;…

LeetCode 646. 最长数对链(区间 贪心)

1. 题目 给出 n 个数对。 在每一个数对中&#xff0c;第一个数字总是比第二个数字小。 现在&#xff0c;我们定义一种跟随关系&#xff0c;当且仅当 b < c 时&#xff0c;数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。 给定一个对数集合&#xf…

以太网和路由设置,内网和外网同时上

第一步&#xff0c;查看自己内网的地址&#xff0c;网络与internet设置&#xff0c;更改适配器选项&#xff0c;出现下面的页面 点击内网&#xff0c;右击WLan&#xff0c;点击状态 点击详细信息&#xff1a; 记录网关信息&#xff1a; 第二步&#xff1a;查找路由器设置 …

论文浅尝 - AAAI2020 | 通过知识库问答改善知识感知对话生成

论文笔记整理&#xff1a;胡楠&#xff0c;东南大学博士。来源&#xff1a;AAAI 2020动机现在的将外部知识整合到对话系统中的研究仍然存在一定缺陷。首先&#xff0c;先前的方法难以处理某些语句的主语和关系&#xff0c;比如当语句中的相关实体彼此相距较远时。其次&#xff…

互联网企业数据安全体系建设

一、背景 Facebook数据泄露事件一度成为互联网行业的焦点&#xff0c;几百亿美元市值瞬间蒸发&#xff0c;这个代价足以在地球上养活一支绝对庞大的安全团队&#xff0c;甚至可以直接收购几家规模比较大的安全公司了。 虽然媒体上发表了很多谴责的言论&#xff0c;但实事求是地…

Android官方开发文档Training系列课程中文版:线程执行操作之创建多线程管理器

原文地址&#xff1a;http://android.xsoftlab.net/training/multiple-threads/create-threadpool.html 上节课我们学习了如何定义一个任务。如果只是执行单次任务&#xff0c;那么刚刚所学的已经基本满足要求了。如果需要针对不同的数据执行同种任务&#xff0c;并且需要同一…

NLP研究者必备的语言学书籍!

文 | Serena Gao知乎首先&#xff0c;做nlp不一定要很懂语言学&#xff0c;也不一定要跟语言学扯上关系。nlp可以仅是data mining&#xff0c;features engineering, 也的确有很多work目前在用文本或者对话做为数据集&#xff0c;然后用统计学方法实现目的&#xff0c;比如deep…

LeetCode 334. 递增的三元子序列

1. 题目 给定一个未排序的数组&#xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1&#xff0c; 使得 arr[i] < arr[j] < arr[k] &#xff0c;返回 true ; 否则返回 false 。 说…

论文小综 | Neuro-Symbolic Reasoning in NLP

本文作者&#xff1a;邓淑敏&#xff0c;浙江大学在读博士&#xff0c;研究方向为低资源条件下知识图谱自动化构建关键技术研究。深度学习的高速发展使得模型的表达能力逐步完善&#xff0c;在一些感知任务&#xff08;例如动作识别和事件检测&#xff09;上取得了显著成果。但…

实时数据产品实践——美团大交通战场沙盘

背景 大数据时代&#xff0c;数据的重要性不言而喻&#xff0c;尤其对于互联网公司&#xff0c;随着业务的快速变化&#xff0c;商业模式的不断创新、用户体验个性化、实时化需求日益突出&#xff0c;海量数据实时处理在商业方面的需求越来越大。如何通过数据快速分析出用户的行…

Android官方开发文档Training系列课程中文版:线程执行操作之线程池操作

原文地址&#xff1a;http://android.xsoftlab.net/training/multiple-threads/run-code.html#StopThread 上节课我们学习了如何定义一个类用于管理线程以及任务。这节课将会学习如何在线程池中运行任务。要做到这一点&#xff0c;只需要往线程池的工作队列中添加任务即可。当…

谁才是Transformer家族中的最强王者?谷歌告诉你答案

文 | Sherry自从17年Attention is all you need发出&#xff0c;继而18年BERT刷新各大榜单&#xff0c;大型预训练Transformer似乎已经成为自然语言处理的标准基准模型&#xff0c;甚至进一步渗透到图像领域。各路大神基于Transformer提出了海量改进方法。这些改变是否对大多数…

LeetCode 652. 寻找重复的子树(DFS)

1. 题目 给定一棵二叉树&#xff0c;返回所有重复的子树。对于同一类的重复子树&#xff0c;你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1&#xff1a;1/ \2 3/ / \4 2 4/4 下面是两个重复的子树&#xff1a…