真正的无监督学习之二——Contrastive Multiview Coding

真正的无监督学习之二——Contrastive Multiview Coding

Deep cluster是过于naive的方法。从Contrastive Predictive Coding (CPC)出世后,self-supervised learning达到了新的高度。以本文为例,在完全无监督的情况下,用resnet101达到了60.1%的top1,并且提取的特征使用在其他任务,如分割,检测中,可以达到与使用预训练模型的方法非常接近的结果。然而,作者只开源了核心部分,由于ICCV没中,需要等一段时间才能开源全部技巧。

【github】

Contrastive Multiview Coding

  • 简介

本文基于三个核心思想:contrastive learning,mutual information maximization和deep representation learning。简单来说,就是选取同一场景的不同views/不同场景的views来对比,最大化同一场景的交互信息(让同一场景views生成的embedding的invariance部分尽可能接近),基于抽取embedding的相似度来判断场景的相似度。

  • Contrastive Multiview Coding

首先,解释一下如何获取多views。将RGB的图像空间映射到Lab空间,再将每张图片拆分成L(光照)和ab(色度),就得到了同一图片的两个不同views。这两个views互为正对,与其他图片的views为负对(这在后面的NCE中需要用到)

1、Predictive learning:

假设 [公式] 代表光照, [公式] 代表色度,Predictive方法是从 [公式] -隐含变量- [公式] 。构建两个函数 [公式] 和 [公式] ,再使用loss,如L1或L2,来迫使 [公式] 接近 [公式] 。很自然的,该方法可以用在上色,风格转换,vision2sound等任务中。

然而,该方法有个最大的问题,就是优化目标只关注 [公式] 和 [公式] 的相似性,假定了 [公式] 和 [公式] 的像素和元素是独立的,即 [公式] ,是一个个像素的预测的集合。因此,这种方法会丢失建模关联和复杂结构的能力。

2、Contrasting two views:

contrastive learning与Predictive learning又不同,将不同views统一映射到同一个特征空间,再利用这些embeddings进行对比学习。很直观的,丢失的细节更少,也更好进行比较。

contrastive的核心思想是分辨来自不同分布的样本。

作者将正样本对定义为来自joint distribution,定义为 [公式] 。负样本对定义为来自the product of marginals,定义为 [公式] 。随后,为了区分正负样本,需要训练一个函数 [公式] ,对正样本打高分,对负样本打低分。作者训练该函数的方法是让函数从 [公式] ,包含1个正样本,k个负样本的集合中找到那个证样本。目标函数形式化如下:

[公式] (1)

更具体的,固定一个vew,枚举其他view:

[公式] (2)

到此为止,都非常直观,只是一个标准的log-softmax。

随后,作者论证了最优解 [公式] 正比于joint distribution和product of marginals的密度比:

[公式] (3)(应该是为了论证N越大,效果越好)

但是,在实际计算中,N可能是极度大的直接最小化等式(2)是不现实的。后文会提到作者是如何利用NCE来获得近似解。同时,针对两个views,很自然的将 [公式] 拆分成两个编码器 [公式] 和 [公式] ,并抽取表征为 [公式] 。额外引入一个参数 [公式] , [公式] 可以被形式化为:

[公式] 或 [公式] (4)

等式2将 [公式] 视为anchor, 并在[公式] 上枚举。对称的,可以通过将 [公式] 视为anchor获得 [公式] 。将两项加起来,获得two-view loss:

[公式] (5)

在contrastive learning阶段完成后,通过对不同views得到的表征进行综合,可以获得最终的representation。对于那些超过two-views的情况,如video,RGB-D,作者在下一节提出了新的充分利用多views信息的组合方式。

3、More than two views:

这个非常好理解。在多views的情况下,如何构建contrastive关系。第一种,core view,选取一种为anchor,枚举其他views。第二种,full graph,将多种views两两互相匹配。很明显的,full graph的交互信息更多,效果也更好,副作用是运算量也大很多。

4、Connecting to Mutual Information:

重头戏来了。

其实这一系列基于contrastive learning范式的学习方法,都直接关系到对 [公式] 和 [公式] 的交互信息最大化。交互信息定义为:

[公式] (6)(类似于Eq.3,但是这是特征而不是样本的交互部分与不交互部分的密度比。不准确的来说,例如一个鸟的样本,那么交互信息就是证明该样本是鸟的那一部分invariance information)

直觉地,contrastive loss区分来自交互分布和边缘乘积的样本,也就能最大化它们的表征的分布的离散度(意思是这些样本编码后的特征也能被区分)。CPC证明了交互信息的边界:

[公式] (7)

其中k代表了样本集中负样本对的数量。根据Eq.3,可以得出,负样本越多,能获得更好的表征。优化目标 [公式] ,同样可以最大化交互信息的下界。不过,根据[D. McAllester and K. Statos. Formal limitations on the measurement of mutual information. arXiv reprint arXiv:1811.04251, 2018],该边界非常weak,仍然需要寻找更好的对交互信息的估计量。

5、近似估计Full Softmax:

这是所有利用基于contrastive learning和交互信息的方法都会出现的问题。Eq.2的计算量太大,尤其是在为了保证下界,负样本对数N要尽可能大的情况下。作者总结了两种tricks,分别是①使用NCE来近似模拟full softmax②使用Deep InfoMax的方法,使用子块而不是完整图像来增加每个batch的负样本数量。

