由Facebook发布的非监督学习DINO引发的深入思考

本文介绍 聊一聊最近比较火的dino,facebook出品

由Facebook发布的非监督学习DINO引发的深入思考

本文为原创文章,未经授权不允许二次转载,如需要转载,请私信我获取授权.

很久没有更新文章了,工作太忙以至于没有时间思考.今天记录一篇对于facebook最新论文dino的思考.这其实还是transformer体系里面的一篇论文,只是这一篇看效果比较牛逼.一如既往的,我不对论文做文字翻译,只写我的思考和总结,甚至是一些不对的批判,抛砖引玉,欢迎一起礼貌交流探讨.

对应的代码链接:

github.com/facebookres…

之所以想写这篇论文,是因为题目是:Emerging Properties in Self-Supervised Vision Transformers,一般我看到标题包含transformer的论文不一定会感兴趣,但是看到Self-supervised (unsupervised) + Transformer, 我一定会感兴趣.个人认为,非监督学习将会是未来的一个趋势,尤其是self-supervised这种特定的方式,而途径只有可能是transformer (至少目前来看具有可行性),通过对这个方向的研究,未来才有可能建造出更加impressive的AI系统,甚至是GAI, 这就不是刷刷榜单这么简单了.所以今天就来好好聊聊.

近期一些非监督工作回顾

一如既往地,我的博客产出很少,为了体现质量,我会在每一篇里面穿插很多其他的内容,穿针引线,连点成线,聚线成面,让每一位读者都能有一个全局把握.说道非监督,近期不得不说的几篇工作诸如:

  • Momentum Contrast for Unsupervised Visual Representation Learning, 2019 (2020收录)
  • Improved Baselines with Momentum Contrastive Learning, 2020
  • An Empirical Study of Training Self-Supervised Vision Transformers, 2021

熟悉的朋友可能一看就知道,我要说的其实就是Moco系列.这三篇论文其实都是出自何凯明之手.我们先来看看这三篇论文的时间线,第一篇论文发表的背景是当时NLP领域transformer大热,应用于非监督表征学习的任务上产生了BERT, GPT这种非常横扫NLP各个任务的模型.第二篇是对标业内的新的SOTA的SimCLR,最后一篇当然就是今年大热的一个热点:将Transformer用于非监督任务上.关于Transformer一些综述性质的文章可以看我之前写的:

zhuanlan.zhihu.com/p/342512339

(为毛我回过头去看我写文章总感觉写的太浅显了… 贻笑大方之家,后面有机会我会做一些视频给大家详细讲解transformer!)

首先我们来解答这么几个问题:

  • moco系列解决什么问题?
  • 怎么解决的?
  • 效果怎么样?

相信这也是读者比较关心的问题.再陈述之前,先回到本文的议题:我们是要聊dino, 那么这个玩意和dino怎么联系起来呢?先别急,我们先来回答上面三个问题.

moco实际上就是使用自监督的方式去学习诸如分类这样的任务,然后这种学习到的backbone也可以进一步迁移到检测分割等任务上,实验效果显示它微调之后的效果比监督还好,完美的弥补了监督学习与非监督学习的鸿沟.

mocov1

我们不深入探讨一些实现细节,先贴一个论文里面的伪代码,给大家说一下具体是怎么去做的,细节暂且不做深入讨论:

image-20210508162345803

这个伪代码的做法维护了一个队列,在这个队列里面,存储的是模型输出的键,也就是key,然后我们会有另一组的query, 键和查询这两个变量通过对比loss, 更新队列里面的key, 同时会吐出最早的那个batch的key. 通过这么一些操作使得队列里面的key变得更加的唯一,同时新来了新的样本数据我再更新,直到我的队列里面包含了所有的特征,并且每个特征都不一样,从而实现我的非监督任务.

