查看原文
其他

MoCo V3:我并不是你想的那样!

AI小将 机器学习算法工程师 2021-12-31

点蓝色字关注“机器学习算法工程师

设为星标,干货直达!



近期,FAIR的CV大神Kaiming He又放出了一篇佳作:

An Empirical Study of Training Self-Supervised Visual Transformers


首先MoCo v3不应该是这篇论文的重点,这篇论文的重点应该是将目前无监督学习最常用的对比学习应用在ViT上。MoCo v3相比v2去掉了memory queue,转而像SimCLR那样采用large batch来取得稍好一点的结果,从结构上encoder  借鉴BYOL那样增加了一个prediction head,在ResNet上效果有稍许提升:

# f_q: encoder: backbone + pred mlp + proj mlp
# f_k: momentum encoder: backbone + pred mlp
# m: momentum coefficient
# tau: temperature
for x in loader: # load a minibatch x with N samples
x1, x2 = aug(x), aug(x) # augmentation
q1, q2 = f_q(x1), f_q(x2) # queries: [N, C] each
k1, k2 = f_k(x1), f_k(x2) # keys: [N, C] each
loss = ctr(q1, k2) + ctr(q2, k1) # symmetrized
loss.backward()
update(f_q) # optimizer update: f_q
f_k = m*f_k + (1-m)*f_q # momentum update: f_k
# contrastive loss
def ctr(q, k):
logits = mm(q, k.t()) # [N, N] pairs
labels = range(N) # positives are in diagonal
loss = CrossEntropyLoss(logits/tau, labels)
return 2 * tau * loss


重头戏主要在MoCo v3在ViT上的实验,这里简单总结如下:

(1)从实验结果来看,基于MoCo v3训练的ViT-BN-L/7模型(LN换成BN,patch size为7x7)在ImageNet linear probing protocol上取得了新的SOTA,超过Top-1 acc达到81.0%,超过79.8% with SimCLR v2 (SK-ResNet152-3×), and 79.6% with BYOL (ResNet200-2×)。这证明了ViT在无监督训练上的优势。

(2)发现了ViT在无监督训练过程中的instability,这个训练不稳定并不会导致灾难性的性能骤降,而只是稍许的性能下降,这就比较难以察觉。batch size和lr会明显影响ViT训练的稳定性,比如batch size为6144时,从训练过程中的acc曲线可以看到会出现比较明显的“dips”,这就好像网络又重开始训练一样。虽然训练不稳定,但最终的效果为69.7,相比batch size为2048的72.6只掉了不到3个点。当lr过大时也会导致instability。

论文中进一步分析这个"dips"出现的原因,发现其实是训练过程中的梯度会出现陡峰造成的,而且发现first layer先出现,然后延迟一些iterations后last layer也出现梯度骤增。所以这种训练不稳定性是由于first layer造成的可能性比较大。

论文中提出的一种解决方案是,ViT采用a fixed random patch projection layer,这相当于这patch embedding是固定的,而不是训练得到的(其实对projection layer做gradient clip也是可以,但是最终发现需要设定一个极小的阈值,这就等价于freeze它了)。这个简单的trick可以解决部分这种训练的instability:

但这并没有本质解决这个问题,因为当lr过大时这种现象还是会出现的。

(3)尽管更大的ViT模型可以取得更好的效果,但是还是可以发现模型越来越大时会出现saturation的趋势,当然最简单的解决方案是喂给更多的数据。还有可能是基于instance discrimination的pretext task过于简单,还需要设计更好的pretext task。

(4)position embedding的影响:去除PE,在无监督训练过程去除PE,效果也下降了1个多点。在有监督训练中,去除PE的影响会更大一些,ViT论文中是报道掉了3个点以上。去除PE还能学习的这么好,说明ViT的学习能力很强,在没有位置信息的情况下就可以学习的很好;从另外一个角度来看,也说明ViT并没有充分利用好PE而取得更好的效果,具体是哪个原因还需要进一步的研究。最近的CPVT和CvT也提出引入卷积来去除PE。


最后摘抄论文中的两段脚注(透过现象看本质):

self-attention vs convolution

We argue that it is imprecise to simply compare self-attention against “convolutions”. Convolutions [26] by definition have several properties: weight-sharing, locally-connected, translation-equivariant. All projection layers in a self-attention block have all these properties of convolutions, and are equivalent to 1×1 convolutions. The counterpart of self-attention is more appropriately the non-degenerated (e.g., 3×3) convolutions.

transformer vs resnet

Transformers [41] by design consist of residual blocks [20], and thus are a form of residual networks. In the literature on “Transformer vs. ResNet”, precisely speaking, the term of “ResNet” refers to the specific design that has non-degenerated (e.g., 3×3) convolutions



推荐阅读

CPVT:一个卷积就可以隐式编码位置信息

DETR:基于 Transformers 的目标检测

Transformer在语义分割上的应用

"未来"的经典之作ViT:transformer is all you need!

PVT:可用于密集任务backbone的金字塔视觉transformer!

大道至简!深度解读CVPR2021论文RepVGG!

PyTorch 源码解读之 torch.autograd

涨点神器FixRes:两次超越ImageNet数据集上的SOTA

Transformer为何能闯入CV界秒杀CNN?

SWA:让你的目标检测模型无痛涨点1% AP

CondInst:性能和速度均超越Mask RCNN的实例分割模型

centerX: 用新的视角的方式打开CenterNet

mmdetection最小复刻版(十一):概率Anchor分配机制PAA深入分析

MMDetection新版本V2.7发布,支持DETR,还有YOLOV4在路上!

CNN:我不是你想的那样

TF Object Detection 终于支持TF2了!

无需tricks,知识蒸馏提升ResNet50在ImageNet上准确度至80%+

不妨试试MoCo,来替换ImageNet上pretrain模型!

重磅!一文深入深度学习模型压缩和加速

从源码学习Transformer!


机器学习算法工程师


                                    一个用心的公众号


 


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存