热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聊聊我眼中恺明大神MAE的成功之处

卷友们好,我是rumor。这两天忍不住又卷去看CV领域的论文了,主要是前些日子恺明大神的MAE太过强大,感觉不看会错过一个亿。看了之后果然

卷友们好,我是rumor。

这两天忍不住又卷去看CV领域的论文了,主要是前些日子恺明大神的MAE太过强大,感觉不看会错过一个亿。看了之后果然不负我的期待,大道至简,思路太清晰了、太深刻了,给他投光我的几百个B币都不为过

不过,相信很多NLP领域的同学和我的第一反应一样,听到CV领域终于出了一个类似BERT的模型,却内心有一丝丝的疑惑:BERT都出来三年了,CV领域的为什么现在才出来?而明明看起来这么简单的做法,为什么只有恺明大神成功了?

没错,我也有这个疑惑,于是我去翻了一下恺明大神在相关工作提到的iGPT、ViT、BEiT。把这三篇看下来,我才真正领略到了大神思想的高度。

难道之前的工作没试过提升mask ratio吗?不是的。

难道之前的工作没试过用ViT预测pixel吗?不是的。

而这就是大神的NB之处,明明别人都试过了,觉得不work,而MAE就是能把这两个核心问题想清楚,然后做出效果

到底怎么做出来的呢?不急,我来帮大家捋一捋。

iGPT

我们这个故事,要从2020年OpenAI的iGPT讲起。OpenAI是一个想把一切GPT化的公司,到了图像这里,自然的想法就是用GPT来训一个图像模型。但是图像是个三维的数据(长x宽x通道),不像文字一样可以变成一维向量的序列。如果直接把图像的三维矩阵拼成二维也可以,但这样数量就太多了。于是iGPT就想到了一个方法,把图像马赛克掉,变成一个个色块,数量一下就减少了,可以像NLP一样愉快地输入到Transformer了:

08dc5f0bc23def1a0d4d812c16a6196f.png

解决这个核心难点之后就很愉快了,可以无脑用GPT和BERT啦。

最后实验下来,BERT在两个数据集的平均表现比GPT差一点点(橙色):

4d317ea514c8600ed1451414892c0409.png

