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

人工智能与算法学习

共 3240字,需浏览 7分钟

 ·

2021-11-29 02:39

卷友们好,我是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了:

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

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

而且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。

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

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

  1. 只预测patch的mean color
  2. 只预测一个马赛克版的patch
  3. 用L2损失预测所有pixel

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

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

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

BEiT

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

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

在预训练阶段,最多会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真正成功的点,就在于把后两个问题想清楚,并且给出了解决方案

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

  • 输入侧直接丢掉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——


推荐阅读

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

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

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

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

浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报