论文名称:Masked Autoencoders Are Scalable Vision Learners
论文地址:https://arxiv.org/pdf/2111.06377.pdf
每一次读kaiming大神的文章,都会发现文章算法很简单,但是效果很好。经常会有一种感觉 “这竟然也行”,这次也不例外。
kaiming 的流量太大了,论文挂在Arxiv上没几天就登上知乎热搜,大家可以去知乎这个问题下看看,有一群人觉得很厉害,有一部分同学也觉得一般。我等菜鸡不敢评论,可以自行去看看。
本文提出一种Masked Autoencoders算法:mask输入图像的随机patch,并重建移除的像素 。
两个核心的设计思路是:
MAE能够加快模型的训练速度(3倍或更多)并提高精度。本文的方法可以学习泛化性良好的高容量模型:例如,在仅使用ImageNet-1K数据时,ViT-Huge模型的Top-1精确度为87.8%。 此外,在检测、分割等计算机视觉下游任务中的迁移性能优于有监督的预训练。
深度学习需要大量的标注数据来完成模型的训练,但是NLP可以通过自监督预训练来避免大量标注数据的依赖。例如GPT的自回归语言建模和BERT中的masked autoencoding的解决方案。这两种方案通过删除一部分数据,并且学习预测删除的内容。
masked autoencoder是一种更为通用的去噪自动编码器(denoising autoencoders),可以在视觉任务中使用。但是在视觉中autoencoder方法的研究进展相比NLP较少。那么**到底是什么让masked autoencoder在视觉任务和语言任务之间有所不同呢?**作者提出了几点看法:
此图为MAE的模型架构:
MAE是一个非对称的编码器-解码器结构,从输入图像中随机mask部分patch,利用解码器在像素空间中重构丢失的patch。编码器仅仅对可见的patch进行计算,解码器是一个轻量化的网络,在解码器中才会使用mask token与编码器的输出一同重构像素,这样计算量大大减小。此时非常高的mask率(例如75%)可以在优化精度的同时,使得总体的预训练时间减少3倍或者更多,同时较少显存消耗,使得MAE可以轻松扩展到大模型。
编码器采用ViT,仅仅用于可见的patch来进行计算。与标准ViT不同的是本文的编码器只需要在整个集合的一小部分(可见的patch,例如25%)上运行 。因此能够训练非常大的编码器。
解码器的输入信息由编码器输出的编码向量和mask token组成。每个mask token都是一个共享的、可学习的向量,表示要预测的缺失patch。作者给所有token添加positional embedding;如果不加入这一点,mask token将没有相应patch的位置信息。
MAE解码器在预训练期间用于执行图像重建任务(只有编码器生成用于识别的图像表示)。因此,解码器架构可以以独立于编码器设计。作者用轻量化的解码器进行实验。例如,解码器处理每个token的计算量不到编码器的10%。通过这种非对称设计,所有token仅由轻量级解码器处理,这大大减少了预训练时间。
MAE通过预测每个mask patch的像素值来重建输入。解码器输出中的每个元素都是代表一个patch的像素值向量。解码器的最后一层是一个线性投影,其输出的通道数等于一个patch中像素值的数量。解码器的输出reshape以后形成重构图像。计算重建图像和原始图像之间的均方差损失(MSE) 。其中仅仅计算masked patch上的损失,类似于BERT。
联系客服