而且BERT因为mask的方式,存在训练预测不一致的问题,OpenAI尝试对测试数据随机mask 5个token,最终ImageNet结果果然上升了一些(红色)。但还是改变不了OpenAI要用GPT统治一切的事实,这篇文章还是用GPT-2(摊手。

iGPT虽然尝试过形式与BERT接近的预训练,但却连一个MAE的关键点都没碰到。其中我觉得问题最大的主要是这个马赛克操作,就拿文中贴的例子来看,都被马赛克成那样子了,还学习什么呢。。。虽然事实证明还是有效果的,但还是从输入上就降低了模型的拟合能力。

但别急,这个问题马上就被解决了。

ViT

第二个出场的嘉宾,就是红遍大江南北的Vision Transformer——ViT。

它对上面问题的解决办法,就是思想上借鉴了CNN的局部特征抽取,把图片分割成一个个patch,再通过线性映射成一个类似NLP的token embedding。同时为了保留位置信息,加上了可学习的position embedding。

cbc156570660d93e813606a824912289.png

从ViT开始,CVer们终于可以更优雅地使用Transformer了。然而ViT的实验还是跟传统CV一样,进行有监督的预训练。为什么不试试MLM呢?其实他们试过了,但效果不好,所以没重点放出来。

在附录中,ViT其实尝试过三种预训练方法,首先mask掉50%的patch,然后:

  1. 只预测patch的mean color

  2. 只预测一个马赛克版的patch

  3. 用L2损失预测所有pixel

第三种方法真的很接近有木有!!!然而实验发现第三种更差一些,第一种最好,但也比有监督的落后4个点。

看到这里,如果去翻翻MAE的分析实验,就会发现MAE mask 50%之后的效果也很好:

e9271688a75edcf052389793f05f8fac.png

怎么办,就导致我这个旁观者很着急。虽然ViT已经是很厉害的工作了,如果当时再想想,简直神上加神。到底是什么点呢?我们留到MAE再说。

BEiT

第三位出场的嘉宾是BEiT,微软今年年中的工作,作者之一是知乎的董力大佬。

BEiT的形式同样很接近BERT,只不过用了一个dVAE对patch进行离散化(就像NLP的token也是离散化的)。dVAE需要先在语料上训练出一个encoder和一个decoder,encoder用来当作tokenizer,把图像离散化(对应一个个patch),然后给Transformer输入patch,预测离散后的图像,再用decoder还原。

6b0d06e898f495d7c736fa828363bbbd.png

在预训练阶段,最多会mask 40%的patch(同样很接近MAE了)。

另外,作者们其实也试过复原pixel,但效果会有1.8%的下降。对于这个现象,BEiT给出的猜想是,就像多层CNN一样,编码器最终得到的应该是一个更全局、高维的表示,而复现pixel会让后几层太关注局部细节

MAE

终于轮到MAE出场了,了解了上述几个模型的背景,我们再来看恺明大神在开篇提出的问题:到底是什么原因导致视觉和语言用的masked autoencoder不一样?

核心的三个点是:

  1. 结构:CNN天然适合图像领域,而应用Transformer却显得不那么自然,不过这个问题已经被ViT解了。再看上面几篇工作,会发现相比iGPT的马赛克、dVAE的离散化来说,patch形态是对信息损失最少且相对高效的

  2. 信息密度:人类的语言太博大精深了,你女朋友的每一句话,都有18层含义。而照片(ImageNet)不一样,它就那么多信息,两三个词就能概括。所以预测的时候,预测patch要比预测词语容易很多,只需要对周边的patch稍微有些信息就够了。所以我们可以放心大胆地mask。这点ViT、BEiT其实也都有,但主要就是最后一点没有深究

  3. 需要一个Decoder:首先,是不是一定要复原pixel呢?我觉得是的,因为图片信息密度有限,复原pixel这种细粒度信息会让模型强上加强。那怎么优雅地复原呢?BEiT已经说过了,在预训练图像encoder的时候,太关注细节就损失了高维抽象能力。所以凯明大神加了一个decoder。到这里分工就很明确了,encoder负责抽取高维表示,decoder则负责细粒度还原

罗马不是一天建成的,MAE真正成功的点,就在于把后两个问题想清楚,并且给出了解决方案

33219af7f5adecd6899ee987bc9d324a.png

当然还有一些细节,比如:

  • 输入侧直接丢掉mask token,效果+0.7,效率x3.3

  • 预测normalize之后的pixel,效果+0.5

  • 选取数据增强策略,效果+0.2

另外,BEiT和MAE用的预训练数据都是ImageNet-1K,再仔细看他们的预训练超参数,不一样的地方也有很多,但具体造成多大diff还不清楚。

总结

好了,我们的故事接近尾声了。由于时间有限,我只看了以上几篇MAE引用比较的重点工作,肯定还有很多预训练的尝试没有看到,不足之处还请指正。

不同人对科研的品味都不一样,我刚入门NLP的时候,恰好是BERT诞生的时候,记得特别清楚,是18年十月初的一个周末,我达摩院的朋友来找我玩,躺我床上刷手机时,跟我说出了一个很大的工作。再加上后续的一系列预训练进展,导致我越来越喜欢大道至简的方法。知乎上也有人质疑MAE的novelty,而当我们真正顺着看下来时,却可以看到MAE是真的多走了一步,深入浅出,最终呈现给大家一个「这都可以」的结果

最后,其实预训练模型的价值,不仅是可以更简单、有效的迁移到下游任务,更是它scale的性质,试想如果增加算力、无监督数据就能提升效果的话,你对那个还未到达的天花板好不好奇呢?

——The  End——

7e617fc468e555b3ccba05645f6f3834.gif

推荐阅读

FAIR何恺明团队最新研究:定义ViT检测迁移学习基线

NLP和CV的双子星,注入Mask的预训练模型BERT和MAE

【何恺明新作速读】Masked Autoencoders Are Scalable Vision Learners

如何看待何恺明最新一作论文Masked Autoencoders Are Scalable Vision Learners?

a137e0a0296a23da3d761ec65bc62472.png


推荐阅读
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • 【疑难杂症】allennlp安装报错:Installing build dependencies ... error
    背景:配置PURE的算法环境,安装allennlp0.9.0(pipinstallallennlp0.9.0)报错ÿ ... [详细]
author-avatar
小dej_531
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有