2021-12 对比学习精要- Contrastive learning

本文完全参考 张俊林 老师的博客 对比学习(Contrastive Learning):研究进展精要

前言

对比学习从目标来看,是要做在NLP类型类似Bert预训练的事,即通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力。

大致分类

对比学习目前可大致可分为

  • 基于负例的对比学习方法
  • 基于对比聚类的方法
  • 基于不对称网络结构的方法
  • 基于冗余消除损失函数的方法
  • ……

基于负例的对比学习方法

SimCLR

对比学习是自监督学习,没有标注数据,因此需要自行构建相似数据(正例)和不相似数据(负例)。

来自知乎-张俊林老师

正负例构建
对于某张图片,首先需要一个增强操作集合T,随机抽取两个 t_1 \in T以及t_2 \in T,分别作用在原始图像上,形成两张经过增强的新图像\{{x_1, x_2 \}},两者互为正例。训练时,Batch内的任意其他图像,都可作为x_1x_2的负例。\color{red}{思考题1:模型此处假定Batch内的任意其他图像都为负例,但实际训练会保证如此吗,如果保证的话,那岂不是监督学习了}
表示学习系统构造
构造原则:构造一个表示学习系统,通过它可以将训练数据投影到某个表示空间内,并采取一定的方法,使得正例距离能够比较接近,负例距离比较远。
来自知乎-张俊林老师-SimCLR模型结构

SimCLR由对称的上下两个分支构成,随机从无标训练数据中获取N个构成一个Batch,对于Batch内的任意图像,根据上述方法构造正例,形成两个图像增强视图:Aug1Aug2Aug1Aug2各自包含N个增强数据,并分别经过上下两个分支,对增强图像做非线性变换,这两个分支就是SimCLR设计出的表示学习所需的投影函数,负责将图像数据投影到某个表示空间。
由于上线分支时对称的,所以以增强视图Aug1为例来介绍,Aug1首先经过特征编码器Encoder(一般采用Resnet作为模型结构,此处以函数f_\theta(x)代表),经过CNN转换成对应的特征表示h_i。紧随其后,是另外一个非线性变换结构Projector(由[FC\rightarrow BN \rightarrow ReLU \rightarrow FC]两层MLP构成,这里以函数g_\theta(x)表示),进一步将特征表示h_i映射成另外一个空间里的向量z_i

相似性计算函数
表示向量L2正则后的点积或者表示向量间的Cosine相似性
S(z_i,z_j)=z_i^Tz_j/(||z_i||_2||z_j||_2)
InfoNCE损失
L_i=-log(exp(S(z_i, z_j^+)/ \tau))/ \sum_{j=0}^Kexp(S(z_i,z_j)/ \tau)
其中{z_i,z_i^+}代表两个正例相应的表示向量。从这InforNCE可以看出,函数的分子部分鼓励正例相似度越高越好,也就是在表示空间内距离越近越好;而分母部分,则鼓励任意负例之间的向量相似度越低越好,也就是距离越远越好。
SimCLR小结
SimCLR有两个最大的贡献,一个是证明了复合图像增强很重要;另外一个是Projector结构很有必要。(具体原因阐述可见张老师博客)。
\color{red}{此处省略对比学习底层逻辑分析。但是这块真的很精彩,有兴趣的同学一定要看下}

Moco V2

基于负例的对比学习:Batch外
很多实验证明了:在基于负例的对比学习中,负例数量越多,对比学习模型越好。但是受限算力,我们又不能无限放大Batch size,那么有什么办法在算力有限的情况,也可以在整个无标注训练数据集内随机挑选负例,而不再局限于Batch内寻找呢,Moco提出了一个解决方案(但由于Moco v2吸收了SimCLR的Projector结构,以及更具难度的图像增强方法,所以这里讲解Moco v2)。

来自知乎-张俊林老师-Moco v2框架图

Moco v2的图像增强方法、Encoder结构、Projector结构、相似性计算方法以及InfoNCE损失函数,和SimCLR基本一致,最主要的特点和创新点在两个分支中的下分枝:SimCLR里上下两个分支时对称的,两者可参数共享,而Moco v2的下分枝模型更新参数,采用的是动量更新(Momentem Update)。下分枝的模型结合与上分支保持一致,但是模型参数更新不再使用损失函数的反向传播来进行梯度更新,而是采用移动平均机制来更新
\xi=m\xi+(1-m)\nu
其中,\nu是上分枝对应的模型参数,\xi是下分枝对应的模型参数,m是权重调节系数(一般m会取较大数值,eg:0.9甚至0.99)。
此外Moco v2维护了一个较大的负例队列,当对比学习需要在正例和负例之间进行对比计算是,就是这个负例队列里去K个。

