> 文章列表 > Contrastive Representation Learning 对比表征学习 (一) 对比训练目标

Contrastive Representation Learning 对比表征学习 (一) 对比训练目标

Contrastive Representation Learning 对比表征学习 (一) 对比训练目标

原文翻译自这里

对比表征学习

对比表征学习的目标是去学习一种嵌入空间(embedding space),在该空间中,具有潜在相似性的样本对彼此相距较近,而不够相似的样本对彼此疏远。对比学习可以被应用于监督与无监督相关任务中。对于涉及到无监督数据的工作,对比学习是自监督学习研究中最有效的方法之一。

对比学习的训练目标

早期用于对比学习的损失函数,只涉及到一个正样本和一个负样本。最近对于训练目标的设计趋势是在一个训练batch中包含多个正负样本对

对比损失

对比损失是最早用于深度度量学习的训练目标函数之一。

已知一组输入样本{xi}\\{x_{i}\\}{xi},每个样本都有一个对应的类别标签yi∈{1,…,L}y_i\\in\\{1,\\dots,L\\}yi{1,,L},类别范围为LLL个类内。我们希望学习一个函数fθ(.):χ→Rdf_{\\theta}(.):\\chi\\rightarrow\\mathbb{R}^dfθ(.):χRd,该函数将xix_ixi编码为嵌入向量(embedding vector),以使得来自相同类别的样本具有相似的嵌入形式(embedding),而来自不同类别的样本其形式尽可能不同。因此,对比损失获取一对输入(xi,xj)(x_i,x_j)(xi,xj),当两者属于相同类别时最小化嵌入距离,否则便最大化。

Lcont(xi,xj,θ)=1[yi=yj]∣∣fθ(xi)−fθ(xj)∣∣22+1[yi≠yj]max(0,ϵ−∣∣fθ(xi)−fθ(xj)∣∣2)2L_{cont}(x_i,x_j,\\theta)=\\mathbb{1}[y_i=y_j]||f_\\theta(x_i)-f_\\theta(x_j)||_2^2+\\mathbb{1}[y_i\\neq y_j]max(0,\\epsilon-||f_\\theta(x_i)-f_\\theta(x_j)||_2)^2Lcont(xi,xj,θ)=1[yi=yj]∣∣fθ(xi)fθ(xj)22+1[yi=yj]max(0,ϵ∣∣fθ(xi)fθ(xj)2)2

其中ϵ\\epsilonϵ是超参数,它定义了不同类的样本之间的下限距离。1\\mathbb{1}1为指示函数。

三重损失(Triplet loss)

三重损失最初来源于FaceNet (Schroff et al. 2015),作者将其用于学习不同姿态与角度下相同行人的面部。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM5CHAFn-1681489820708)(./figs/triplet-loss.png)]

给定一锚点输入(anchor input)xxx,我们选择一个正样本x+x^+x+和一个负样本x−x^-xx+x^+x+表示其与xxx属于同一类,x−x^-x表示属于其他类的样本。三重损失使用以下损失函数来同时学习最小化xxxx+x^+x+的距离并最大化xxxx−x^-x的距离:

Ltriplet(x,x+,x−)=∑x∈χmax(0,∣∣f(x)−f(x+)∣∣22−∣∣f(x)−f(x−)∣∣22+ϵ)L_{triplet}(x,x^+,x^-)=\\sum_{x\\in\\chi}max(0,||f(x)-f(x^+)||_2^2-||f(x)-f(x^-)||_2^2+\\epsilon)Ltriplet(x,x+,x)=xχmax(0,∣∣f(x)f(x+)22∣∣f(x)f(x)22+ϵ)

其中参数ϵ\\epsilonϵ表示相似样本对与不相似样本对之间距离的最小偏移。
要想提升模型性能,选择一个合适的负样本x−x^-x非常重要。

提升结构损失(Lifted Structured Loss)

该损失函数(Song et al. 2015)利用了一个训练batch内的所有样本对之间的相关关系,获得了更好的计算效率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9GRzCjS-1681489820710)(./figs/lifted-structured-loss.png =400x300)]

定义Dij=∣f(xi)−f(xj)∣2D_{ij}=|f(x_i)-f(x_j)|_2Dij=f(xi)f(xj)2,那么结构化的损失函数可被定义为:
Lstruct=12∣P∣∑(i,j)∈Pmax(0,Lstruct(ij))2L_{struct}=\\frac{1}{2|P|}\\sum_{(i,j)\\in P}max(0,L_{struct}^{(ij)})^2Lstruct=2∣P1(i,j)Pmax(0,Lstruct(ij))2
where Lstruct(ij)=Dij+max(max(i,k)∈Nϵ−Dik,max(j,l)∈Nϵ−Djl)L_{struct}^{(ij)}=D_{ij}+ \\color{red}{max( max_{(i,k)\\in N} \\ \\epsilon-D_{ik}, max_{(j,l)\\in N}\\ \\epsilon-D_{jl} )}Lstruct(ij)=Dij+max(max(i,k)N ϵDik,max(j,l)N ϵDjl)
其中PPP为正样本对的集合,NNN为负样本对的集合。稠密样本对平方距离矩阵DDD的计算可以分解在每个训练batch之中。

