对比学习发展历程综述 p3 自用笔记
一种不使用负样本的对比学习手段:
(相关资料图)
BYOL:
Bootstrap Your Own Latent A New Approach to Self-Supervised Learning
摘要:在对比学习中,选择正负样本其实是一个基本的思路:那就是让互为正样本的物体的特征尽可能相似,互为负样本的特征尽可能拉远。若是不去定义其中的负样本,不用负样本对训练加以限制,只将相似的输入 通过网络后的输出拉近,那么这个网络可以把这个问题简化成“让所有的输入的输出都相等”,模型会陷入trivial solution中平凡解,那这样也是达到了“拉近相似样本的距离”,不过显然这样是达不到我们的目的的,这样的模型无法区分不同类输入间的差异,我们也称该现象为model collapse。
这里走一下前向过程:
a. 将minibtach里的数据通过一次数据增强,得到v和v';
b. 分别通过Encoder f_θ 和f_ξ 得到y_0,y'_ξ 两个特征,这里的f_θ的随网络更新,f_ξ是使用了动量编码器move average的方式随f_θ更新;
c. 将y_0,y'_ξ 两个特征经过投射层Projection head(MLP)g_θ和g_ξ 得到z_0和z_ξ,这里g同样使用了动量更新的操作。
d. 使用q_θ再做一次MLP,去“预测”得到的q_θ(z_θ) 去和下面的z_ξ尽可能地一致,去计算MSE loss,这里下面的网络类似于一个Key,并不进行梯度的回传(sg - stop gradient)。
总的来看类似于自己的一个视角的特征去预测自己另一个视角的特征,本文作者并没有对该idea work的可行性进行十分详尽的讨论,所有有后续的工作。
后续工作:
有人在复现的时候发现,将BYOL中的MLP层的BN层取消后,模型就collapse了,无法收敛,由此发博客,提出自己的想法:Batch Normalization相当于对于一个batch里的所有数据算了均值和方差,那么你在做每一个样本的学习时,其实是获取到到了这个batch里的其他特征的分布信息的,是存在信息泄露的。该作者认为BN使得BYOL存在一个隐式的负样本——该batch里面的其他样本的“均值”,类似于SwAV的聚类中心。
但作者紧接着又做了很多消融实验作为回应,证明了BN并不对该训练过程具有决定性意义,并和博客作者达成一致认同,BN的作用主要还是帮助模型稳定训练,提高训练过程中的稳定性,从而防止模型坍塌,如果模型能初始化的比较好,那么用不用BN关系也不大。
SimSiam
Exploring Simple Siamese Representation Learning - 2020
对对比学习本质进行研究后,提出对比学习模型的最基本的点,将整体模型化繁为简,提出对比学习模型“不需要负样本”,“不要要大batchsize”,“不需要动量编码器”,也可以训练起来并且得到好的结果。文章对上述三点的消融实验值得细看。
本文将不会坍塌的愿意归因于Stop gradient操作,将这样的对比学习类比于EM算法。“因为有了SG操作后,这一套训练流程被人为分成了两个子问题,模型的更新也是在交替进行,也可以想象成一个K-means的工作 ”