MAE 论文逐段精读【论文精读】(深度学习论文篇)

源于沐神: MAE 论文逐段精读【论文精读】 (bilibili.com)

MAE 2021.11.11提交 arxiv

知乎 百万 view; Reddit or Twitter 讨论不多

MAE 很新 --> 如何在读比较新的文章 获取一些新的研究思路?

和之前精读论文的关系?

Transformer

        一个纯基于注意力机制的编码器和解码器
        表现比 RNN 架构好,在机器翻译任务


BERT

        使用 一个 Transformer 编码器
        拓展到更一般的 NLP 的任务
        使用了 完型填空 的自监督的训练机制
        不需要使用标号
        去预测一个句子里面 不见 masked 的词 
        从而获取对文本特征抽取的能力
        BERT 极大的扩展了 Transformer 的应用
        在一个大规模的、没有标号的数据上 训练出非常好的模型出来


ViT 

        将 Transformer 用到 CV 上面
        把整个图片分割成很多 16 * 16 的小方块
        每一个方块 patch 做成一个词 token,然后放进 Transformer 进行训练
        证明:训练数据足够大 (1,000万 或者 一个亿的训练样本)的时候,Transformer 的架构 精度 优于 CNN 架构

MAE:

        BERT 的一个 CV 的版本
        基于 ViT ,BERT化
        把整个训练 拓展到没有标号的数据上面
        通过完型填空来获取图片的一个理解
        不是第一个将 BERT 拓展到 CV 上
        MAE 很有可能 未来影响最大
        BERT 加速了 Transformer 架构 在 NLP 的应用
        MAE 加速 Transformer 在 CV 上的应用


1.标题 + 作者





Masked Autoencoders 带掩码的自编码器 是可扩展的视觉学习器 scalable vision learners

scalable:可扩展的,模型比较大

efficient:算法特别快

vision learners:≠ classifier,一个 backbone 的模型

masked:来源于 BERT

        BERT 是 masked language model,带掩码的语言模型;完形填空
        每次挖掉一些东西,然后去预测挖掉的东西


Auto-encoder:

        auto “自”,ML模型 auto 自模型;i.e., 自回归模型
        标号 y 和 样本 x 来自 同一个东西
        语言模型中,每一次用前面那些词,去预测接下来的一个词;在另外一个样本里面,我们这个预测的词也是标号,也是成为另外一个样本的 x 本身
        样本 x 和 标号 y 来自于同样的句子里面的词 --> auto 
     NLP 里,语言模型是一大类,有没有 auto 大家都理解
        Transformer、BERT 用的是 encoder,加不加 auto 大家都觉得没问题
    CV 里 auto 自任务很少
        图片(像素)的标号很少来自于图片本身,图片的标号更多是文本
        encoder-decoder 在图片里用得很多
     加 auto 在 encoder之前,MAE 的图片标号是图片本身,区分于其它工作


标题模板很不错!

强有力的句式:文章的结论总结成一句话,XX 是 好 XX

结论放在 title 里,句式相对客观

i.e., GPT 系列 3篇文章

GPT1: Improving Language Understanding by Generative Pre-Training (Generative Pre-Train Model 就是GPT模型的名字由来)

GPT2: Language Models are Unsupervised Multitask Learners

GPT3: Language Models are Few-Shot Learners

Example:

我的手写笔是世界上 最好用来做笔记的笔 ❌

手写笔是一个做笔记很好的工具 ✔

虽然手写笔是我第一个发明的
从读者角度讲述,手写笔为什么它是一个好东西?

作者
视频:06:03处

FAIR

        一作:Kaiming 恺明 ResNet 一作 + Project lead (从公司拿资源做项目、管理者;不是一般最后的大老板)

*:equal technial contribution

最后两位作者:CV 物体检测的大佬

2摘要
视频处:07:10

第一句话扩展 title MAE

        masked autoencoders are scalable vision learners --> Masked AutoEncoders are scalable self-supervised learners for computer vision. 

