卷友们好,我是rumor。
这可能是我今年最后一次看paper了。于是我选择了躺在我文件夹里两周之久的一篇文章,由清华和商汤出品[1]:
当时我在Arxiv上一眼就相中了它,但我却迟迟没开始看,一是因为快年终了事情比较多,二是它的公式太多了。我好久没看有这么多公式的文章了,简直是我脑细胞的世界末日。所以在21年的尾巴,我决定了结这件痛苦的todo。
结果读完发现,真是妙啊。
今年大火的对比学习冒出了诸多框架,MoCo、SimCLR、SwAV、SimSiam等等等,让人傻傻分不清楚,也说不几米本质不同究竟在哪儿,而这篇文章从梯度角度进行分析,发现所有的对比学习框架本质就三个东西:positive gradient、negative gradient和平衡两个梯度的超参数。
同时从结论出发进行了控制变量实验,发现momentum encoder居然是影响最大的因素。
前情回顾
今年以来,对比学习共有三种框架出现:
(想偷懒,直接给大家放我之前分享的PPT啦hhh。
基于负例的
基于非对称网络的
基于特征去相关的
统一框架
上述框架有很多不同:
核心是loss:典型的对比学习采用InfoNCE,非对称框架则只提升正例的cosine,特征去相关框架则让特征交叉矩阵变成单位矩阵
样本集:当前batch、memory bank、所有之前的样本
Encoder更新方式:参数共享、stop-gradient、momentum-encoder
而作者经过对三种框架的loss求梯度,最终发现这些自监督方法都可以简化为以下形式:
也就是由正例反馈的梯度、负例反馈的梯度和两者的比重。
有同学可能疑惑非对称框架是怎么分解出负例梯度的,这个核心点主要在Predictor上。最近一篇文献DirectPred[2]给出过Predictor更详细的分解,分解后再算梯度恰好是这个样子:
所以,目前已经把不同的loss统一到一起了,接下来就是分别测试样本集和encoder更新方式对效果的影响。
疯狂对比
样本集的影响
先把encoder都设定为momentum encoder,观察样本集的影响:
结果惊喜的发现:
对比a、b,发现原来我们一直相信的增加负例居然没什么用
鉴于BYOL=SimSima+momentum-encoder,作者只放了BYOL的结果,同时又简化成了e,发现效果也没怎么降。最终将e称为UniGrad,也是经过作者验证最好的
作者又分别对f和i进行了简化,结果效果也没怎么降
搞了半天,各个方法只差了0.5个点,原来样本集对效果的影响并不大。
Encoder更新的影响
注:因为作者统一框架后网络是对称的,所以参数共享与stop-gradient等价。
从前两行来看,用了动量之后明显要过要好上一截。那动量到底对什么有效呢?作者又做了第三行实验,只给正例进行动量更新,发现效果基本持平。作者猜想原因是momentum encoder给自监督学习提供了一个比较一致且缓慢更新的目标。
不同方法的更新进程
最后,作者又对比了不同方法的训练过程,发现其中的diff真的不大:
总结
读完这个文章,突然有一种圆满的感觉,起码今年我在对比学习方面的一些疑惑终于画上了句号。之前大家的花样太多了,超参数设置的又不一样,很难真正进行对比。而这次终于有一篇文章进行了更本质的思考,给出了有价值的结论。
CV的知识又提升了,开心。
参考资料
[1]
Exploring the Equivalence of Siamese Self-Supervised Learning via A Unified Gradient Framework: https://www.arxiv-vanity.com/papers/2112.05141/
[2]Un- derstanding self-supervised learning dynamics without con- trastive pairs.: https://arxiv.org/abs/2102.06810v1
欢迎对NLP感兴趣的朋友加入我们的「NLP卷王养成」群,一起学习讨论~
扫码添加微信备注「NLP」即可⬇️


大家好我是rumor
一个热爱技术,有一点点幽默的妹子
欢迎关注我
带你学习带你肝
一起在人工智能时代旋转跳跃眨巴眼
「公式都推导了吗」
419

被折叠的 条评论
为什么被折叠?