这么做的一个优势就是队列的长度其实是可控的,这也就意味着,我可以通过增大字典的大小,来提高分类的精准度,进而提升性能.这就好像是用反向传播的方式去做KNN, 你可以通过控制K的大小来控制你的聚类效果.

至于如何使用对比的loss, 如果知道修改momentum一定可以使得这一套可以work,以及对应的公式推导,大家可以仔细的阅读一下原来的那篇论文,论文链接都在引用里面.

mocov2

第二篇其实没啥可以讲的,增加一些trick使得效果更好,那我们就看看增加了什么trick. 简单来说借用了SimCLR里面的一些设计,应用到了Moco的体系内,然后超越了SimCLR,有点借力使力的味道.

image-20210508163824411

借用的SimCLR的trcik包括:

  • 更大batch;
  • 最后的FC变成了一个MLP (这也行??)
  • 更牛逼的数据增强

好吧,这篇感觉比较水

mocov3

这最近的这篇其实就是将非监督应用于transformer, 或者说把transformer拿过来,堆到了非监督的任务上.那么除此之外有哪些改变没?还是说还是moco那一套?我不看论文我都认为不可能是之前那一套,为什么呢?因为transformer就是天然的队列啊!而token就是你的key! 所以这篇文章出来,其实是很顺理成章的.

论文中花了一些笔墨描述他们使用ViT作为非监督学习的骨干网络的时候遇到的一个问题,随着训练的进行,会变得不稳定.根木原因,他们也不知道,于是就通过控制变量的方法去尝试找寻这个原因,实验发现一些有趣的结论.

从实验中可以看出随着batch的增大或者lr的增大,kNN accuracy都逐渐出现了dip的情况,并且dip的程度逐渐增加,呈现周期性出现。当使用LAMB optimizer时,随着lr的增加,虽然kNN accuracy还是平滑的曲线,但是中间部分还是会出现衰退.

文中也提到了如何让训练变得更加稳定的一些trick.

we explore freezing the patch projection layer during training. In other words, we use a fixed random patch projection layer to embed the patches, which is not learned. This can be easily done by applying a stop-gradient operation right after this layer.

通过free投影层的patch,换句话说,用固定的随机patch去投影,这部分参数不参与学习,这个实现起来也比较简单,可以参看moco的代码看看里面到底是如何实现的.

image-20210508165904114

图中可以看到,使用随机投影的方式貌似确实解决了问题.

最后mocov3的效果也是超越了之前所有的非监督架构:

这是moco到目前为止的故事,但这和我要将的DINO其实还是不一东西.因为dino将会解决的问题是:

除了分类,非监督学习+transformer能解决分割问题吗?换句话说,它在没有任何监督信息的基础上知道物体之间的相互关系吗?

DINO可能实现了更加阶层的视觉理解

说句实在的,我自从理解了ViT里面的具体实现,突然对transformer有一种很亲切的感觉,就好像我看到一位少年,乍一看,骨骼清奇,料定它未来一定会生大器,那么现在要做,就是好好投资一下它.事实上,transformer给我的,就是这么一种感觉,而深入理解DINO之后,我仿佛进一步的发现transformer的潜能,所以就多写点东西与大家分享.

这些年来,不管是CNN的大力发展也好,还是transformer的大力发展,大家其实都是在已有的监督任务上,告诉模型去建模他们看到的数据.这其实非常依赖于你对于数据的定义,这一点和NLP就很不一样,比如我们词嵌入,我不告诉模型任务信息,它就可以知道"刘德华"是一个人名,甚至可以告诉你其他跟这个名词有关系的名词.这是很早以前的效果,现在OpenAI可以告诉你,他们做的模型不仅可以理解词,还可以告诉你每个词之间的相互关系,甚至可以把你的自然语言的数据库检索问题写成SQL语句.这难道不牛逼吗?更有甚者,把GPT3的模型对接到图像领域,实现了DALL-E. 告诉它 绿色的钟表, 它就可以生成绿色的钟表.显然它学习到了更高阶的特征.