红色\\color{red}{红色}红色部分是用于挖掘难于分类的负样本(hard negatives)。但是其不够光滑,可能造成收敛到一个较差的局部最优。因此,可修改为:
Lstruct=Dij+log(∑(i,k)∈Nexp(ϵ−Dik)+∑(j,l)∈Nexp(ϵ−Djl))L_{struct}=D_{ij}+log(\\sum_{(i,k)\\in N}exp(\\epsilon-D_{ik})+\\sum_{(j,l)\\in N}exp(\\epsilon-D_{jl}))Lstruct=Dij+log((i,k)Nexp(ϵDik)+(j,l)Nexp(ϵDjl))

该论文还提出给定几个随机正样本对,通过主动加入复杂负样本来增强每个batch负样本的质量。

N-pair Loss

Multi-Class N-pair loss (Sohn 2016)对triplet loss进行泛化,其包含了与多个负样本的比较。

给定一个长(N+1)(N+1)(N+1)的训练样本元组,x,x+,x1−,...,xN−1−{x,x^+,x_1^-,...,x_{N-1}^-}x,x+,x1,...,xN1,该元组包含一个正样本和N−1N-1N1个负样本,N-pair loss定义为:

LN−pair(x,x+,{xi−}i=1N−1)=log(1+∑i=1N−1exp(f(x)Tf(xi−)−f(x)Tf(x+)))L_{N-pair}(x,x^+,\\{x_i^-\\}_{i=1}^{N-1})=log(1+\\sum_{i=1}^{N-1}exp(f(x)^Tf(x_i^-)-f(x)^Tf(x^+)))LNpair(x,x+,{xi}i=1N1)=log(1+i=1N1exp(f(x)Tf(xi)f(x)Tf(x+)))

=−logexp(f(x)Tf(x+))exp(f(x)Tf(x+))+∑i=1N−1exp(f(x)Tf(xi−))=-log\\frac{exp(f(x)^Tf(x^+))}{exp(f(x)^Tf(x^+))+\\sum_{i=1}^{N-1}exp(f(x)^Tf(x_i^-))}=logexp(f(x)Tf(x+))+i=1N1exp(f(x)Tf(xi))exp(f(x)Tf(x+))

如果我们对每个类别只采样一个负样本,它就等价于多类别分类的softmax损失。

NCE

Noise Contrastive Estimation, 简称NCE,是一种用于估计统计模型参数的模型。该模型由Gutmann 和 Hyvarinen于2010年提出。其思想是通过逻辑回归来区分噪声和目标数据。了解更多

xxx为目标样本∼P(x∣C=1;θ)=pθ(x)\\sim P(x|C=1;\\theta)=p_{\\theta}(x)P(xC=1;θ)=pθ(x),并令x˜\\~xx˜为噪声样本∼P(x˜∣C=0)=q(x˜)\\sim P(\\~x|C=0)=q(\\~x)P(x˜C=0)=q(x˜)
注意这里是从目标数据分布中对样本以逻辑回归形式建模,不是从噪声分布中建模:

lθ(u)=logpθ(u)q(u)=logpθ(u)−logq(u)l_{\\theta}(u)=log\\frac{p_{\\theta}(u)}{q(u)}=logp_{\\theta}(u)-logq(u)lθ(u)=logq(u)pθ(u)=logpθ(u)logq(u)

使用sigmoid函数将其转为概率,便可使用交叉熵进行优化:

LNCE=−1N∑i=1N[logσ(lθ(xi))+log(1−σ(lθ(x˜i)))]L_{NCE}=-\\frac{1}{N}\\sum_{i=1}^{N}[log\\sigma(l_{\\theta}(x_i))+log(1-\\sigma(l_{\\theta}(\\~x_{i})))]LNCE=N1i=1N[logσ(lθ(xi))+log(1σ(lθ(x˜i)))]

where σ(l)=11+exp(−l)=pθpθ+q\\sigma(l)=\\frac{1}{1+exp(-l)}=\\frac{p_{\\theta}}{p_{\\theta}+q}σ(l)=1+exp(l)1=pθ+qpθ

