Masked Autoencoders (MAE) 是近年来自监督学习领域中的一项重要创新,尤其在计算机视觉领域取得了显著进展。随着深度学习的快速发展,自监督学习逐渐成为了一种重要的无监督学习方法,它通过从数据中学习表示而不依赖人工标签,极大地推动了模型的通用性和迁移学习的效率。MAE 就是在这一背景下应运而生的,它被认为是自监督学习的一种变体,尤其适用于图像领域。
论文原文:Masked Autoencoders Are Scalable Vision Learners
一、整体结构
BERT的CV版本,基于ViT这篇文章,但是把整个训练拓展到了没有标号的数据上面,也就是跟BERT一样,通过完型填空来获取图片的一个理解。
那么为什么自监督在CV领域的发展要滞后于NLP呢?NLP主流方法是Transformer,而视觉里CNN是主流方法,基础架构的差异让视觉很难构造类似于“masked autoencoding”的任务。但是ViT的提出解决了这个问题,将图像变成划分成一个个patch;语言和视觉的信息密度(information density)差异巨大,文字是高信息密度,图像来说具有低信息密度,有很多冗余的信息,mask比例远远不够,加大mask比例,在NLP中即使只mask一个token,对模型来说可能都是很难的任务,因此模型可以通过学习获得复杂的语言理解能力(sophisticated language understanding),但是对视觉图像来说,信息是高度冗余的,缺失一个patch,可能并不会让模型产生多少困惑,模型可以通过周围的像素信息进行推断;对于自编码的解码器来说,NLP解码器是重建文字,CV复原像素,包含信息低,以MAE做的一件事就是mask很高比例的patches,制造高难度的学习任务,方法简单但是极其有效。
整个MAE的架构图如下。MAE结构图是非对称结构,即encoder和decoder体量不同。首先将input image切分为patches,执行mask操作,然后只把可见的patches送入encoder中,再将encoder的输出(latent representations)以及mask tokens作为轻量级decoder的输入,decoder重构整张image。
- Embedding:划分patch,同时随机mask掉75%的patch(实验得到),具体实现的时候,是先把划分过后的patch取后75%进行mask。
- 编码器:把可见patch输入到encoder中。编码器实际上就是ViT,将input image切分为不重叠的patches之后,执行linear projection,再加上positional embeddings(the sine-cosine version) ,然后送入transformer block。
- 解码器:输入拼接上mask patch,经过decoder,解码端之后有一个隐层映射,做损失计算。没有被mask的部分是不会被计算loss的。解码器也是ViT,将mask token和encoded visible patches作为输入,加上位置编码 (the sine-cosine version) 。decoder的最后一层是linear projection,输出通道数量和一个patch内的pixel数量相同(方便重构),然后再reshape,重构image。损失函数使用MSE,损失函数只对masked patches计算(和BERT相同)。同时作者也尝试了normalization的方式,即计算一个patch内像素值的均值和标准差,然后对patch执行normalization,此时encoder的重构任务发生了一些变化,需要重构normalized pixel values。
二、其他问题
在训练完之后如何用预训练模型呢?哪个部分用于下游任务?encoder是抽取可见图像的特征,decoder通过抽取到的特征进行信息的重建,预训练结束之后,只保留encoder,我们可以将encoder之后加一个<cls>做分类任务。
为什么mask符号在解码端,而不是在编码端?BERT是将mask符号放在编码段,而不是解码端。BERT很类似MAE的decoder的部分,而不是encoder。MAE中的图片由于patch重复度很高,编码的目的是获取图像的高维语义信息,经过encoder才能获取到高维语义信息,获得与BERT的每个token接近的语义信息含量。
参考资料:
一文解读Masked Autoencoder(MAE)-CSDN博客
MAE(Masked Autoencoders) - 知乎