第二句话 MAE 简单

        随机盖住图片里的一些块(patch, image 的一个块),再重构 缺失的像素。

                思想来自于 BERT 带掩码的语言模型
                这里不是 masked 词,而是图片的一个块 image,重构这个缺失块里面的所有像素


第三句话 2个 core designs

asymmetric encoder-decoder architecture

        虽然 MAE 说自己是 masked autoencoder
        任何一个模型都有一个编码器解码器
                BERT 预测相对简单, 解码器:最后的一个全连接输出层
                MAE 预测一个块里面的所有像素
        MAE 的编码器 只关注 可见的 patches,节省计算时间
                如果 一个 patch 被丢掉了,编码器不会对它进行编码


MAE a lightweight decoder 重构原始的像素


遮住大量的块 (i.e., 75%) 重构像素是一个非显然 nontrivial and meaningful 有意义的 self-supervisory task 自监督任务

如果只遮住几块的话,插值法就可以得到缺失的像素,trivial 
遮住一大半的块,迫使模型学习更好的表征


第四句话:asymmetric encoder-decoder + 75% masked --> train large models efficiently and effectively

更有效的训练模型

大:比较有挑战的任务,不是求显然的解 nontrivial
块:不看遮住的块,训练量是 1 / 4,加速 3 倍 or 以上


第五句话:结果好

最简单的 a vanilla ViT-Huge 模型 在 ImageNet-1K 87.8% 准确率

ViT 的自监督学习,效果不那么好,所以没怎么展开
ViT 的作者认为还是需要 有标号的模型、用更大的训练集,效果更好
MAE 使用小数据集  ImageNet-1K 100w 图片,self-supervise 效果很好


第六句话:迁移学习效果

MAE 主要用来做 迁移学习,在别的任务上表现好

shows promising scaling behavior

3关键图
视频处:10:49

CV 最重要的一张图就是放在第一页的右上角

图1:MAE 的模型架构

预训练流程:input --> patches --> masked --> unmasked patches in encoder --> unmasked + masked 按位置排列 进 decoder --> decoder 重构 masked patches 的像素

        patches + masked:一张红色鸟图片进来,切成 patches,masked 块 (3/4) 是 灰色的。
        unmasked patches,encoder:没有 masked (1 / 4) 的块 进入 encoder (ViT),得到每一块的特征(蓝色)。
        encoder 的输出 和 masked tokens 按照在图片中的原始位置排列成一长条向量 (包含位置信息)。
        长条向量 进入 decoder,解码器尝试重构缺失的像素信息,还原原始图片

        encoder 比 decoder 高:计算量主要来自于 encoder,对图片的像素进行编码

        优化 encoder by 编码器只用处理 unmasked patches,i.e., 一张图里 1/4 的像素,--> 计算量降低

        Transformer 模型计算量特别大,几倍加速也很重要。


Q:什么情况不需要解码器?

用 MAE 做一个 CV 的任务,只需要用编码器。一张图片进来,不需要做掩码,直接切成 patches 格子块,然后得到所有 patches 的特征表示,当成是这张图片的特征表达,用来做 CV 的任务。

图2:ImageNet 测试集图片

三列分别是:80% masked tokens, MAE 重构的效果,ImageNet 真实图片


虽然细节有一点模糊,钟的指针、车的形状、狗、灯都还原的很好。

        图片尺寸只有那么高,分辨率有限


Note: MAE 不一定对 所有图片的构造都那么好,图 2 是展示比较好的样例

图3:COCO

不同的数据集,效果也惊人。


图4 同一张图片、masked patches 的不同比例 的还原效果

95%效果惊人,蘑菇🍄、斑马🦓、车🚗、西红柿 都还原出来了。

4结论 
视频:15:19

3段

Simple algorithms that scale well are the core of deep learning. 简单 + 可以拓展很好的算法是 DL 的核心

simple:作者的简单是在 ViT 基础上,MAE 提出来的东西相对简单