这里给出NCE loss 的原始部分是因为后续的改进也是将单正负样本改为单正样本多负样本。

InfoNCE

InfoNCE loss受NCE启发,其使用分类交叉熵损失从一组不相关的噪声样本中识别出正样本。

给定一个上下文向量ccc,那么正样本可从条件分布p(x∣c)p(x|c)p(xc)中抽取出来,同时,可从p(x)p(x)p(x)中抽取出N−1N-1N1个负样本,其中负样本独立于上下文向量ccc。简单来讲,我们将所有样本标注为X={xi}i=1NX=\\{x_i\\}_{i=1}^NX={xi}i=1N,其中只存在一个正样本xposx_{pos}xpos。那么我们正确找到正样本的概率为:

p(C=pos∣X,c)=p(xpos∣c)∏i=1,…,N;i≠posp(xi)∑j=1N[p(xj∣c)∏i=1,…,N;i≠jp(xi)]=p(xpos∣c)p(xpos)∑j=1Np(xj∣c)p(xj)=f(xpos,c)∑j=1Nf(xj,c)p(C=pos|X,c)=\\frac{p(x_{pos}|c)\\prod_{i=1,\\dots,N;i\\neq pos}p(x_i)}{\\sum_{j=1}^{N}[p(x_j|c)\\prod_{i=1,\\dots,N;i\\neq j}p(x_i)]}=\\frac{\\frac{p(x_{pos|c})}{p(x_{pos})}}{\\sum_{j=1}^N\\frac{p(x_j|c)}{p(x_j)}}=\\frac{f(x_{pos},c)}{\\sum_{j=1}^Nf(x_j,c)}p(C=posX,c)=j=1N[p(xjc)i=1,,N;i=jp(xi)]p(xposc)i=1,,N;i=posp(xi)=j=1Np(xj)p(xjc)p(xpos)p(xposc)=j=1Nf(xj,c)f(xpos,c)

p(xpos)∏i=1,…,N;i≠posp(xi)=1(必然事件)p(x_{pos})\\prod_{i=1,\\dots,N;i\\neq pos}p(x_i)=1(必然事件)p(xpos)i=1,,N;i=posp(xi)=1(必然事件)

这里用f(x,c)f(x,c)f(x,c)表示p(x∣c)p(x)\\frac{p(x|c)}{p(x)}p(x)p(xc)

InfoNCE loss优化正确分类正样本的负对数概率:

LInfoNCE=−E[logf(x,c)∑x′∈Xf(x′,c)]L_{InfoNCE}=-\\mathbb{E}[log\\frac{f(x,c)}{\\sum_{x'\\in X}f(x',c)}]LInfoNCE=E[logxXf(x,c)f(x,c)]

f(x,c)f(x,c)f(x,c)估计密度比例p(x∣c)p(x)\\frac{p(x|c)}{p(x)}p(x)p(xc),这涉及到互信息优化。为了最大化输入xxx与上下文向量ccc之间的互信息,我们有:

I(x;c)=∑x,cp(x,c)logp(x,c)p(x)p(c)=∑x,cp(x,c)logp(x∣c)p(x)I(x;c)=\\sum_{x,c}p(x,c)log\\frac{p(x,c)}{p(x)p(c)}=\\sum_{x,c}p(x,c)log\\color{blue}{\\frac{p(x|c)}{p(x)}}I(x;c)=x,cp(x,c)logp(x)p(c)p(x,c)=x,cp(x,c)logp(x)p(xc)

这里蓝色的对数项可由fff估计得到。

对于序列预测任务,CPC不直接对未来观测pk(xt+k∣ct)p_k(x_{t+k}|c_t)pk(xt+kct)进行建模,而是通过对密度函数建模来保存xt+kx_{t+k}xt+kctc_tct之间的互信息:

fk(xt+k,ct)=exp(zt+kTWkct)∝p(xt+k∣ct)p(xt+k)f_k(x_{t+k},c_t)=exp(z_{t+k}^TW_{kc_t})\\propto \\frac{p(x_{t+k}|c_t)}{p(x_{t+k})}fk(xt+k,ct)=exp(zt+kTWkct)p(xt+k)p(xt+kct)

∝\\propto为正比符号

zt+kz_{t+k}zt+k为被编码的输入,WkW_kWk是可训练的权重矩阵。

Soft-Nearest Neighbors Loss

该损失函数从单正样本扩展到多个正样本。(Salakhutdinov & Hinton 2007, Frosst et al. 2019)

给定一组样本,{(xi,yi)}i=1B\\{(x_i,y_i)\\}_{i=1}^B{(xi,yi)}i=1B,其中yiy_iyixix_ixi的类别标签,函数f(.,.)f(.,.)f(.,.)用于度量两个输入的相似程度。位于温度系数τ\\tauτ下的soft nearest neighbor loss定义为:

Lsnn=−1B∑i=1Blog∑i≠j,yi=yj,j=1,…,Bexp(−f(xi,xj)/τ)∑i≠k,k=1,…,Bexp(−f(xi,xk)/τ)L_{snn}=-\\frac{1}{B}\\sum_{i=1}^Blog\\frac{\\sum_{i\\neq j, y_i=y_j,j=1,\\dots,B}exp(-f(x_i,x_j)/\\tau)}{\\sum_{i\\neq k, k=1,\\dots,B}exp(-f(x_i,x_k)/\\tau)}Lsnn=B1i=1Blogi=k,k=1,,Bexp(f(xi,xk)/τ)i=j,yi=yj,j=1,,Bexp(f(xi,xj)/τ)

温度系数τ\\tauτ调整表征空间中特征分布的疏密。想象一下胖瘦高斯分布。
低温时,概率分布更紧凑。模型对负样本的关注会减少。

一般设定(Common Setup)

在软近邻损失(Soft Nearest-neighbor loss)中,我们可以适度放松对类别和标签的定义以在无监督的数据之外创造更多的正负样本对。比如,应用数据增强来生成原始数据的噪声版本

目前大多数方法都遵循以下关于对比学习目标的定义来引入多种正负样本。通过Wang & Isola 2020中给出的步骤,令pdata(.)p_{data}(.)pdata(.)Rn\\mathbb{R}^nRn域内的数据分布,ppos(.,.)p_{pos}(.,.)ppos(.,.)Rn×n\\mathbb{R}^{n\\times n}Rn×n域内正样本对的分布。这两种分布应该满足以下条件:

  • 对称性:∀x,x+,ppos(x,x+)=ppos(x+,x)\\forall x,x^+,p_{pos}(x,x^+)=p_{pos}(x^+,x)x,x+,ppos(x,x+)=ppos(x+,x)
  • 边缘匹配:∀x,∫ppos(x,x+)dx+=pdata(x)\\forall x, \\int p_{pos}(x,x^+)dx^+=p_{data}(x)x,ppos(x,x+)dx+=pdata(x)

为了学到一个能够学到L2-normalized特征向量的编码器f(x)f(x)f(x),对比学习的目标为如下形式:

Lcontrastive=E(x,x+)∼ppos,{xi−}i=1Mi.i.d∼pdata[−logexp(f(x)Tf(x+)/τ)exp(f(x)Tf(x+)/τ)+∑i=1Mexp(f(x)T)f(xi−)/τ]L_{contrastive}=\\mathbb{E}_{(x,x^+)\\sim p_{pos},\\{x_i^-\\}_{i=1}^{Mi.i.d}\\sim p_{data}}[-log\\frac{exp(f(x)^Tf(x^+)/\\tau)}{exp(f(x)^Tf(x^+)/\\tau)+\\sum_{i=1}^Mexp(f(x)^T)f(x_i^-)/\\tau}]Lcontrastive=E(x,x+)ppos,{xi}i=1Mi.i.dpdata[logexp(f(x)Tf(x+)/τ)+i=1Mexp(f(x)T)f(xi)/τexp(f(x)Tf(x+)/τ)]

≈E(x,x+)∼ppos,{xi−}i=1Mi.i.d∼pdata[−f(x)Tf(x+)/τ+log(∑i=1Mexp(f(x)Tf(xi−)/τ))]\\approx \\mathbb{E}_{(x,x^+)\\sim p_{pos},\\{x_i^-\\}_{i=1}^{M i.i.d}\\sim p_{data}[-f(x)^Tf(x^+)/\\tau+log(\\sum_{i=1}^{M}exp(f(x)^Tf(x_i^-)/\\tau))]}E(x,x+)ppos,{xi}i=1Mi.i.dpdata[f(x)Tf(x+)/τ+log(i=1Mexp(f(x)Tf(xi)/τ))]

=−1τE(x,x+)∼pposf(x)Tf(x+)+Ex∼pdata[logEx−∼pdata[∑i=1Mexp(f(x)Tf(xi−)/τ)]]=-\\frac{1}{\\tau}\\mathbb{E}_{(x,x^+)\\sim p_{pos}}f(x)^Tf(x^+)+\\mathbb{E}_{x\\sim p_{data}}[log\\mathbb{E}_{x^-\\sim p_{data}}[\\sum_{i=1}^Mexp(f(x)^Tf(x_i^-)/\\tau)]]=τ1E(x,x+)pposf(x)Tf(x+)+Expdata[logExpdata[i=1Mexp(f(x)Tf(xi)/τ)]]

读书笔记