Multi-modal Self-Supervision from Generalized Data Transformations

自监督学习

首先简单的介绍一下自监督学习和对比学习。自监督学习在我看来更偏向于无监督学习,因为他处理的对象也是无标签的数据,但是不同于无监督学习,它希望用自己构造的一些标签,作为一个辅助任务来训练网络。比如我们看到下面,我可以对原图像做一个旋转让他去预测旋转的角度,或者对原图像挖掉一块让他去预测挖掉的这块图像,这个挖掉的图像就是人为创造的标签。
幻灯片1.PNG

自监督学习的目标是通过辅助任务,来得到一个比输入更加低维的向量。这个低维向量应用于下游任务的时候,能够得到比直接输入 x 更好的效果。举个例子的话就是自然语言处理中的 word2vec,这个算法大家应该都听过,就是用前 N 个单词来预测下一个可能的单词,这里的下一个单词,就是人为构造出来的一个辅助任务。我们可以用着个辅助任务去训练网络,然后提取出中间层的输出,就是我们常说的词向量。这个词向量比 one-hot 形式的向量更加适用于自然语言处理的各种任务。这就是一个自监督学习的例子。

幻灯片2.PNG

对比学习

第二个概念是对比学习,我们首先看一个例子。我们知道现实中的狗长什么样子,但是我们不能画出一只一模一样的;同样的,虽然我们画不出来,但是我们很容易辨认出左边这个也是一条狗。所以说,我的网络不需要关注于图像的每一个细节,只需要将狗这个类别和其他的类别,比如猫、大象等尽可能的区分开来就行。这就是对比学习的核心目标,让相似的样本尽可能接近,让不相似的样本尽可能的远离。因此我们需要一个函数 s 来计算两个样本之间的距离,简单一点的话,s 可以取向量的内积。这里分母的两项就是正样本之间以及正样本和负样本的距离,我们希望前一项尽可能大,后一项尽可能小,这样小括号里面就趋近于 1,也就是整体趋近于 0。很容易想到正负样本的数量以及距离函数的选择,这两者是会直接影响对比学习网络的性能的。

幻灯片3.PNG

MOCO

这一篇何凯明的论文就是从样本数量上出发来进行优化。我们看到最左边的图 a,这是最原始的对比学习方法,我的正样本和负样本通过同一个编码网络得到各自的一个向量表示(这里左右两个 encoder 是同一个网络),然后通过之前的公式计算他们的对比损失,最后反向传播更新参数。这个方法存在的问题就是,我每一次所选取的正负样本数量,会受到 batchsize 的限制,这样的话我们得到的这个正负样本间的距离,实际上是不准确的。所以就有了图 b 中的方法,这个方法把所有的负样本的向量都计算出来,然后在随机的选取一部分和正样本做一个损失,但是这个方法的缺点也很明显,就是对所有样本进行计算会带来很大的内存消耗。所以作者提出可以维持一个负样本的队列,这个队列比 bathsize 要大,然后每一次把新的负样本放进去,把旧的拿出来。这个方法在实验的时候得到的效果很差,作者认为可能是编码网络一直在更新,导致了队列中前后两次得到的负样本表示是不一样的,这就存在一致性的问题。所以作者把正负样本的编码网络分开来,正样本的编码网络还是像原来一样通过对比损失反向传播来更新,而负样本的编码网络通过下面的公式来更新。这里的 θ~k~ 是负样本也就是右边这部分网络的参数,θ~q~ 是正样本网络的参数,m 是一个动量值。这个公式也很容易理解,前面的这一项来保持了原来网络的一个参数,让他的参数更新达到一个更加平缓的效果。

幻灯片4.PNG

SimCLR

第二篇论文的是 Hinton 的 SimCLR,在我看来的话他就也是从损失函数的角度去对对比学习做一个优化。我们直接看他的框架图。这里对输入图像做一个数据增强,比如说这里对猫做一个翻转,或者是旋转、割一块等等,我希望对于同一个输入变换来的两张图象,他得到的两个向量应该是尽可能的相近的,而对于不同的输入,比如我再输入一只大象,他也得到两张数据增强后的图像,然后也会得到两个向量,这两个向量和猫的两个向量应该尽可能的远。假设当前的 batch 里面只有一张猫的图像和一张大象的图像,他们经过数据增强后会得到四张图象,我们看这个矩阵。输入第一只猫的时候,这一块表示的是两个猫的距离,就是损失函数中的分子,整个三块就是损失函数中的分母,然后四张图像每一张都这么算,最后做一个平均,就是这个 batch 的损失。这个方法的话他只是改了损失函数,所以和之前的那种方法是可以一起用的,整个算法流程也是一样的,就是对比损失的计算不一样而已。

幻灯片6.PNG

多模态自监督

最后就是这篇多模态自监督学习的论文,他用的其实就是我们之前说的两种算法结合起来的形式,只不过他扩展到了多模态的领域。图上这个例子输入的是视频,对输入的视频首先做几个切点,每个点是 1s,然后提取出图像和音频,我希望同一个样本的不同模态间应该是尽可能的近的,不同样本之间应该尽可能的远。我们直接看他的损失函数,这里 f (TD) 可以理解为第一条线得到的向量,T‘D 可以理解为第二条线,后面这部分其实就是我们之前说过的内积的形式,只不过多了个 w。这个 w 是指,当我的 T 和 T’‘是同一个模态的时候,他是 0,不同模态就是 1,因为作者认为不同模态间计算可以使得模型具有更好的鲁棒性。而前面这个 c 其实就是在控制正负的样本。比如说我只想研究两个视频之间的,而不去管我的切点选在那里,那我就可以把上面这部分任意两条线之间的 C 全部设置为 0,这样模型就会只关注上面这部分和下面这部分之间的距离,就是说我不会去管蓝色的圈和绿色圈的远近。

幻灯片7.PNG

丨fengche丨 wechat
来找我聊天吧~
-------------本文结束感谢您的阅读-------------