那么Computer Vision有没有可能做到这一点呢?

今天要讲的这个dino, 其实就做到了.请理解两个事情,实现分割和非监督的实现分割是两个概念. 当然也有一些其他的方法实现了非监督的语义分割,这其实也不难,但结合transformer来做的,应该DINO是第一个.

image-20210508172317750

这是DINO的效果.

需要注意的是,这个是AttentionMap, dino并没有任何语义的ground truth, 也没有任何类别告诉它这是一只猴子,但是它可以把所有注意力学到在这上面.

我这么说,你可能会觉得:就这?兄弟,你可别太天真了,这是game changer!! 这等于是丢给你一张图片,没有任何GT, 它就可以自动帮你把这些attention学出来!再仔细想一下,这是不是和NLP里面的embedding 很像?再想一下,我们现在最不缺的是什么?最不缺的是原始数据,每天互联网产生这么多图片,视频,如果这个transformer这么牛逼,全部丢进去,你觉得会产出一个什么样的AI? 一个超大版本的resnet101???

NO, no, no. 远没有这么简单.这就是为什么我看好这个方向的原因,也是我写这篇paper解析的原因.当然我们目前还不能完全做unsupervisor, 但是self-supervisor已经够用了!

就准备着Google AI或者FAIR放出更大的招吧,这将可能会使得游戏规则发生改变.

这个还能做些什么?使用Self-supervisor的方法,DINO学出来的模型,可以直接做分类,简单来说,你丢给他你要分类的图片,它可以自动挖掘出每幅图片不同的特征,并自动给你归类,想要几类有几类,这才是未来的AI.

要放到以前,我可能会觉得这种论断有点哗众取宠,但是DINO所展现出来的,不仅仅是分类的效果,还有网络学出来的非常清晰的热力图,注意力图,这些都足以证明,DINO所能做的,不仅仅是分类,包括分割,检测,未来的CV众多的task都未来可期,采用非监督的方式.

下面是DINO系统的一个简单原理.

img

DINO的原理其实也很简单,由于它是非监督的学习,因此它在学习的时候是不需要label的,为了达到这个非监督的目的,就需要

image-20210512154917643

基础来说,一个学习网络,和一个教学网络.输入实际上是同一张图片,但是经过不同的transformation, 二者的网络结构一致,不一样的只是参数.teacher网络的梯度会传给学生网络.teacher网络的参数会随着学生网络的参数更新而更新.

我们来看一下DINO网络的流程图:
image-20210512155910311

这个流程图可以说简单易懂,老少皆宜了.就和我上面说的步骤和那张流程图差不多.

我们来看一下DINO的效果到底咋样:

image-20210512160127178

单看Linear这一列,是所有的方法的对比,在固定类别输出下.可以看到DINO的方法,精度是最高的,在使用DeiT的架构基础之下,精度是远远地超过了RN50, 也就是传统的CNN.

再去看k-NN这个非监督的这一行,虽然比不上固定类别,但是相差也不大,尤其是使用transformer架构的时候,误差更小.

总结

DINO实际上是一个摸着石头过河的文章,里面做了很多详尽的ablation study, 我就不一一阐述,感兴趣的同学可以仔细看看论文.毫无疑问,DINO引领大家来到了一个新的领域,这一领域将开创Unsupervise和Transformer新的结合.如同我之前的判断,transformer训练所需要的海量数据,仅从监督上去学习是不够的,而非监督的学习如果能够让transformer工作的很快,那么未来毫无疑问,这将是CV的一个新的篇章.

Reference

  1. Momentum Contrast for Unsupervised Visual Representation Learning
  2. Improved Baselines with Momentum Contrastive Learning
  3. An Empirical Study of Training Self-Supervised Vision Transformers
  4. 陀飞轮-Moco三部曲
  5. Emerging Properties in Self-Supervised Vision Transformers

免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » 由Facebook发布的非监督学习DINO引发的深入思考

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情