基于对比聚类的方法

SwAV 对比聚类:负例隐身

来自知乎-张俊林老师-SwAV模型

SwAV的模型结构,其中的图像增强、Encoder以及Projector结构,与SimCLR基本保持一致,而且也是上下分枝对称结构。对于Batch内某张图像x来说,假设其经过图像增强后,在Aug1和Aug2里对应增强后的图像分别是x_ix_j,数据对x_ix_j互为正例。增强视图x_i走上分枝,经过g_\theta(f_\theta(x_i))投影到单位超球面中某个点z_i,增强视图x_j走下分枝,经过g_\theta(f_\theta(x_j))投影到单位超球面中某个点z_j。之后SwAV对Aug1和Aug2种的表示向量,根据Sinkhorn-Knopp算法,在线对Batch内数据进行聚类。假设走下分枝的x_j聚到了q_j类,则SwAV则要求表示学习模型预测x_i分类成q_j类。
损失函数
损失函数采用z_i和Prototype中每个类中心向量的交叉熵:
Laug1(z_i,q_j)=-\sum_k{q_j^k · log(p_i^k)}
其中p_i^k=exp(z_ic_k/ \tau)/\sum_{k^n}exp(z_ic_{k^n}/\tau)c_k为第k个聚类的类中心向量,\tau为温度超参数。

基于不对称网络结构的方法

BYOL 非对称结构

上文有述,在常见的基于负例的对比学习方法中,负例有着举足轻重的作用,它起到了将投影到超球体平面的各个实例对应的表示向量相互推开,使得图像对应的表示向量在超球体表面分布均匀的作用,以此来避免表示学习方法模型坍塌问题。
那么,问题来了:如果我们只使用正例,不使用负例来训练对比学习模型,这种思路是可行的吗?乍一看,这几乎是不可能的:假设只有正例,模型推动正例在表示空间内相互靠近。如果只有这一优化目标,很明显,理论上,模型会很快收敛到常数解,也就是所有数据会被映射到表示空间里同一个点上。就是说,很容易出现模型坍塌的结局
但是,BYOL模型就是这么做的,关键是,它还做成功了,更关键的是,不仅做成功了,它还是目前效果最好的对比学习模型之一。那么,BYOL是怎么做到的呢?

来自知乎-张俊林老师-BYOL模型

BYOL模型与Moco V2基本是一致的,但是区别在于,在上线分支中,在Projector之后,新增了一个非线性变换模型Predictor。Predictor与Projector类型([FC->BN->ReLU->FC]构成的MLP映射网络),产生表示向量v_i,并对v_i做L2正则化。此外,BYOL不需要分离,所以并不需要为辅Moco v2中的负例队列了。
损失函数

L_{aug1}=||v_i-z_j||_2
经过改写,L_{aug1}也是Cosine相似性的一个变体,它的最小值对应两个表示向量的Cosine最大值,也即优化目标是在单位超球面上,正例之间的距离越近越好。
论文中指出BYOL之所以它没有坍塌到常数解,是由于online和Target两者结构的不对称造成的。

基于冗余消除损失函数的方法

Barlow Twins 冗余消除损失:越简单越快乐

来自知乎-张俊林-Barlow Twins

Barlow Twins和BYOL一样也只使用了正例,其模型结构与SimCLR保持一致。其特点是在激情增强图像经过g_\theta(f_\theta(x))投影之后,在Batch维度分别做了类似BN的正则,再顺着Batch为,对aug1和agu2两个正例表示矩阵做矩阵乘法,求出两者的互相关性矩阵(cross-correlatin matrix),其损失函数定义在这个互相关性矩阵C
L_{bt}=\sum_i(1-C_{ii})^2+ \lambda \sum_i\sum_{j\neq i}C_{ij}^2
损失函数L_{bt}第一个子项成为“不变项”,第二个子项称为“冗余消除项”。可以看出,它的优化目标是希望互相关性矩阵C的对角线元素为1,非对角线元素为0,也就是希望互相关性矩阵是个单位矩阵I。“不变项”,起到了把正例在表示空间相互拉近的作用,而“冗余消除项”,其实是希望Aug1和Aug2矩阵里的特征表示向量中,向量每个元素相互之间增强独立性,也就是尽可能消除表示向量里各个bit位之间的冗余信息表达,这个子项起到了类似负例的作用,避免模型坍塌。
从Barlow Twins我们可以看出,如果能够合理设置损失函数,那么光靠损失函数,也可以避免模型坍塌现象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352