首页 > 编程知识 正文

深度笔记-恺明的mae(maskedautoencodersaresclearners)

时间:2023-05-03 07:24:52 阅读:258162 作者:1192

概述

已经有很多人写文章做出了对MAE的解读,此处不加赘述,仅仅引用然后做个整理,方便有部分基础的人快速了解和回顾复习。因此可读性会比较差,欢迎提出建议。

原文:Masked Autoencoders are Scalable Vision Learners

简而言之,参考源自NLP中的思想,随机遮蔽(Mask)掉图像中的小块,然后实施图像重建任务。
两个核心使得MAE可以提高大容量模型(例如ViT)的训练效率和准确性:

使用非对称的编码-解码架构,未被遮蔽的图像小块输入编码器,再由一个更轻量的解码器输出完整的图像。Mask掉更大比例(如75%)可以产生一个重要且有意义的自监督模型。

谷歌 ViT(Vision Transformer)模型是一个用于视觉任务的纯 transformer经典技术方案。它将输入图片切分为若干个图像块(patch),然后将 patch 用向量来表示,用 transformer 来处理图像patch 序列,最终的输出做图像识别。但是 ViT 的缺点也十分明显,它将图像切块输入Transformer,图像块拉直成向量进行处理,因此,图像块内部结构信息被破坏,忽略了图像的特有性质。

文章先探讨NLP任务中,无论是BERT还是GPT都具有的共性,也就是“移除部分数据,学习和预测被移除的数据”,类似于完形填空任务。可见寻找共性是非常重要的一环。

文章提出:在掩蔽自编码技术(mask autoencoder)上,机器视觉(CV)一直落后于自然语言处理(NLP),这是什么原因造就的?

结构上的鸿沟,使得CV主流的卷积网络无法实现指示器(Indicator)和位置嵌入(position embedding,例如词嵌入、句子嵌入)。但ViT已经解决了这个问题。图像和语言的信息密度不同。语言是人为设计的,特点是强语义化,高信息密度。图象是自然界的信号/符号(signals),特点是极大的空间冗余。因此本文采用了大比例随机遮蔽的方法去掉冗余,同时考验自监督模型对低层次图像是否具有整体理解力。自编码器中解码器的作用不同。图像任务中,解码器需要生成像素,语义级别低。语言任务中解码器要生成词汇,是富语义信息。学习潜在表征时,解码器对于图像生成的语义层级有着非常关键的作用。
(复习:GPT全为decoder,单向语言模型;BERT全是encoder,双向语言模型)

简而言之,MAE通过构造一个非对称的编码-解码架构,把图像中未被遮蔽的patch(可见子集)放入编码器中,同时遮蔽的比例被设为非常大。然后让轻量化的解码器来重建图像,学习预测生成遮蔽掉的块。

非对称的设计:将掩码 token 转移到小型解码器会导致计算量大幅减少。极高的掩蔽率带来双赢:降低计算量同时优化准确性

编码器仅处理一小部分patch,解码器处理更大量的patch,但解码器参数更少更轻量。
这可以将整体预训练时间减少至原来的 1/3 或更低,同时减少内存消耗,因此能够轻松地将 MAE 扩展到大型模型。

跳过一堆背景和相关工作描述。

实验部分

MAE encoder:

基于Vit来实现,输入是未被遮蔽的小部分patch(子集),得到 encoded patches。

MAE decoder:

解码器的输入是全集,保证模型能理解每个块的位置(位置嵌入),如图所示。解码器拥有自己的一系列Transformer块,但比编码器更轻,计算量约为其10%。
预训练的时候才使用解码器,而只有编码器的输出才会被用来Finetune,完成剩下的图像识别等任务。所以解码器的设计会相对自由。

方法

预训练:
将未被遮蔽的patch放入encoder,得到输出。
将输出的encoded patches 还原到对应的原始位置,并在缺失的部分补上空白的masked patches,送入 decoder, 让decoder 预测对应 patch 的图像像素
此时计算预测的像素和原始图片的像素之间 MSE 作为 loss。
Finetune:
扔掉decoder,把encoder作为下游任务的基础模型进行精调。
这样做确实可以提高预训练速度和精度。

其他实验

(a) 深度的影响: decoder 的深度对 linear probing 影响很大, 因为 decoder 越深,那么训练时过程中会使它的浅层对应的特征与预训练的重建任务越无关,也就是越抽象,利于迁移。而 finetune 因为会在新任务上重新学习,所以深度对他影响要小很多。
(b) 宽度的影响:对 linear probing 影响很大, 对finetune 影响很小。 基于 (a) (b) ,作者最后的模型选择 finetune 方式迁移到下游任务,且采用比较浅比较窄的 decoder(8 个 blocks, 512-d width), 这样能够加速且省显存。
© encoder 是否使用 mask token:文中取可见 patches 的方式是对输入的所有 patch (假设一共有 N 个patch)先 shuffle 一下, 然后把后 N * masking_ratio 的 patch 丢掉,只有前面部分过网络。 另一种可能的方法是在 encoder 那增加一个 mask token 指代哪些 patch 需要保留哪些不需要保留。 实验结果表明这样做效果明显变差了, 原因使用 mask encoding 在训练时模型见到的是一些残缺的输入, 但是在实际下游任务中见到的确实完整的输入, 这会带来很大的 gap。
(d) 重建目标:1. 直接对原始像素重建;2. 以 patch 内像素的统计量对 patch 做 norm 后的像素重建;3.PCA 后重建; 4. dVAE。 实验结果是对 norm 以norm 后像素为目标重建效果最好。
(e) 数据增广的影响:1. 不用增广表现的也很好; 2. 用在其他模型中常用的 color jit 在 MAE 上反而变差了。 MAE 中随机 mask 这个操作实际上就是一种很强的增广,加额外增广作用没有那么明显。
(d) mask sampling strategy: 随机 sampling 效果最好。

知乎:Masked Autoencoders Are Scalable Vision Learners
其他人摘抄的知乎笔记

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。