当前位置:   article > 正文

对比学习及其应用_对比学习的作用

对比学习的作用

对比学习

1. 什么是对比学习

对比学习是一种机器学习技术,通过训练模型哪些数据点相似或不同,来学习没有标签的数据集的一般特征。

Contrastive learning is a machine learning technique used to learn the general features of a dataset without labels by teaching the model which data points are similar or different. [1]

例如,在一个新的环境中,有两只猫和一只狗,此时你并不认识猫和狗,即并没有猫与狗的标签。但是你会发现,相比于狗来说,两只猫之间的相似度更高。即在你不理解标签情况下,通过对比的方式得知两只猫更相似,例如我们下意识发现两只猫的耳朵都是竖着的,而狗的耳朵是下垂的;或者我们可以发现狗身上没有斑纹而猫身上的斑纹比较多。通过对比的方式让我们可以在更高级的特征方面理解图像 (High-level features),例如在原本的有监督任务中,我们仅仅是通过大规模样本的数据训练一个表征的模型,这个模型只关注于在样本下猫的特征,而缺少了关注类之间不同的高级特征。
在这里插入图片描述

本质上,对比学习允许我们的机器学习模型做同样的事情。在进行分类或分割等任务之前,它会查看哪些数据点是“相似的”和“不同的”,以便了解数据的更高层次的特征。

为什么对比学习如此强大?因为我们可以在无任何标注或标签的情况下,训练一个模型来学习数据的许多特性,这也是一个术语自监督学习,对比学习是一种自我监督学习的范式。

为什么我们需要对比学习?或者说需要无监督、自监督或半监督学习?绝大多数情况下,例如人脸数据集,或者医学影像数据集,这些数据集都是大规模的数据集,我们往往无法,或者没有精力、代价去将全部的数据集都作标注。通过网络爬虫等手段我们可以很快的采集相当数量的人脸数据集,然而将相当数量的图片做上标注在时间上是困难的;医学影像数据往往需要专业人士花费无数的时间来手动进行分类,分割。因此我们是否可以通过对比学习,在数据仅有一部分标注的情况下,依然能使模型学习到相当好的效果。

2. 对比学习起什么作用?

先举一个例子,是Epstein在2016年做的一个实验,要求实验人员尽可能绘制一张美元的钞票。下图左侧是凭借之前的记忆绘制的美元,右图为给了实验人员一张真实的美元货币对比绘制的。可见,在有没有真实钞票作为对照物的情况下,美元的绘制结果是不一样的。

最终实验的结果想证明的是,人们很多次的见过美元的照片,但并没有完完整整地记住它的细节。事实上,我们仅保留了足够的High-level特征,便可以用于区别其他的物体。而目前有监督学习分类方法常常关注于像素级细节的表示学习上,是否可以构建一个不关注于像素级别的表示学习方法,仅靠编码高级的特征即可有效地区分不同的物体。

当代的自监督学习的方法大致可以分为两类,一种是生成式的,另一种是对比式的。

133A8B02-5C52-4425-9605-28DCB4E57480

生成式的网络,例如GAN方法,通过无监督学习其中的语义特征,生成逼真的模型;或者采用无监督方式进行模型的解耦合,映射到特殊的空间中。通常该方法的损失函数多关注于像素级的损耗。例如在生成式方法解耦合过程中,常常为了保持像素的一致性,采用 L 1 \mathcal{L}_{1} L1损失函数:

L G = E p d a t a [ ∥ x 1 − x 0 ∥ 1 ] \mathcal{L}_{G}=E_{p_{data}}[

x1x0
_{1}] LG=Epdata[x1x01]

其中 x 1 x_{1} x1 x 0 x_{0} x0均为图像,可能均为生成式图像,也可能是一个是生成式,一个为对照式。或者常常在生成视频时为了保证图像的平滑性,对时间序列生成图像进行 L 1 \mathcal{L}_{1} L1损失:

L T e m p = ∑ t = 1 N ∥ x t − 1 − x t ∥ 1 \mathcal{L}_{Temp}=\sum_{t=1}^{N}

xt1xt
_{1} LTemp=t=1Nxt1xt1

不难看出,这些多是关注于像素级的损耗,而非高级的特征区别。

对比学习,则是通过对比肯定与否定的例子在学习模型的表达。

关注点 [2]:

  • 通过对比学习训练的无标签的ImageNet数据和评估线性分类器超过了有监督监督AlexNet的准确性。与有监督学习相比,当从标记数据学习时,它们也表现出显著的数据效率。(Data-Efficient CPC, Hénaff et al., 2019)
  • 对比预训练在ImageNet成功地迁移到其他下游任务,并优于有监督的预训练对手。(MoCo, He et al., 2019)

它们不同于更传统的生成式表征学习方法,后者侧重于像素空间的重构误差来学习表征。

  • 使用像素级损耗会导致这种方法过于关注基于像素的细节,而不是更抽象的潜在因素。
  • 基于像素的目标通常假定每个像素之间是独立的,从而降低了它们建模相关性或复杂结构的能力。

3. 对比学习的一般表达

对比学习的一般表达方式,对于任何的数据点 x x x,对比学习方法目的在于学习一个编码器 f f f

image-20210505155058161

s c o r e ( f ( x ) , f ( x + ) ) > > s c o r e ( f ( x ) , f ( x − ) ) score(f(x),f(x^{+}))>>score(f(x),f(x^{-})) score(f(x),f(x+))>>score(f(x),f(x))

其中 x + x^{+} x+是与 x x x相似的数据点,被称为正样本 x − x^{-} x是与 x x x不相似的数据点,被称为负样本 s c o r e score score是度量两个特征之间相似性的函数。

为了优化这一特性,我们可以构造一个能正确分类正样本和负样本的softmax分类器。这将鼓励分数函数将较大的值分配给正的例子,将较小的值分配给负的例子:

L N = − E X [ log ⁡ exp ⁡ ( f ( x ) T f ( x + ) ) exp ⁡ ( f ( x ) T f ( x + ) ) + ∑ j = 1 N − 1 exp ⁡ ( f ( x ) T f ( x j ) ) ] \mathcal{L}_{N}=-\mathbb{E}_{X}[\log \frac{\exp(f(x)^T f(x^+))}{\exp(f(x)^T f(x^+))+\sum_{j=1}^{N-1} \exp(f(x)^T f(x_{j}))}] LN=EX[logexp(f(x)Tf(x+))+j=1N1exp(f(x)Tf(xj))exp(f(x)Tf(x+))]

image-20210505154255597

分母项由一个正样本和 N − 1 N - 1 N1个负样本组成。这里,我们使用点积作为分数函数:

s c o r e ( f ( x ) , f ( x + ) ) = f ( x ) T f ( x + ) score(f(x),f(x^+))=f(x)^T f(x^+) score(f(x),f(x+))=f(x)Tf(x+)

这是N类softmax分类器常见的交叉熵损失,在对比学习文献中通常称为InfoNCE损失。在以往的研究中,它被称为n-pair lossranking-based NCE

4. 对比学习在人脸生成中的应用

CVPR 2020 Oral 一篇人脸生成的文章为例,该方法也称为 DiscoFaceGAN

Deng, Yu, et al. “Disentangled and controllable face image generation via 3d imitative-contrastive learning.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.

仅从实现的角度看这篇文章,不讨论其优缺点以及该领域的发展情况,该方法的整体框图如下所示:

