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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第1张图片

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

MAE 2021.11.11提交 arxiv

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

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

和之前精读论文的关系?

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第2张图片

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,解码器尝试重构缺失的像素信息,还原原始图片

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第3张图片

        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 真实图片

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第4张图片


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

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


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

图3:COCO

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第5张图片


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

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第6张图片

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第7张图片


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 块

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第8张图片

d: 重构的目标

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


e 怎么样做数据增强

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

f 怎么采样 被盖住的块

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

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

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

10%的块被遮住: 83.2%

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

只调最后一层:更敏感

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第9张图片


表2 训练时间

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第10张图片

绝对时间

        128个 TPU v3的 core, tensorflow 实现

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

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

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第11张图片

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第12张图片


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

一般在 ImageNet 上训练, 200轮 enough


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

自己跟自己比


4.2 就是比的是之前结果

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第13张图片

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

图8:跟 ViT 里面的结果比

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


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

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

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

到底调多少层:

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

MAE 论文逐段精读【论文精读】(深度学习论文篇)_第14张图片

调 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 里面 所有可以调的超参数 它到底是什么意思?

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

你可能感兴趣的:(多模态or跨模态——文献笔记,深度学习,神经网络,计算机视觉,人工智能,transformer)