scale well:能跑 大数据集

作者对 simple 和 scale well 是不是有什么误解?哈哈哈哈

        MAE 基于 ViT,ViT 基于 Transformer,整个 Transformer 模块里面有那么多东西,要那么多层堆起来 --> 比较复杂
        很有钱的时候,scale well 无限加数据(无需标号)


In NLP, self-supervised learning methods enable benefits from exponentially scaling methods. NLP 自监督学习 火 🔥

CV 里 有标号的预训练数据是主流。

MAE 在 ImageNet 数据集上,通过自编码器学习到 可以媲美 有标号的 结果。

第二段:图片和语言的差别

        a word in a sentence:一个词是语义单元,包含较多语义信息
        a patch in an image:一定的语义信息,但不是一个语义的 segment
                一个 patch 并不含有一个特定的物体
                可能是多个物体的一小块 or 一个物体重叠的一块
        即使图片和语言的 masked 的单元包含语义信息不同,MAE or Transformer 可以学到一个隐藏的比较好的语义表达


第三段:broader impacts

        如果工作出圈,对社会的影响?

                只用了图片本身信息学习
                        图片本身有 bias 的话,倾向于某一些图片 or  有一些不好的图片,可能会有负面的社会影响
        MAE 可以用来生成不存在的内容
                MAE 是生成模型,生成原始的像素
                和 GAN 类似,有误导大家的可能
        如果要使用这个工作,请一定要考虑潜在的影响


So far, MAE 在干什么? 效果怎么样?

5导言
视频:18:33处

导言第一段:问题所在

深度学习飞速发展,但 CV 仍然以来百万级别、甚至更多有标注的数据

导言第二段:大量有标注数据是必须的吗?其它领域怎么解决的?

NLP 的自监督学习很好

          GPT、BERT 可以使用 无标注 的数据及逆行训练,得到千亿级别可学习的参数模型
                GPT 系列,一个标准的语言模型
                BERT 一个带掩码的自编码模型
        CV 里已有的 maksed autoencoder 带掩码的自编码器

        denoising autoencoder,一张图片里加入很多噪音,通过去噪来学习对这张图片的理解
最近也有很多工作将 BERT 应用于 CV

        但,作者认为 BERT 在 CV 领域的应用落后于 NLP

What makes masked autoencoding different between vision and language?

什么使得 带掩码的自编码器模型在 CV 和 NLP 处理上的不一样呢?

1)CV 使用 CNN,卷积窗口不好将 mask 放进去

archtectural gap has been addressed by ViT

        CNN 在一张图片上,使用一个卷积窗口、不断地平滑,来汇聚一些像素上面的信息 + 模式识别
        Transformer 的一个 mask 对应的是一个特定的词,会一直保留,和别的词区分开来卷积上做掩码?
        图片的一块盖住 by 像素替换成一个特定的值,
        卷积窗口扫过来、扫过去时,无法区分边界,无法保持 mask 的特殊性,无法拎出来 mask;最后从掩码信息很难还原出来
卷积不好加入位置编码? 不那么充分
        Transformer 需要位置编码:attention 机制没有位置信息
        卷积自带位置信息,不断平移时,不需要加入位置信息


2)语言和图片的信息密度不同

NLP 的一个词是一个语义的实体,一个词在字典里有很长的解释;一句话去掉几个词,任务很难,i.e., 完形填空 --> BERT 的 mask 比例不能过高

CV 的图片去掉一个块,通过对邻居的像素值进行插值还原。怎么让任务不那么 trivial 呢?

随机去掉很高比例的块,极大降低图片的冗余性
这一块的周边块都被去掉了,这一块和很远的块的关系不那么冗余
nontrivial 任务,使 模型去看 一张图片的 holistic 全局信息,而不仅关注局部


3)The autoencoder‘s decoder

CV 还原图片的原始像素:低层次的表示

NLP 还原句子里的词:语义层次更高,i.e., BERT 的一个全连接层还原词