5.1、leveraging NCE(leverage应该翻译成什么好啊,充分利用?)

回顾一下我们的log-softmax的优化目标,即我们要优化的概率—— [公式] 对应的 [公式] 是最佳匹配的概率:

[公式] (8)

其中 [公式]

当 [公式] 是正样本时,要通过log-softmax优化让p最大,此时的意义就是拉近正样本对之间的距离。然而,对于大N,计算压力很大。这时候就可以用NCE。

NCE是一种有效模拟unnormalized统计模型的方法。NCE训练一个密度模型p来匹配数据分布 [公式] ,通过使用训练一个binary分类器来从噪声样本分布 [公式] 中区分 [公式]的方法。(data sample:正样本;noise sample:负样本)。为了学到 [公式] ,作者使用一个binary classifier,将 [公式] 视为给定的 [公式] 的数据样本。噪声分布 [公式] 是一个对所有 [公式] 元素的uniform分布,即 [公式]。如果我们对每个数据样本取样m个噪声样本,那么给定 [公式] 来自数据分布的后验概率是:

[公式] (9)

通过使用模型分布 [公式] 来替代 [公式] ,最小化正确label D的负对数后验概率,得到NCE估计的概率函数:

[公式] (10)

为了降低运算量,作者引入了memory bank,可以从中有效检索m个噪声样本而不需要重新计算。一个针对NCE的简化方法是使用(m+1)路softmax分类器,这也是CPC和Deep InfoMax使用的。

5.2、Contrasting Sub-patches

除了使用最后一层输出的特征进行对比,还可以用中间层与最后一层的进行对比,这也是Deep InfoMax使用的方法。在这种情况下,作者使用了简单的(m+1)路softmax loss方法,不需要计算NCE,也不需要使用memory bank(直接使用一个batch中的中间变量即可)。然而,基于patch的方法对比起基于NCE的方法通常是次优的。

  • 实验结果
ImageNet上的结果使用resnet在ImageNet上的结果
编辑于 2019-07-28
无监督学习
 

文章被以下专栏收录

跨域ReID-UDA,DG以及更多
跨域ReID-UDA,DG以及更多

推荐阅读

真正的无监督学习之一——Contrastive Predictive Coding

真正的无监督学习之一——Contrastive Predictive Coding

Contrastive self-supervised learning

Contrastive self-supervised learning techniques are a promising class of methods that build representations by learning to encode what makes two things similar or different.主…

一文详解最近异常火热的self-supervised learning

本文经授权转载自公众号:深度学习技术前沿 作者:Sherlock知乎链接:https://zhuanlan.zhihu.com/p/108625273【导读】最近 self-supervised learning 变得非常火,首先是 kaiming 的 MoCo …

有监督学习、无监督学习以及强化学习

有监督学习、无监督学习以及强化学习

15 条评论

  • 卜一
    卜一2019-08-29

    所以其他图片的负对也可能是同一个class 的?

  • 乱码
    乱码 (作者) 回复卜一2019-09-04
    对。只要跟anchor不是同一类就行了
  • 卜一
    卜一2019-08-29

    请教,不是很懂这种self suprvise的所指。难道说是学representation时是self supervise 的,然后再最后free encoder 接linear classifier 时候再supervise?如是这样,那其实比的就是所谓feature 提取能力?

  • 乱码
    乱码 (作者) 回复卜一2019-09-04
    yep。就是特征提取能力。后面可以用线性分类器(无需训练),也可以训练一下mlp分类器
  • 朱军
    朱军2019-11-19

    请教作者:之前做过一个实验,先用tripletloss 训练一个特征提取器 然后固定特征提取器 接卷积+全连接层分类 softmax训练 但是效果是不如 直接分类的。。。

     

    文章的意思 是不是和我这个思路一致 啊。。

  • Zhu Forrest
    Zhu Forrest回复朱军02-24

    遇到了类似的问题,请问最后有分析出原因吗?

  • xbsun
    xbsun2019-11-22
    拜读了
  • 李韶华
    李韶华03-07
    这个iclr 20也被拒了,感觉主要是因为写的太乱,读起来很累
  • 一方面主要是把详细的数学全部写下来了,读起来就不轻松,另外确实写的有点乱,更新了一下
  • 言蹊
    言蹊03-07

    从数学角度思考方法,能预知某些理论上的不work!

  • 阡沫昕
    阡沫昕03-24

    初接触,想问一下我这样理解对吗?:先用一个任务(这里是正负样本对比,学习样本特征),得到网络的参数(如resnet、alexnet等),然后将这个网络用到具体任务之中。如果是的话,对于CMC的预训练网络是ResNetV2还是resnet(即是l和c两部分的网络之和的encoder还是单一的l_to_ab或者ab_to_l)?

  • 阡沫昕
    阡沫昕回复阡沫昕03-24
    如果是前者的话,那么这个resnetv2和目标检测的resnet是很不同的,这里里面还有两个小的;如果是后者的话,那么输入的维度不是常见的3而是1或者2,感觉也不对
  • 阡沫昕
    阡沫昕回复阡沫昕03-24
    还是我有地方没有理解到位,希望得到指教
  • 小明
    小明04-24
    请问作者,如何保证负样本与正样本不是同一类,训练的时候如果没有打乱数据?同一批次的数据经常都是同一类
  • Jack Yang
    Jack Yang05-24
    无监督还他么那么多参数,耍流氓。