暑假读论文总结
前排说明:后面的论文都放在 git 上了,这篇文章就坑掉了
7.8
- SAM-G
待填
7.9
- MAE(Masked Autoencoders Are Scalable Vision Learners)
来源:CVPR 2022
在视觉领域应用 auto encoder 的比较早的工作了,是自监督学习。
主要内容是在原图中选择若干个 patch 进行遮挡(patch 通常选的很多,~75%),通过 encoder - decoder 进行复原。encoder 结构较为复杂,但是只对未遮挡的部分进行复原,而 decoder 结构较为简单,复原出整张图片,总体的效率是比较高的。这样就能利用未标注的图片对 encoder 进行学习了。最后再在下游任务上对 decoder 进行微调,得到能符合对应任务的 decoder,从而减少了需要的对应任务有标注数据的量,但是这个过程也容易产生过拟合。
在对 decoder 进行微调的过程中,有两种方式:linear probing 和 fine-tuning。前者是在 decoder 后面加入了几层网络,decoder 的参数是 frozen 的,而后者则是直接对 decoder 的参数进行训练和修改。
loss 部分如何设计?对每个 mask 掉的 patch 在复原之后做 MSE。
encoder 基于 ViT(其中有 transformer block), decoder 基于的都是若干个 transformer block,而不是直接使用 FFN
整体 pipeline:
先前的工作:ViT、transformer、BEiT
[一个不错的总结和代码实现]
(https://zhuanlan.zhihu.com/p/439554945) - transformer(Attention Is All You Need)
来源:NIPS 2017
简要写写。
transformer 两大部分:encoder、decoder,输入的是若干个向量。对于每个向量:利用一个 FFN 求出对应的 \(q,k,v\) 向量,key-values pair 做点乘得到 attention 向量,需要 scale 一下(除以 \(\sqrt{d_k}\)),再和 \(q\) 做点乘,add&norm 之后通过 FFN。
scale 的目的是为了防止向量 \(q,k\) 的长度 \(d_k\) 太大,点乘的时候可能取得很大的值(原因见下),此时通过 exp 的时候会出现梯度消失的情况,因此需要缩小 \(q,k\) 的值,乘以一个系数在 \(d_k\) 较大时减小点乘的值。
encoder 和 decoder 中使用的部分实际上是两种 attention 的结合:第一种是通过一个 FFN,第二种是利用点乘。transformer 把这两种 attention 机制结合起来了。
7.10
- ViT (An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale)
在 ViT(vision transformer)提出之前,图像处理主要的方法是 CNN,ViT 主要的贡献是说明了 transformer 也可以作为图像处理的方法,还提出了核心观点:与 CNN 相关的模型(如 resnet)相比,当训练数据较多时,ViT 的效果强于 resnet。ViT 还是 MAE 的基础(MAE 的 encoder 部分就采用的 ViT),ViT 仍为有监督学习。
ViT 的流程:
将一张图片划分成若干个 patch(这里类比的就是 BERT 中的 token),再将每个 patch 通过 linear 层变成一个向量,因此一张图片变成了若干个向量。与 BERT 类似,再将 positional embedding(因为仅有 patch 的话无法体现出位置关系,因为 transformer 的 encoder 是有全局属性的 attention) 和 patch 的情况放在开头。注意 positional embedding 是学习得到的而非直接使用 sin-cos
得到向量组之后,就可以放入 transformer 的 encoder 中,得到编码后的向量序列(\(D\) 维的向量若干,数量等于输入的 patch 个数乘 channel 的个数),具体公式如下:
注意到 2~4 式实际上就是 transformer encoder 的内容,MSA 即为 multi-head self-attention,而 MLP 为全连接层。
在通过 transformer encoder 之后,需要对下游任务进行微调,这里使用一个全连接层 MLP Head 来进行下游任务处理。
实验部分,采用 Imagenet 和 JFT 的有标注数据。实验发现,当有标注的预训练数据较少时,ViT 的效果比不上 Resnet,但是在更多训练数据之后,ViT 的效果超过了 Resnet,分析可能的原因是 ViT 的 transformer 结构与 CNN 相比缺少了归纳偏置(inductive bias),具体来说是平移相等性(translation equivariance,即输入变换后输出也会对应变换)和局部性(locality)。
ViT-L/16,L 代表 large,比 huge 小,16 代表 patch size.
文章还分析了整个 pipeline 的作用,将 patch 投影到 D 维向量——positional embedding——self-attention 中 attention 的平均距离(类比 CNN 中的 receptive field distance,越大代表越能提取出整张图的信息?存疑)
7.12
- MVP(Masked Visual Pre-training for Motor Control)
本文提出了基于 MAE 作为 encoder,PPO 作为强化学习 agent 的 motor control 任务,以及一种 benchmark PIXMC,PIXMC 提供了两种仿真环境下的机器人:franka 和 kuka(多指机器人)。
MVP 的 pipeline:预训练——编码器——控制器
预训练:有两种数据,一是从 imagenet 中得到的有标号数据,另一种是从联合任务交互(HOI)的视频中截取的数据。具体来说,是从视频中以 1 fps / 0.3 fps 的帧率来截取的图像。
编码器:以 ViT / MAE 为结构。训练了两种模型,一种是喂给 imagenet 的有标号数据来训练的 supervised encoder,这种是作为 baseline 比较自监督学习的效果。另一种就是从 HOI 视频中截取的图像,使用 MAE 训练的 image encoder。具体的结构就是 ViT 的结构,以 Transformer 为 backbone,一张图片拆分成若干个 patch,再通过 flatten 得到一个 hidden_dim 维的向量,通过 Transformer,再接 控制器。注意之后在训练控制器的时候,编码器的参数是 frozen 的
控制器:MLP,层之间的激活函数使用 SeLU 激活函数。这就是决策层(输入 encoder 后的 image 输出 action)
本文还有一些不错的 ablation study,比如利用随机特征下不好的效果证明了 image encoder 的必要性;如果不 freeze 编码器的参数,效果反而会变差;MAE 的设计优于 CLIP,证明自监督学习的优越性(是否可以应用到 Generalizable Imitation Learning?)
此外,有时间可以看一下文中提到的比较先进的视觉编码器 CURL 和 RAD:We compare MVP to two state-of-the-art methods that train the vision encoder with environment data: CURL (Srinivas et al., 2020) and RAD (Laskin et al., 2020)
一个存疑的点:文中提到的强化学习的上限——“oracle”是什么? - Learning Visual Robotic Control Efficiently with Contrastive Pre-training and Data Augmentation
arxiv: 2012.07975
提出了一种轻量级的 RL for manipulation 方法.
预训练时,使用 CNN,且使用数据增强,数据增强的方法就是 random crop。接着使用 SAC 作为 RL 的方法,感觉就没了?主要创新在于使用了真机作为验证。