右边绿色框内的即是其的生成框架,通过随机生成的噪声 z 1 − 5 z_{1-5} z15,经过4个解码器,映射为4个参数: α , β , γ , θ \alpha,\beta,\gamma,\theta α,β,γ,θ,分别代表控制生成身份、表情、光照、姿态的变量,这些变量与3DMM模型生成3D人脸的参数有关, ε \varepsilon ε是一个噪声变量,用于增加生成人脸的多样性。将这5个参数: α , β , γ , θ , ε \alpha,\beta,\gamma,\theta,\varepsilon α,β,γ,θ,ε输入到生成器中,即可生成一个逼真的人脸。

如何训练这个生成器是一个问题,先提及一下编码器 V 1 − 4 V_{1-4} V14的训练,从人脸数据库中提取各个人脸图片,使用一个R-Net网络提取模型的3DMM参数,用这些参数分别训练4个自编码网络,然后保留四个网络的解码器部分,这样即可生成潜在的随机噪声 z 1 − 4 z_{1-4} z14,生成对应的参数。

image-20210507091305583

首先先简单介绍下前面一般的训练方式,具体包括对抗损失和模仿损失:

在这里插入图片描述

对抗损失即判断图像的真假:
V ( D , G ) = E x ∼ p d a t a [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ] V(D,G)=\mathbb{E}_{x\sim p_{data}}[\log D(x)]+\mathbb{E}_{z\sim p_{z}(z)}[\log(1-D(G(z))] V(D,G)=Expdata[logD(x)]+Ezpz(z)[log(1D(G(z))]
模仿损失,即将生成的图像尽可能与3DMM人脸模型相似,主要包括身份、 表情姿态、光线与色彩。
l I i d ( x ) = max ⁡ ( 1 − < f i d ( x ) , f i d ( x ^ ) > − τ , 0 ) l_{I}^{id}(x)=\max (1-<f_{id}(x),f_{id}(\hat x)>-\tau,0) lIid(x)=max(1<fid(x),fid(x^)>τ,0)

l I l m ( x ) = ∥ p ( x ) − p ^ ∥ 2 l_{I}^{lm}(x)=

p(x)p^
^{2} lIlm(x)=p(x)p^2

l I s h ( x ) = ∣ γ ( x ) − γ ^ ∣ 1 l_{I}^{sh}(x)=

|γ(x)γ^|
_{1} lIsh(x)=γ(x)γ^1

l I c l = ∣ c ( x ) − c ( x ^ ) ∣ 1 l_{I}^{cl}=

|c(x)c(x^)|
_{1} lIcl=c(x)c(x^)1

其中 f i d f_{id} fid是一个提取人脸身份信息的特征, < ⋅ , ⋅ > <·,·> <,>代表余弦相似度, p ( ) p() p()是一个检测3D人脸坐标的网络, γ \gamma γ是计算光照相关系数的函数, c c c是计算人脸区域平均色彩的函数,在3DMM模型中有定义。

除了对抗损失和模仿学习外,该论文引入了对比学习

image-20210507204011332

因为人脸生成模型中,需要4个主要的变量 α , β , γ , θ \alpha,\beta,\gamma,\theta α,β,γ,θ,所以任意改变其中一个变量的初始噪声 z k z_{k} zk,而其他的噪声 z i z_{i} zi保持不变。我们只需要惩罚两张生成图像中因为其他变量 z i z_{i} zi而产生的不同,而 z k z_{k} zk产生的不同则不惩戒。例如我仅改变了光照不同,则生成图像中光照不同的差异不计入考虑,而身份,表情等信息的更变将惩戒模型。

通过这样的方式,引入对比学习,尽可能让各个变量对生成模型的控制相互独立,使得模型在变量 z k z_{k} zk改变时,变化不那么敏感。

实证发现,表情和光照可以导致满意的解纠缠解耦合,而姿态变化不需要对比损失。

参考

[1] Ekin Tiu, Understanding Contrastive Learning

[2] Ankesh Anand, Contrastive Self-Supervised Learning

[3] Ram Sagar, What Is Contrastive Learning?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/595942
推荐阅读
相关标签
  

闽ICP备14008679号