图片分类、目标检测的 decoder:一个全连接层

语义分割(像素级别的输出):一个全连接层不够,很有可能使用一个转置的卷积神经网络、来做一个比较大解码器。

MAE 的想法:

随机遮住大量的块,然后去重构这些被遮住的像素信息,让它使用一个非对称的编码器和解码器的机制。

非对称:编码器和解码器看到的东西不一样

编码器只看到可见块
解码器拿到编码器的输出之后,重构 masked patches
非对称的原因:
大量 masked 块
编码器只看可见块,极大降低计算开销、减少内存消耗


导言最后一段:实验结果

MAE预训练,只使用 ImageNet-1K 100w 无标号数据,ViT-Large/-Huge 达到 ViT 需要 100倍于 ImageNet-1K 的数据 的效果。

迁移学习效果也很好,预训练的模型在 目标检测、实例分割、语义分割 的效果都很好。

和 NLP 类似的效果:

在大量的没有标号的数据上,通过自监督学习训练出来模型,迁移学习效果不错

2页,图片 + 使用了 问题 - 回答问题 - 引出想法 的写法

更本质的问题?

把 BERT 从 NLP 用到 CV 有什么问题?

MAE 算法为什么要设计成这样?

ViT 解决 图片中的 mask
大量随机 masked 块,降低图片冗余度
非对称的自编码器-解码器


写作建议:

讲清楚,你为什么要这么做?你对这个问题的动机?

没有动机 就是技术报告了,i.e. AlexNet


6相关工作
视频:26:58


1)带掩码的语言模型:BERT, GPT

2)自编码器在 CV 的应用

MAE 也是一种形式的 带去噪的自编码
masked patch 在这一个图片块里面加了很多噪声
和 传统的 DAE(Denoising autoencoder) 是很不一样的
MAE 基于 ViT、transformer 架构
3)带掩码的自编码器在 CV 的应用

iGPT,GPT 在 image 的应用
ViT 最后一段,怎么用 BERT 方式训练模型
BEiT,BERT 在 image 上的应用
给每一个 patch 离散的标号,更像 BERT 
MAE 直接重构 原始的像素信息

4)self-supervised learning

最近火 🔥 的 contrastive learning,使用数据增强

MAE 不需要数据增强(实验部分有讲)

相关工作总结:4个角度的对比,MAE 和它们都不同,但是没有特别讲 MAE 和每一个不一样的地方在哪里。

esp, iGPT 和 BEiT

写作建议:

相关工作介绍,写清楚和特别相关的工作的区别,不要让大家去猜

7 MAE模型
视频:28:49

MAE 是一个简单的 自编码器

        看到了部分的观察的数据
        用观察到的部分数据 重构 完整的原始信号


所有自编码器的工作

        将观察到的信号 映射到一个潜在 latent 表示里面
                潜在表示:语义空间的一个表示
        解码器 用 潜表示 latent 重构原始信号


MAE 的自编码器 和 经典自编码器的不同?

        asymmetric design 非对称结构
                编码器只看 可见块
                        忽略不可见 masked 块,节省计算开销

掩码 mask 如何工作?
视频:29:39处

和 ViT 的一样图片 patches 化, i.e., 一张图片 九宫格分割,3 * 3,每一格 代表一个 patch,作为一个词 token


random sampling? 

随机均匀采样块保留, 剩余块用 mask 掩码盖住。

MAE 的关键技术?

只采样少量的块,其余的块全覆盖,去掉图片 patches 之间的冗余度。--> 增加任务的复杂度

MAE 的编码器

a ViT, 没有任何改动
but applied only on visible, unmasked patches, 只作用于 可见块

MAE 编码器如何作用于可见块呢?
视频:30:34处

和 ViT 一样:

        每一个 patch 块拿出来,做一个线性投影
         + 位置信息 --> token 


和 ViT 不一样:

        masked 块不进入 MAE 编码器
        i.e., 随机采样概率 1 / 4, 25% 样本块进入 ViT,计算量减少


