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

对比表征学习

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

对比学习的训练目标

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

对比损失

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

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

L c o n t ( x i , x j , θ ) = 1 [ y i = y j ] ∣ ∣ f θ ( x i ) − f θ ( x j ) ∣ ∣ 2 2 + 1 [ y i ≠ y j ] m a x ( 0 , ϵ − ∣ ∣ f θ ( x i ) − f θ ( x j ) ∣ ∣ 2 ) 2 L_{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)^2 Lcont(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),作者将其用于学习不同姿态与角度下相同行人的面部。
在这里插入图片描述

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

L t r i p l e t ( x , x + , x − ) = ∑ x ∈ χ m a x ( 0 , ∣ ∣ f ( x ) − f ( x + ) ∣ ∣ 2 2 − ∣ ∣ f ( x ) − f ( x − ) ∣ ∣ 2 2 + ϵ ) 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内的所有样本对之间的相关关系,获得了更好的计算效率。
在这里插入图片描述

定义 D i j = ∣ f ( x i ) − f ( x j ) ∣ 2 D_{ij}=|f(x_i)-f(x_j)|_2 Dij=f(xi)f(xj)2,那么结构化的损失函数可被定义为:
L s t r u c t = 1 2 ∣ P ∣ ∑ ( i , j ) ∈ P m a x ( 0 , L s t r u c t ( i j ) ) 2 L_{struct}=\frac{1}{2|P|}\sum_{(i,j)\in P}max(0,L_{struct}^{(ij)})^2 Lstruct=2∣P1(i,j)Pmax(0,Lstruct(ij))2
where L s t r u c t ( i j ) = D i j + m a x ( m a x ( i , k ) ∈ N   ϵ − D i k , m a x ( j , l ) ∈ N   ϵ − D j l ) 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)
其中 P P P为正样本对的集合, N N N为负样本对的集合。稠密样本对平方距离矩阵 D D D的计算可以分解在每个训练batch之中。

红色 \color{red}{红色} 红色部分是用于挖掘难于分类的负样本(hard negatives)。但是其不够光滑,可能造成收敛到一个较差的局部最优。因此,可修改为:
L s t r u c t = D i j + l o g ( ∑ ( i , k ) ∈ N e x p ( ϵ − D i k ) + ∑ ( j , l ) ∈ N e x p ( ϵ − D j l ) ) 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 + , x 1 − , . . . , x N − 1 − {x,x^+,x_1^-,...,x_{N-1}^-} x,x+,x1,...,xN1,该元组包含一个正样本和 N − 1 N-1 N1个负样本,N-pair loss定义为:

L N − p a i r ( x , x + , { x i − } i = 1 N − 1 ) = l o g ( 1 + ∑ i = 1 N − 1 e x p ( f ( x ) T f ( x i − ) − f ( x ) T f ( 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+)))

= − l o g e x p ( f ( x ) T f ( x + ) ) e x p ( f ( x ) T f ( x + ) ) + ∑ i = 1 N − 1 e x p ( f ( x ) T f ( x i − ) ) =-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年提出。其思想是通过逻辑回归来区分噪声和目标数据。了解更多

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

l θ ( u ) = l o g p θ ( u ) q ( u ) = l o g p θ ( u ) − l o g q ( 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函数将其转为概率,便可使用交叉熵进行优化:

L N C E = − 1 N ∑ i = 1 N [ l o g σ ( l θ ( x i ) ) + l o g ( 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 ) = 1 1 + e x p ( − 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启发,其使用分类交叉熵损失从一组不相关的噪声样本中识别出正样本。

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

p ( C = p o s ∣ X , c ) = p ( x p o s ∣ c ) ∏ i = 1 , … , N ; i ≠ p o s p ( x i ) ∑ j = 1 N [ p ( x j ∣ c ) ∏ i = 1 , … , N ; i ≠ j p ( x i ) ] = p ( x p o s ∣ c ) p ( x p o s ) ∑ j = 1 N p ( x j ∣ c ) p ( x j ) = f ( x p o s , c ) ∑ j = 1 N f ( x j , 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 ( x p o s ) ∏ i = 1 , … , N ; i ≠ p o s p ( x i ) = 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优化正确分类正样本的负对数概率:

L I n f o N C E = − E [ l o g f ( x , c ) ∑ x ′ ∈ X f ( 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),这涉及到互信息优化。为了最大化输入 x x x与上下文向量 c c c之间的互信息,我们有:

I ( x ; c ) = ∑ x , c p ( x , c ) l o g p ( x , c ) p ( x ) p ( c ) = ∑ x , c p ( x , c ) l o g p ( 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)

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

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

f k ( x t + k , c t ) = e x p ( z t + k T W k c t ) ∝ p ( x t + k ∣ c t ) p ( x t + 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 为正比符号

z t + k z_{t+k} zt+k为被编码的输入, W k W_k Wk是可训练的权重矩阵。

Soft-Nearest Neighbors Loss

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

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

L s n n = − 1 B ∑ i = 1 B l o g ∑ i ≠ j , y i = y j , j = 1 , … , B e x p ( − f ( x i , x j ) / τ ) ∑ i ≠ k , k = 1 , … , B e x p ( − f ( x i , x k ) / τ ) 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中给出的步骤,令 p d a t a ( . ) p_{data}(.) pdata(.) R n \mathbb{R}^n Rn域内的数据分布, p p o s ( . , . ) p_{pos}(.,.) ppos(.,.) R n × n \mathbb{R}^{n\times n} Rn×n域内正样本对的分布。这两种分布应该满足以下条件:

  • 对称性: ∀ x , x + , p p o s ( x , x + ) = p p o s ( x + , x ) \forall x,x^+,p_{pos}(x,x^+)=p_{pos}(x^+,x) x,x+,ppos(x,x+)=ppos(x+,x)
  • 边缘匹配: ∀ x , ∫ p p o s ( x , x + ) d x + = p d a t a ( 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),对比学习的目标为如下形式:

L c o n t r a s t i v e = E ( x , x + ) ∼ p p o s , { x i − } i = 1 M i . i . d ∼ p d a t a [ − l o g e x p ( f ( x ) T f ( x + ) / τ ) e x p ( f ( x ) T f ( x + ) / τ ) + ∑ i = 1 M e x p ( f ( x ) T ) f ( x i − ) / τ ] 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 + ) ∼ p p o s , { x i − } i = 1 M i . i . d ∼ p d a t a [ − f ( x ) T f ( x + ) / τ + l o g ( ∑ i = 1 M e x p ( f ( x ) T f ( x i − ) / τ ) ) ] \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 + ) ∼ p p o s f ( x ) T f ( x + ) + E x ∼ p d a t a [ l o g E x − ∼ p d a t a [ ∑ i = 1 M e x p ( f ( x ) T f ( x i − ) / τ ) ] ] =-\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)/τ)]]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值