赞
踩
对比学习是一种机器学习技术,通过训练模型哪些数据点相似或不同,来学习没有标签的数据集的一般特征。
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),例如在原本的有监督任务中,我们仅仅是通过大规模样本的数据训练一个表征的模型,这个模型只关注于在样本下猫的特征,而缺少了关注类之间不同的高级特征。
本质上,对比学习允许我们的机器学习模型做同样的事情。在进行分类或分割等任务之前,它会查看哪些数据点是“相似的”和“不同的”,以便了解数据的更高层次的特征。
为什么对比学习如此强大?因为我们可以在无任何标注或标签的情况下,训练一个模型来学习数据的许多特性,这也是一个术语自监督学习,对比学习是一种自我监督学习的范式。
为什么我们需要对比学习?或者说需要无监督、自监督或半监督学习?绝大多数情况下,例如人脸数据集,或者医学影像数据集,这些数据集都是大规模的数据集,我们往往无法,或者没有精力、代价去将全部的数据集都作标注。通过网络爬虫等手段我们可以很快的采集相当数量的人脸数据集,然而将相当数量的图片做上标注在时间上是困难的;医学影像数据往往需要专业人士花费无数的时间来手动进行分类,分割。因此我们是否可以通过对比学习,在数据仅有一部分标注的情况下,依然能使模型学习到相当好的效果。
先举一个例子,是Epstein在2016年做的一个实验,要求实验人员尽可能绘制一张美元的钞票。下图左侧是凭借之前的记忆绘制的美元,右图为给了实验人员一张真实的美元货币对比绘制的。可见,在有没有真实钞票作为对照物的情况下,美元的绘制结果是不一样的。
最终实验的结果想证明的是,人们很多次的见过美元的照片,但并没有完完整整地记住它的细节。事实上,我们仅保留了足够的High-level特征,便可以用于区别其他的物体。而目前有监督学习分类方法常常关注于像素级细节的表示学习上,是否可以构建一个不关注于像素级别的表示学习方法,仅靠编码高级的特征即可有效地区分不同的物体。
当代的自监督学习的方法大致可以分为两类,一种是生成式的,另一种是对比式的。
生成式的网络,例如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}}[
其中 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}
不难看出,这些多是关注于像素级的损耗,而非高级的特征区别。
对比学习,则是通过对比肯定与否定的例子在学习模型的表达。
关注点 [2]:
它们不同于更传统的生成式表征学习方法,后者侧重于像素空间的重构误差来学习表征。
对比学习的一般表达方式,对于任何的数据点 x x x,对比学习方法目的在于学习一个编码器 f f f:
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=1N−1exp(f(x)Tf(xj))exp(f(x)Tf(x+))]
分母项由一个正样本和 N − 1 N - 1 N−1个负样本组成。这里,我们使用点积作为分数函数:
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 loss和ranking-based NCE。
以 CVPR 2020 Oral 一篇人脸生成的文章为例,该方法也称为 DiscoFaceGAN :
仅从实现的角度看这篇文章,不讨论其优缺点以及该领域的发展情况,该方法的整体框图如下所示:
右边绿色框内的即是其的生成框架,通过随机生成的噪声 z 1 − 5 z_{1-5} z1−5,经过4个解码器,映射为4个参数: α , β , γ , θ \alpha,\beta,\gamma,\theta α,β,γ,θ,分别代表控制生成身份、表情、光照、姿态的变量,这些变量与3DMM模型生成3D人脸的参数有关, ε \varepsilon ε是一个噪声变量,用于增加生成人脸的多样性。将这5个参数: α , β , γ , θ , ε \alpha,\beta,\gamma,\theta,\varepsilon α,β,γ,θ,ε输入到生成器中,即可生成一个逼真的人脸。
如何训练这个生成器是一个问题,先提及一下编码器 V 1 − 4 V_{1-4} V1−4的训练,从人脸数据库中提取各个人脸图片,使用一个R-Net网络提取模型的3DMM参数,用这些参数分别训练4个自编码网络,然后保留四个网络的解码器部分,这样即可生成潜在的随机噪声 z 1 − 4 z_{1-4} z1−4,生成对应的参数。
首先先简单介绍下前面一般的训练方式,具体包括对抗损失和模仿损失:
对抗损失即判断图像的真假:
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)=Ex∼pdata[logD(x)]+Ez∼pz(z)[log(1−D(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)=
l
I
s
h
(
x
)
=
∣
γ
(
x
)
−
γ
^
∣
1
l_{I}^{sh}(x)=
l
I
c
l
=
∣
c
(
x
)
−
c
(
x
^
)
∣
1
l_{I}^{cl}=
其中 f i d f_{id} fid是一个提取人脸身份信息的特征, < ⋅ , ⋅ > <·,·> <⋅,⋅>代表余弦相似度, p ( ) p() p()是一个检测3D人脸坐标的网络, γ \gamma γ是计算光照相关系数的函数, c c c是计算人脸区域平均色彩的函数,在3DMM模型中有定义。
除了对抗损失和模仿学习外,该论文引入了对比学习:
因为人脸生成模型中,需要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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。