MAE 的解码器

        要重构 masked 块的像素信息,需要看到 可见块(编码器对可见块的潜表示) 和 masked 块 (没有进入编码器)

        a shared, learned vector 通过一个 共享的可以学到的向量来表示 each mask token 

        每一个被盖住的块都表示成同样一个向量,此向量值可学习

        解码器是 another series of Transformer blocks 另外一个 transformer

        需要位置信息,不然无法区分对应哪一个 掩码masked tokens 


可见块的位置信息 question?

位置信息 要不要也对那些编码器过来的 潜在表示 也加上

因为可见块的潜表示其实本来已经加过一次了,那么这个地方要不要再加上一次?

解码器什么时候用?

       pre-training;别的下游任务,解码器不需要,只需要编码器对图片编码得到潜表示 --》灵活,想用什么随便用

解码器的架构大吗?

相对小,计算开销不到编码器的 1 / 10

怎么样重构出原始的像素?
视频;32:23处

解码器的最后一层: a linear projection 

一个 patch 是 16 * 16 像素的话,线性层会投影到长为 256 的维度
再 reshape(16, 16), 还原原始像素信息
损失函数: MSE,像素值相减,再平方和
只作用于非可见块的损失,和 BERT 一样
可见块的图片编码器已经看到了,看到答案就不算正确率了


对预测的像素做一次 normalization,使像素均值为 0 方差为 1,数值更稳定。

pre-training 的 normalization 可,但预测的时候怎么办呢?

pre-training 有标号的样本均值方差可算

Simple implementation 
视频:33:31处

对每一个输入 patch 生成 a token:一个一个 patch 的线性投影 + 位置信息
随机采样:randomly shuffle 随机打断序列,把最后一块拿掉。
从 头部均匀的、没有重置的 样本 采样
25% 意味着 随机 shuffle, 只保留前 25% 
after encoding 解码时:append 跟以前长度一样的这些掩码的一些词源 mask tokens (一个可以学习的向量 + 位置信息),重新 unshuffle 还原到原来的顺序
MSE 算误差时,跟原始图的 patches 对应


The decoder is applied to this full list (with positional embeddings added). 

编码器处理可见块的潜表示需不需要再加位置信息?

shuffle 和 unshuffle 有什么好处?

没有稀疏的操作,实现快,不影响 ViT 块的实现

总结:解码器怎么做?怎么还原像素信息?实现中随机采样怎么做?

8 实验
视频:35:22处

第四章:ImageNet 的实验

在 ImageNet-1K 100万张图片 数据集上

先做自监督的预训练(不用标号,只拿图片)
然后再在同样的数据集上做有标号的监督训练


做法:

end to end 的微调,允许改整个模型 所有的可学习的参数;
linear probing 允许改最后一层的线性输出层


结果:在验证集上报告 top-1 的精度,用 中心剪裁的 224*224 的图片

Baseline: ViT-Large / 16, 16 * 16 

ViT-Large 比 ResNet50 要大很多,很容易 overfitting 

比较的 3 种情况:

scratch, original: 76.5, ViT 所有的内容在 ImageNet-1K上训练, 结果不稳定 200 epoches

scratch, our impl.: 82.5 加入 strong regularization A.2

ViT 文章说 ViT 需要很大的数据才行
小一点的数据 + 合适的正则化 ✔


baseline MAE: 84.9 先使用 MAE 做预训练,再在 ImageNet 上微调 50 epoches

数据集没变化,预训练和微调都是 ImageNet 
MAE 纯从图片上学到不错的信息

主要结果 表1
视频;37:36

ablation study

a: 解码器的深度,多少个 Transformer 块; end to end fine-tuning 贵一点,但效果好

全都 ft,深度和效果关系不大 84.x
只调 lin, 深度深一点好


b: 解码器的宽度,每一个 token 表示成一个多长的向量

512 比较好


c: 编码器要不要加入被盖住的 masked 块

不加很好,精度高、计算量更少
非对称的架构 精度好、性能好

d: 重构的目标

每个像素的MSE
每个像素的MSE + normalization 均值为0 方差为 1 效果好
PCA 做一次降维
dVAE: BEiT 的做法,通过 ViT 把每一个块映射到一个离散的 token,像 BERT 一样的去做预测


e 怎么样做数据增强

什么都不做
固定大小的裁剪
随机大小的裁剪
裁剪 + 颜色变化
MAE 对数据增强不敏感

f 怎么采样 被盖住的块

随机采样 最简单最好
按一块块的采样 50 %
按一块块的采样 75 %
网格采样

表1 主结果内容的展开图
视频;40:15处

使用不同的掩码率的时候的效果:

10%的块被遮住: 83.2%

> 40%的块被遮住:精度大幅提升

只调最后一层:更敏感


表2 训练时间

         ViT-Large + 解码器只使用一层 Transformer 的块:84.8% 精度不错,耗时最少
        带掩码的块 + 大的解码器,加速 3.7倍
        ViT huge 加速也比较多

绝对时间

        128个 TPU v3的 core, tensorflow 实现

        训练时间是10个小时 和 大概是一天多,可以忍受

图 6 表示的是不同的掩码采样策略的区别

        随机采样效果好
        尽量的按照一块一块的来切
        按照格点来切

图 7 预训练的轮数和微调的精度的对比


         ImageNet-1K 上训练个 1,000 个数据轮,精度有提升,在一直训练一直学习,过拟合也没那么多严重,因为1,000轮是非常非常多的

一般在 ImageNet 上训练, 200轮 enough


4.1 讲的是不同的超参数下的一些结果

自己跟自己比


4.2 就是比的是之前结果

主要的结果在表3和图8里面

表3:跟前面结果比 MAE 效果是最好的

图8:跟 ViT 里面的结果比

最上面的虚线:ViT 在 JFT 3亿标号的图片数据集合的效果
排第二的线:只使用 ImageNet-1K 也就是1/300数据的效果
两根线很接近,不能说这是一个很公平的比较
JFT数据集包括的类数远远大于 ImageNet
它们很多是一些 顾我自己 care 的一些目标,但是 ImageNet很多都是一些猫猫狗狗的图片
测试集也是 ImageNet,JFK 它多了很多很多 可能跟你那些标号不那么一样的图片


把验证集换到一个 不那么跟 ImageNet 相像的数据集上,可能这个差距会大一点

主要比较的是算法,而不是数据集

4.3 调编码器所有层的参数和最后一层的参数效果差距大

到底调多少层:

少,快,精度差
多,慢,精度好

调 4 - 5 层比较好

底层不调:底层学到的东西稍微是比较低层次一点,你可以换一个任务也不需要变太多
上面那些层,跟你的任务相关,要调

5迁移学习实验结果
视频:45:08处

COCO 的目标检测和分割

MAE 做它的主干网络 效果最好
跟之前的 ViT 和 BEiT 比


重构像素的比较

像 BEiT 那样重构 or 用 dVAE 学出来的标号比 差别不大
重构原始的像素 简单、好

9评论
视频:45:45处

MAE 算法不难

利用 ViT 来做跟 BERT 一样的自监督学习
ViT 文章已经做了这个事情了


MAE 在 ViT 的基础提升点

需要盖住更多的块,降低剩余块之间的冗余度,任务变得复杂一些
使用一个 Tranformer 架构的解码器,直接还原原始的像素信息,使得整个流程更加简单一点
加上在 ViT 工作之后的各种技术,训练更鲁棒


以上三点 MAE 使得在 ImageNet-1K 这个数据集上使用自监督训练的效果超过了之前的工作

写作:简单,故事性好

导言:为什么 MAE 这么做

非常详细的实验数据:整个 MAE 里面 所有可以调的超参数 它到底是什么意思?

简单的想法、非常好的结果、详细的实验 ==

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值