引言
InfoNCE对比学习损失是学习句嵌入绕不开的知识点,本文就从头开始来探讨一下它是怎么来的。
先验知识
数学期望与大数定律
期望(expectation,expected value,数学期望,mathematical expectation)是随机变量的平均值,即在概率意义下的“中心”。
对于离散型随机变量 X X X,其期望定义为:
E [ X ] = ∑ i x i P ( X = x i ) \Bbb E[X] = \sum_{i} x_i P(X = x_i) E[X]=i∑xiP(X=xi)
即随机变量 X X X 所有可能结果的加权平均值,其中权重由每个给定值的概率给出。
对于连续型随机变量 X X X,其期望定义为:
E [ X ] = ∫ − ∞ ∞ x f ( x ) d x \Bbb E[X] = \int_{-\infty}^{\infty} x f(x) dx E[X]=∫−∞∞xf(x)dx
大数定律(Law of large numbers,大数法则、大数律)是描述相当多次数重复实验的结果的定律。根据这个定律知道,样本数量越多,则其算术平均值就有越高的概率接近期望。
算术平均值即我们常说的均值、平均数,通过一组样本除以样本的个数计算。
大数定律主要有两种表现形式:弱大数定律和强大数定律。
定义样本均值为:
X ‾ n = 1 n ∑ i = 1 n X i \overline X_n = \frac{1}{n} \sum_{i=1}^n X_i Xn=n1i=1∑nXi
弱大数定律表明,当 n → ∞ n \rightarrow \infty n→∞ 时,样本均值 X ‾ n \overline X_n Xn 依概率收敛到期望 E [ X ] \Bbb E[X] E[X],对于任意正数 ϵ \epsilon ϵ ,
lim n → ∞ p ( ∣ X ‾ n − E [ X ] ∣ > ϵ ) = 0 \lim_{n \rightarrow \infty} p( |\overline X_n - \Bbb E[X]| > \epsilon) = 0 n→∞limp(∣Xn−E[X]∣>ϵ)=0
强大数定律进一步指出,样本均值几乎必然(以概率1收敛)于期望:
p ( lim n → ∞ X ‾ n = E [ X ] ) = 1 p(\lim_{n \rightarrow \infty} \overline X_n = \Bbb E[X]) = 1 p(n→∞limXn=E[X])=1
依概率收敛一个随机变量序列 ( X n ) n ≥ 1 (X_n)_{n \geq 1} (Xn)n≥1 依概率收敛到某一个随机变量 X X X ,指的是 X n X_n Xn 和 X X X 之间存在一定差距的可能性将会随着 n n n 的增大而趋向于零。
大数定律证明了样本均值会逼近随机变量的期望,说明了期望是随机变量的一个稳定性特征,是大量观测的平均结果。
自信息
自信息(self-information,香农信息,information content)指的是当我们接收到一个消息时所获得的信息量。
对于一个事件,其自信息大小与该事件发生的概率相关。
自信息可以解释为量化特定结果的意外程度。
香农对自信息的定义为了满足几个公理:
- 概率为100%的事件完全不足为奇,不会产生任何信息。
- 事件发生的可能性越小,它就越令人惊讶,产生的信息就越多。
- 如果分别测量两个独立事件,信息总量是两个事件的自信息之和。
直观地说,从观察意外事件中可以获得更多的信息——它是“令人惊讶的”。比如,如果彩票中特等奖的概率是五百万分之一,那么你从得知你的朋友张三中奖中获得的信息比TA不中奖的信息多得多。
可以证明,满足这三个公理的概率函数是唯一的,且仅差一个乘法缩放因子。一般来说,给定一个实数 b > 1 b > 1 b>1和一个概率为 P P P 的事件 x x x,自信息定义如下:
I ( x ) : = − log b [ Pr ( x ) ] = − log b ( P ) \text{I}(x) := -\log_b [\text{Pr}(x)] = -\log_b (P) I(x):=−logb[Pr(x)]=−logb(P)
基数 b b b 对应上面的缩放因子,不同的选择对应不同的信息单位:当 b = 2 b = 2 b=2 时,单位是香农,通常称为”位“。
− log 2 ( x ) -\log_2(x) −log2(x)的图像如上图所示,在概率范围内是正数。
正式地,给定一个具有概率质量函数 p X ( x ) p_X(x) pX(x) 的离散随机变量,其自信息定义为:
I X ( x ) : = − log [ p X ( x ) ] = log ( 1 p X ( x ) ) \text{I}_X(x) := -\log[p_X(x)] = \log \left( \frac{1}{p_X(x)}\right) IX(x):=−log[pX(x)]=log(pX(x)1)
与对数发生率的关系
对数发生率(logit, log-odds)定义为 p ( x ) 1 − p ( x ) \frac{p(x)}{1-p(x)} 1−p(x)p(x),可以表示为两个自信息的差值:
log-odds ( x ) = log p ( x ) p ( ¬ x ) = log p ( x ) − log ( p ( ¬ x ) ) = − I ( x ) + I ( ¬ x ) = I ( ¬ x ) − I ( x ) \begin{aligned} \text{log-odds}(x) &= \log \frac{p(x)}{ p(¬x)} \\ &= \log p(x) - \log (p(¬x)) \\ &= -\text{I}(x) + \text{I}(¬x) \\ &= \text{I}(¬x) -\text{I}(x) \end{aligned} log-odds(x)=logp(¬x)p(x)=logp(x)−log(p(¬x))=−I(x)+I(¬x)=I(¬x)−I(x)
独立事件的可加性
第3条时候如果分别测量两个独立事件,信息总量是两个事件的自信息之和。
考虑两个独立随机变量,分别具有概率质量函数 p X ( x ) p_X(x) pX(x) 和 p Y ( y ) p_Y(y) pY(y) ,联合概率质量函数为:
p X , Y ( x , y ) = P ( X = x , Y = y ) = p X ( x ) p Y ( y ) p_{X,Y}(x,y) = P(X=x,Y=y)=p_X(x)p_Y(y) pX,Y(x,y)=P(X=x,Y=y)=pX(x)pY(y)
因为 X X X 和 Y Y Y 是独立的, ( x , y ) (x,y) (x,y) 的自信息为
I X , Y ( x , y ) = − log [ p X , Y ( x , y ) ] = − log [ p X ( x ) p Y ( y ) ] = − log p X ( x ) − log p Y ( y ) = I X ( x ) + I Y ( y ) \begin{aligned} \text{I}_{X,Y}(x,y) &= -\log[p_{X,Y}(x,y)] \\ &= -\log [p_X(x) p_Y(y)] \\ &= -\log p_X(x) - \log p_Y(y) \\ &= \text{I}_X(x) + \text{I}_Y(y) \end{aligned} IX,Y(x,y)=−log[pX,Y(x,y)]=−log[pX(x)pY(y)]=−logpX(x)−logpY(y)=IX(x)+IY(y)
信息熵
信息论的核心思想是,所传达消息的“信息量”取决于消息内容的令人惊讶程度。如果发生极有可能的事件,则消息携带的信息非常少。另一方面,如果发生极不可能的事件,则消息提供的信息要多得多。这是上面介绍的自信息概念。
而信息熵(entropy,简称熵,又称信息熵、香农熵、平均自信息量)是接收的每条消息中包含的信息的平均量。这里的“消息”代表来自分布或数据流中的事件、样本或特征。熵量化了与变量的潜在状态或可能结果相关的不确定性或**(自)信息**的平均值(期望)。
离散型随机变量 X X X ,其值 x ∈ X x \in \mathcal X x∈X ,其熵定义如下:
H ( X ) = E [ I ( X ) ] = E [ − log p ( X ) ] = − ∑ x ∈ X p ( x ) log b p ( x ) H(X) = \Bbb E[\text{I}(X)] = \Bbb E[-\log p(X)] = -\sum_{x \in \mathcal X} p(x) \log_b p(x) H(X)=E[I(X)]=E[−logp(X)]=−x∈X∑p(x)logbp(x)
再来看联合熵和条件熵。
联合熵
对于两个离散随机变量 X X X 和 Y Y Y,定义域分别为 X \mathcal X X 和 Y \mathcal Y Y ,联合熵 H ( X , Y ) H(X, Y) H(X,Y) 表示 X X X 和 Y Y Y 一起的不确定性,其定义为:
H ( X , Y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log p ( x , y ) H(X, Y) = - \sum_{x \in \mathcal X} \sum_{y \in \mathcal Y} p(x, y) \log p(x, y) H(X,Y)=−x∈X∑y∈Y∑p(x,y)logp(x,y)
其中, p ( x , y ) p(x,y) p(x,y) 是 X X X 和 Y Y Y 同时取值为 x x x 和 y y y 的联合概率。
条件熵
还可以定义两个随机变量的条件熵,条件熵描述了已知随机变量 X X X 的前提下, 随机变量 Y Y Y 的信息熵还有多少。基于 X X X 条件的 Y Y Y 的信息熵,用 H ( Y ∣ X ) H(Y|X) H(Y∣X) 表示。
如果 H ( Y ∣ X = x ) H(Y|X=x) H(Y∣X=x) 为变量 Y Y Y 在变量 X X X 取特定值 x x x 条件下的熵,那么 H ( Y ∣ X ) H(Y|X) H(Y∣X) 就是 H ( Y ∣ X = x ) H(Y|X=x) H(Y∣X=x) 在 X X X 取遍所有可能的 x x x 后取平均的结果。
给定随机变量 X X X 与 Y Y Y ,定义域分别为 X \mathcal X X 和 Y \mathcal Y Y ,在给定 X X X 条件下 Y Y Y 的条件熵定义为:
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = − ∑ x ∈ X p ( x ) ∑ y ∈ Y p ( y ∣ x ) log p ( y ∣ x ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log p ( y ∣ x ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) log p ( x , y ) p ( x ) \begin{aligned} H(Y|X) &= \sum_{x \in \mathcal X} p(x) H(Y|X=x) \\ &= - \sum_{x \in \mathcal X} p(x)\sum_{y \in \mathcal Y} p(y|x) \log p(y|x) \\ &= - \sum_{x \in \mathcal X} \sum_{y \in \mathcal Y} p(x,y) \log p(y|x) \\ &= - \sum_{x \in \mathcal X, y \in \mathcal Y}p(x,y) \log \frac{p(x,y)}{p(x)} \end{aligned} H(Y∣X)=x∈X∑p(x)H(Y∣X=x)=−x∈X∑p(x)y∈Y∑p(y∣x)logp(y∣x)=−x∈X∑y∈Y∑p(x,y)logp(y∣x)=−x∈X,y∈Y∑p(x,y)logp(x)p(x,y)
还可由上述条件熵的定义得出条件熵的链式法则:
H ( Y ∣ X ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) log p ( x , y ) p ( x ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) ( log p ( x , y ) − log p ( x ) ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) log p ( x , y ) + ∑ x ∈ X , y ∈ Y p ( x , y ) log p ( x ) = H ( X , Y ) + ∑ x ∈ X , y ∈ Y p ( x , y ) log p ( x ) = H ( X , Y ) + ∑ x ∈ X p ( x ) log p ( x ) = H ( X , Y ) − H ( X ) \begin{aligned} H(Y|X) &= - \sum_{x \in \mathcal X, y \in \mathcal Y}p(x,y) \log \frac{p(x,y)}{p(x)} \\ &= - \sum_{x \in \mathcal X, y \in \mathcal Y}p(x,y)( \log p(x,y) - \log p(x)) \\ &=- \sum_{x \in \mathcal X, y \in \mathcal Y} p(x,y)\log p(x,y) + \sum_{x \in \mathcal X, y \in \mathcal Y} p(x,y) \log p(x) \\ &= H(X,Y) + \sum_{x \in \mathcal X, y \in \mathcal Y} p(x,y) \log p(x) \\ &= H(X,Y) + \sum_{x \in \mathcal X} p(x) \log p(x) \\ &= H(X,Y) - H(X) \end{aligned} H(Y∣X)=−x∈X,y∈Y∑p(x,y)logp(x)p(x,y)=−x∈X,y∈Y∑p(x,y)(logp(x,y)−logp(x))=−x∈X,y∈Y∑p(x,y)logp(x,y)+x∈X,y∈Y∑p(x,y)logp(x)=H(X,Y)+x∈X,y∈Y∑p(x,y)logp(x)=H(X,Y)+x∈X∑p(x)logp(x)=H(X,Y)−H(X)
即
H ( Y ∣ X ) = H ( X , Y ) − H ( X ) H(Y|X) = H(X,Y) - H(X) H(Y∣X)=H(X,Y)−H(X)
假设两个随机变量 X X X 和 Y Y Y 确定的组合系统的联合熵为 H ( X , Y ) H(X,Y) H(X,Y),即我们需要 H ( X , Y ) H(X,Y) H(X,Y) bit的信息来描述它的确切状态。 现在,若我们先学习 X X X 的值,我们得到了 H ( X ) H(X) H(X) bit的信息。 一旦知道了 X X X,我们只需 H ( X , Y ) − H ( X ) H(X,Y)−H(X) H(X,Y)−H(X)bits来描述整个系统的状态。
交叉熵
分布 Q Q Q 相对于分布 P P P 在给定集合 X \mathcal X X 上的交叉熵 H ( P , Q ) H(P,Q) H(P,Q) 定义如下:
H ( P , Q ) = − E P ( log Q ) = − ∑ x ∈ X P ( x ) log Q ( x ) H(P,Q) = -\Bbb E_P(\log Q) = -\sum_{x \in \mathcal X} P(x) \log Q(x) H(P,Q)=−EP(logQ)=−x∈X∑P(x)logQ(x)
其中 P P P是真实分布, Q Q Q 是估计分布。
交叉熵衡量的是 在真实分布 P P P 下,使用估计分布 Q Q Q 描述所带来的平均信息量,直观上,它可以理解为如果用 Q Q Q 代替 P P P 来描述事件,会带来多大的偏差。
相对熵
相对熵又称为 KL散度(Kullback-Leibler divergence,简称KLD), 是两个概率分布 P P P 和 Q Q Q 差别的非对称性的度量。KL散度是用来度量使用基于 Q Q Q 的分布来编码服从 P P P 的分布的样本所需的额外的平均比特数,通常 P P P 表示数据的真实分布, Q Q Q 表示它的近似分布。
真实分布 P P P 的平均信息量为:
H ( P ) = − ∑ x P ( x ) log P ( x ) H(P) = -\sum_x P(x) \log P(x) H(P)=−x∑P(x)logP(x)
假设我们并不知道真实分布 P P P ,而是用近似分布 Q Q Q 来描述事件的发生。此时每次观测事件 x x x 的信息量为 − log Q ( x ) -\log Q(x) −logQ(x) 。这种情况下,分布 P P P 的平均信息量变为:
− ∑ x P ( x ) log Q ( x ) -\sum_x P(x) \log Q(x) −x∑P(x)logQ(x)
表示在真实分布 P P P 下,使用近似分布 Q Q Q 计算的信息量。
现在,我们想知道由于使用 Q Q Q 而不是 P P P 所产生的额外信息量有多少?KL散度就是这个差异的量化,记为 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) :
D K L ( P ∣ ∣ Q ) = 使用近似分布的期望信息量 − 真实分布期望信息量 D_{KL}(P||Q) = \text{使用近似分布的期望信息量} - \text{真实分布期望信息量} DKL(P∣∣Q)=使用近似分布的期望信息量−真实分布期望信息量
代入可得:
D K L ( P ∣ ∣ Q ) = − ∑ x P ( x ) log Q ( x ) + ∑ x P ( x ) log P ( x ) + = ∑ x P ( x ) ( log P ( x ) − log Q ( x ) ) = ∑ x P ( x ) log P ( x ) Q ( x ) \begin{aligned} D_{KL}(P||Q) &= -\sum_x P(x) \log Q(x) + \sum_x P(x) \log P(x) + \\ &= \sum_x P(x) \left( \log P(x) - \log Q(x) \right) \\ &= \sum_x P(x) \log \frac{P(x)}{Q(x)} \end{aligned} DKL(P∣∣Q)=−x∑P(x)logQ(x)+x∑P(x)logP(x)+=x∑P(x)(logP(x)−logQ(x))=x∑P(x)logQ(x)P(x)
这样我们就得到了KL散度的定义。其中 真实分布期望信息量 就是信息熵;近似分布的期望信息量就是交叉熵。
还可以写成:
D K L ( P ∣ ∣ Q ) = − ∑ x P ( x ) log Q ( x ) P ( x ) D_{KL}(P||Q) = -\sum_x P(x) \log \frac{Q(x)}{P(x)} DKL(P∣∣Q)=−x∑P(x)logP(x)Q(x)
注意KL散度不是一个度量或距离。因为KL散度不具有对称性:从分布P到Q的距离通常并不等于从Q到P的距离:
D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q) \neq D_{KL}(Q||P) DKL(P∣∣Q)=DKL(Q∣∣P)
由吉布斯不等式可知**,** D K L ( P ∣ ∣ Q ) ≥ 0 D_{KL}(P||Q) \geq 0 DKL(P∣∣Q)≥0 ,当且仅当 P = Q P=Q P=Q 时,取零。
互信息
互信息(mutual Information,MI)度量了两个变量之间相互依赖的程度。它通过观察一个随机变量来量化关于另一个随机变量的信息量。
设 X X X 和 Y Y Y 为一对随机变量,其值在空间 X × Y \mathcal X \times \mathcal Y X×Y 上。联合分布为 P ( X , Y ) P(X,Y) P(X,Y)且边缘分布为 P X P_X PX和 P Y P_Y PY ,那么互信息定义为:
I ( X ; Y ) = D K L ( P ( X , Y ) ∣ ∣ P X ⊗ P Y ) I(X;Y) = D_{KL}(P(X,Y) || P_X \otimes P_Y) I(X;Y)=DKL(P(X,Y)∣∣PX⊗PY)
根据KL散度的性质,当联合分布与边缘分布的乘积一致时,及当 X X X 和 Y Y Y 是相互独立时,它恰好等于零。
互信息其实就是 X X X 的不确定性(熵 H ( X ) H(X) H(X)),以及在知道 Y Y Y 下的不确定性 (条件熵 H ( X ∣ Y ) H(X|Y) H(X∣Y) )之间的差异:
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y) = H(X) - H(X|Y) I(X;Y)=H(X)−H(X∣Y)
直观地说,互信息衡量的是 X X X 和 Y Y Y 共享 的信息:了解其中一个变量在多大程度上减少了对另一个变量的不确定性。 例如,如果 X X X 和 Y Y Y 是独立的,那么知道 Y Y Y 不会给出任何关于 X X X 的信息,反之亦然,所以它们的互信息为零。
逻辑回归
odds指某个事件发生与不发生的概率比值。对于事件 A A A,假设其发生的概率为 p p p ,那么odds可以表示为:
odds ( A ) = p 1 − p \text{odds} (A) = \frac{p}{1-p} odds(A)=1−pp
而log-odds就是odds的对数,通常取自然对数,即 ln \ln ln :
log-odds ( A ) = ln ( p 1 − p ) \text{log-odds}(A) = \ln \left(\frac{p}{1-p} \right) log-odds(A)=ln(1−pp)
逻辑(斯蒂)回归是用于二分类任务的统计模型,它试图预测某个事件发生的概率 p p p 。逻辑回归的目标是学习一个函数,将输入的特征映射到事件发生的概率 p p p。
逻辑回归通过将事件对数发生率(log-odds即logit,又称为对数几率,对数赔率)建模为一个或多个自变量的线性组合。将对数发生率转换为概率的函数就是逻辑(斯蒂)函数。
由上文可知,定义 log-odds z z z 如下:
z = ln ( p 1 − p ) z = \ln \left(\frac{p}{1-p} \right) z=ln(1−pp)
然后对两边取指数:
e z = p 1 − p e^z = \frac{p}{1-p} ez=1−pp
整理这个式子,得到:
p = e z 1 + e z p = \frac{e^z}{1+e^z} p=1+ezez
这个式子就是一个关于log-odds z z z 的逻辑函数(就是sigmoid函数),输入是log-odds,输出是一个取值为0到1之间的概率。标准的逻辑函数定义为:
σ ( z ) = e z e z + 1 = 1 1 + e − z \sigma(z) = \frac{e^z}{e^z +1 } = \frac{1}{1+e^{-z}} σ(z)=ez+1ez=1+e−z1
我们可假设 z z z 是单个自变量 x x x 的线性函数,那么我们可以表达如下:
z = β 0 + β 1 x z = \beta_0 + \beta_1 x z=β0+β1x
通用的逻辑函数可以写成:
p ( x ) = σ ( z ) = 1 1 + e − ( β 0 + β 1 x ) p(x) = \sigma(z) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x)}} p(x)=σ(z)=1+e−(β0+β1x)1
换句话说,逻辑回归的线性组合就是log-odds。注意这同样适用于多个自变量:
z = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β m x m = β 0 + ∑ i = 1 m β i x i z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots +\beta_m x_m = \beta_0 + \sum_{i=1}^m \beta_i x_i z=β0+β1x1+β2x2+⋯+βmxm=β0+i=1∑mβixi
现在考虑损失函数,逻辑回归模型是一个经典的分类模型。预测时我们的目标是让预测的标签和真实标签越接近越好。假设令 y = 1 y=1 y=1 表示标签为正,那么预测 x x x 为正的概率可以写成:
y ^ = p ( y = 1 ∣ x ) \hat y = p(y=1|x) y^=p(y=1∣x)
预测 x x x 为负 y = 0 y=0 y=0 的概率可以表示为 1 − y ^ 1-\hat y 1−y^,即:
1 − y ^ = p ( y = 0 ∣ x ) 1 - \hat y = p(y=0|x) 1−y^=p(y=0∣x)
上面两个式子可以统一写成:
p ( y ∣ x ) = y ^ y ⋅ ( 1 − y ^ ) 1 − y p(y|x) = \hat y^y \cdot (1-\hat y)^{1-y} p(y∣x)=y^y⋅(1−y^)1−y
即对于正样本 y = 1 y=1 y=1,我们希望预测概率越大越好;对于负样本 y = 0 y=0 y=0 ,我们希望预测概率越小越好,这正是最大似然法的思想。若为上式加上对数,就得到对数最大似然:
log p ( y ∣ x ) = log ( y ^ y ⋅ ( 1 − y ^ ) 1 − y ) = y log y ^ + ( 1 − y ) log ( 1 − y ^ ) \log p(y|x) = \log(\hat y^y \cdot (1-\hat y)^{1-y}) =y\log \hat y + (1- y) \log (1-\hat y) logp(y∣x)=log(y^y⋅(1−y^)1−y)=ylogy^+(1−y)log(1−y^)
最大似然希望越大越好,而一般损失越小越好,只要在上式添加一个负号就可以得到损失函数:
L o s s = − [ y log y ^ + ( 1 − y ) log ( 1 − y ^ ) ] \mathcal{Loss} = - \left[y\log \hat y + (1- y) \log (1-\hat y)\right] Loss=−[ylogy^+(1−y)log(1−y^)]
这是单个样本的损失函数,如果考虑 m m m 个样本则有:
L o s s = − 1 m ∑ i = 1 m [ y ( i ) log y ^ ( i ) + ( 1 − y ( i ) ) log ( 1 − y ^ ( i ) ) ] \mathcal {Loss} = -\frac{1}{m}\sum_{i=1}^m \left[y^{(i)}\log \hat y^{(i)} + (1- y^{(i)}) \log (1-\hat y^{(i)})\right] Loss=−m1i=1∑m[y(i)logy^(i)+(1−y(i))log(1−y^(i))]
NCE
NCE(Noise Contrastive Estimation, 噪声对比估计)由 论文 Noise-contrastive estimation: A new estimation principle for unnormalized statistical models 提出。
假设观察到一个随机向量 x ∈ R n \pmb x \in \R^n x∈Rn 的数据,该数据遵循未知的概率密度函数(probability density funciton, pdf) p d ( ⋅ ) p_d(\cdot) pd(⋅) 。假设我们想通过一个模型来估计这个数据分布:
p d ( ⋅ ) ≈ p θ ( ⋅ ) p_d(\cdot) \approx p_\theta(\cdot) pd(⋅)≈pθ(⋅)
该模型的参数是 θ \theta θ 。通过神经网络建模我们可以直接预测给定输入的概率。
现在无论是数据密度函数还是模型密度函数(分布函数),该分布函数或密度函数必须满足的一个属性是积分为 1 1 1 :
∫ p θ ( u ) d u = 1 \int p_\theta(u)du = 1 ∫pθ(u)du=1
该属性由归一化常数保证。这本质上定义了优化问题的一个约束。原则上可以通过重新定义pdf来始终满足该约束,如:
p θ ( ⋅ ) = p ^ θ ( ⋅ ) Z θ (1) p_\theta(\cdot) = \frac{\hat p_\theta(\cdot)}{Z_\theta} \tag 1 pθ(⋅)=Zθp^θ(⋅)(1)
其中 p ^ θ ( ⋅ ) \hat p_\theta(\cdot) p^θ(⋅) 指定了pdf的函数形式,不需要积分到 1 1 1 。然而归一化常数(配分函数) Z θ Z_\theta Zθ 的计算非常困难,积分很少能解析地求解,如果数据是高维的,数值积分也很困难。
在NLP中,给定一组单词(上下文)我们可能需要基于该上下文来预测下一个单词(目标词)。通常我们会把它转换为一个分类问题,即应用Softmax预测目标词在词表空间中的概率。
给定上下文 h h h,要预测目标词 w w w ,我们可以建模如下:
p θ ( w ∣ h ) = exp ( s θ ( w , h ) ∑ w ′ ∈ V exp s θ ( w ′ , h ) (2) \begin{aligned} p_\theta(w|h) = \frac{\exp(s_\theta(w,h)}{\sum_{w^\prime \in \mathcal V} \exp s_\theta(w^\prime, h)} \end{aligned} \tag 2 pθ(w∣h)=∑w′∈Vexpsθ(w′,h)exp(sθ(w,h)(2)
这里 V \mathcal V V 表示词表。分母就是归一化常数,计算分母 Z θ = ∑ w ∈ V exp s θ ( w , c ) Z_\theta = \sum_{w \in \mathcal V} \exp s_\theta (w,c) Zθ=∑w∈Vexpsθ(w,c) 是一个麻烦的事情,因为词表通常是庞大的,这里不仅要对整个词表中所有的单词进行求和,每个单词还需要先经过一个包含指数的操作。同时还需要在分母上求导。
这正是NCE要解决的问题之一。NCE首先通过学习一个参数来估计 Z θ Z_\theta Zθ 。我们考虑对数的情况下,(1)式可以写成:
log p θ ( ⋅ ) = log p ^ θ ( ⋅ ) − log Z θ = log p ^ θ ( ⋅ ) + c (3) \log p_\theta(\cdot) = \log \hat p_\theta(\cdot) - \log Z_\theta = \log \hat p_\theta(\cdot ) +c \tag 3 logpθ(⋅)=logp^θ(⋅)−logZθ=logp^θ(⋅)+c(3)
这里 c c c 是归一化常数 Z θ Z_\theta Zθ 的负对数估计。但NCE不是简单地通过一个可学习的额外参数来估计 Z θ Z_\theta Zθ ,因为这种方法对于最大似然估计 (MLE) 来说是不可行的。原因是通过使 Z θ Z_\theta Zθ 趋于零,似然可以任意地变大。
NCE它是通过最大化同一个目标函数来估计模型参数 θ \theta θ 和 归一化常数。
基本思想是通过学习参数区分数据分布样本 p d p_d pd 和噪声分布样本 p n p_n pn ,即判断一个数据是来自数据分布还是噪声分布,其依赖于与数据对比的噪声,因此这种方法称为“噪声对比估计”。
由于我们这里在比较两个分布,因此这可以视为二分类问题。二分类问题我们可以想到逻辑回归模型。
在工作A fast and simple algorithm for training neural probabilistic language models中将NCE带到了NLP中,并且作者发现将归一化常数固定为 1 1 1而不是学习它,并不会影响所得模型的性能。
我们从得分函数 Δ s θ ( w + , h ) \Delta s_\theta(w^+,h) Δsθ(w+,h)开始,该函数计算一个分数,量化了输入和其上下文的关系, w + w^+ w+ 表示来自数据分布; h h h 表示上下文。该分数可以看成是分类层的logits,我们可以对它应用sigmoid转换为概率 σ ( Δ s θ ( w + , h ) ) \sigma(\Delta s_\theta(w^+,h)) σ(Δsθ(w+,h)) 。通常我们感兴趣的是对数概率 log σ ( Δ s θ ( w + , h ) ) \log \sigma(\Delta s_\theta(w^+,h)) logσ(Δsθ(w+,h)),若我们同时考虑 k k k 个 噪音样本 w − w^- w− 我们可以得到下式:
log σ ( Δ s θ ( w + , h ) ) + ∑ i = 1 k log σ ( − Δ s θ ( w i − , h ) ) \log \sigma(\Delta s_\theta(w^+,h)) + \sum_{i=1}^k \log \sigma(-\Delta s_\theta(w^-_i,h)) logσ(Δsθ(w+,h))+i=1∑klogσ(−Δsθ(wi−,h))
可以看到这本质上是一个逻辑回归, 每个正样本(来自数据分布)有 k k k 个负样本(来自噪声分布)。
因此我们就得到了NCE要最大化的损失函数:
L NCE ( θ ) = log σ ( Δ s θ ( w + , h ) ) + ∑ i = 1 k log σ ( − Δ s θ ( w i − , h ) ) (4) \mathcal L_\text{NCE}(\theta) = \log \sigma(\Delta s_\theta(w^+,h)) + \sum_{i=1}^k \log \sigma(-\Delta s_\theta(w^-_i,h)) \tag 4 LNCE(θ)=logσ(Δsθ(w+,h))+i=1∑klogσ(−Δsθ(wi−,h))(4)
由于我们这里讨论的是逻辑回归,我们可以把得分函数看成是一个log-odds:
Δ s θ ( w + , h ) = log p θ ( w + ∣ h ) k ⋅ p n ( w + ) Δ s θ ( w − , h ) = log p θ ( w − ∣ h ) k ⋅ p n ( w − ) \Delta s_\theta(w^+,h) = \log \frac{p_\theta(w^+|h)}{k\cdot p_n(w^+)} \quad\quad \Delta s_\theta(w^-,h) = \log \frac{p_\theta(w^-|h)}{k\cdot p_n(w^-)} Δsθ(w+,h)=logk⋅pn(w+)pθ(w+∣h)Δsθ(w−,h)=logk⋅pn(w−)pθ(w−∣h)
然后对它们应用sigmoid得到:
σ ( Δ s θ ( w + , h ) ) = 1 1 + e − Δ s θ ( w + , h ) = 1 1 + e − log p θ ( w + ∣ h ) k ⋅ p n ( w + ) = 1 1 + e log k ⋅ p n ( w + ) p θ ( w + ∣ h ) = 1 1 + k ⋅ p n ( w + ) p θ ( w + ∣ h ) = p θ ( w + ∣ h ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) (5) \begin{aligned} \sigma (\Delta s_\theta(w^+,h)) &= \frac{1}{1+e^{-\Delta s_\theta(w^+, h)}} \\ &= \frac{1}{1+e^{-\log \frac{p_\theta(w^+|h)}{k\cdot p_n(w^+)}}} \\ &= \frac{1}{1+e^{\log \frac{k\cdot p_n(w^+)}{ p_\theta(w^+|h)}}} \\ &= \frac{1}{1 +\frac{k\cdot p_n(w^+)}{ p_\theta(w^+|h)} } \\ &= \frac{p_\theta(w^+|h)}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \end{aligned} \tag 5 σ(Δsθ(w+,h))=1+e−Δsθ(w+,h)1=1+e−logk⋅pn(w+)pθ(w+∣h)1=1+elogpθ(w+∣h)k⋅pn(w+)1=1+pθ(w+∣h)k⋅pn(w+)1=pθ(w+∣h)+k⋅pn(w+)pθ(w+∣h)(5)
最终得到这样一个简化形式。
同理,对于 Δ s θ ( w − , h ) \Delta s_\theta(w^-,h) Δsθ(w−,h) 我们也能得到这样的简化形式:
σ ( Δ s θ ( w − , h ) ) = k ⋅ p n ( w − ) p θ ( w − ∣ h ) + k ⋅ p n ( w − ) \sigma(\Delta s_\theta(w^-,h))= \frac{k\cdot p_n(w^-)}{p_\theta(w^-|h) + k\cdot p_n(w^-)} σ(Δsθ(w−,h))=pθ(w−∣h)+k⋅pn(w−)k⋅pn(w−)
这样我们可以重写(4)中的损失函数:
L NCE ( θ ) = log ( p θ ( w + ∣ h ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) + ∑ i = 1 k log ( k ⋅ p n ( w i − ) p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ) (6) \mathcal L_\text{NCE}(\theta) = \log \left(\frac{p_\theta(w^+|h)}{p_\theta(w^+|h) + k\cdot p_n(w^+)}\right) + \sum_{i=1}^k \log \left(\frac{k\cdot p_n(w^-_i)}{p_\theta(w^-_i|h) + k\cdot p_n(w^-_i)}\right) \tag 6 LNCE(θ)=log(pθ(w+∣h)+k⋅pn(w+)pθ(w+∣h))+i=1∑klog(pθ(wi−∣h)+k⋅pn(wi−)k⋅pn(wi−))(6)
但是由于归一化常数的存在, p θ p_\theta pθ 的计算仍然很困难,但考虑到引用3中把归一化常数设为 1 1 1 的做法,我们只需要计算(2)式的分子。
下面我们从数学角度来证明它确实有用。我们针对上式计算微分,考虑
∂ L NCE ( θ ) ∂ θ = ∂ ∂ θ log ( p θ ( w + ∣ h ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) + ∂ ∂ θ ∑ i = 1 k log ( k ⋅ p n ( w i − ) p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ) = ∂ ∂ θ [ log p θ ( w + ∣ h ) − log ( p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) ] + ∂ ∂ θ ∑ i = 1 k [ log k p n ( w i − ) − log ( p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ) ] = ∂ ∂ θ [ log p θ ( w + ∣ h ) − log ( p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) ] + ∑ i = 1 k ∂ ∂ θ [ log k p n ( w i − ) − log ( p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ) ] \begin{aligned} \frac{\partial \mathcal L_\text{NCE}(\theta)}{\partial \theta} &= \frac{\partial}{\partial \theta}\log \left(\frac{p_\theta(w^+|h)}{p_\theta(w^+|h) + k\cdot p_n(w^+)}\right) \\&+\frac{\partial}{\partial \theta} \sum_{i=1}^k \log \left(\frac{k\cdot p_n(w^-_i)}{p_\theta(w^-_i|h) + k\cdot p_n(w^-_i)}\right) \\ &= \frac{\partial}{\partial \theta} \left[ \log p_\theta(w^+|h) - \log \left( p_\theta(w^+|h) + k\cdot p_n(w^+)\right) \right] \\ &+ \frac{\partial}{\partial \theta} \sum_{i=1}^k \left[ \log kp_n(w_i^-) - \log \left( p_\theta(w_i^-|h) + k\cdot p_n(w_i^-) \right)\right] \\ &= \frac{\partial}{\partial \theta} \left[ \log p_\theta(w^+|h) - \log \left( p_\theta(w^+|h) + k\cdot p_n(w^+)\right) \right] \\ &+ \sum_{i=1}^k\frac{\partial}{\partial \theta} \left[ \log kp_n(w_i^-) - \log \left( p_\theta(w_i^-|h) + k\cdot p_n(w_i^-) \right)\right] \end{aligned} ∂θ∂LNCE(θ)=∂θ∂log(pθ(w+∣h)+k⋅pn(w+)pθ(w+∣h))+∂θ∂i=1∑klog(pθ(wi−∣h)+k⋅pn(wi−)k⋅pn(wi−))=∂θ∂[logpθ(w+∣h)−log(pθ(w+∣h)+k⋅pn(w+))]+∂θ∂i=1∑k[logkpn(wi−)−log(pθ(wi−∣h)+k⋅pn(wi−))]=∂θ∂[logpθ(w+∣h)−log(pθ(w+∣h)+k⋅pn(w+))]+i=1∑k∂θ∂[logkpn(wi−)−log(pθ(wi−∣h)+k⋅pn(wi−))]
整个式子太长了 ,我们分别对上面两项进行求导。
item1 = ∂ ∂ θ log p θ ( w + ∣ h ) − ∂ ∂ θ log ( p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) = ∂ ∂ θ log p θ ( w + ∣ h ) − 1 p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ∂ ∂ θ ( p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) = ∂ ∂ θ log p θ ( w + ∣ h ) − 1 p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ∂ ∂ θ p θ ( w + ∣ h ) = ∂ ∂ θ log p θ ( w + ∣ h ) − p θ ( w + ∣ h ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ∂ ∂ θ log p θ ( w + ∣ h ) = ( k ⋅ p n ( w + ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ) ∂ ∂ θ log p θ ( w + ∣ h ) \begin{aligned} \text{item1} &= \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \frac{\partial}{\partial \theta}\log \left( p_\theta(w^+|h) + k\cdot p_n(w^+)\right) \\ &= \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \frac{1}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \frac{\partial}{\partial \theta} \left( p_\theta(w^+|h) + k\cdot p_n(w^+) \right) \\ &= \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \frac{1}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \frac{\partial}{\partial \theta} p_\theta(w^+|h) \\ &= \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \frac{p_\theta(w^+|h)}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) \\ &= \left( \frac{k\cdot p_n(w^+)}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \right)\frac{\partial}{\partial \theta} \log p_\theta(w^+|h) \end{aligned} item1=∂θ∂logpθ(w+∣h)−∂θ∂log(pθ(w+∣h)+k⋅pn(w+))=∂θ∂logpθ(w+∣h)−pθ(w+∣h)+k⋅pn(w+)1∂θ∂(pθ(w+∣h)+k⋅pn(w+))=∂θ∂logpθ(w+∣h)−pθ(w+∣h)+k⋅pn(w+)1∂θ∂pθ(w+∣h)=∂θ∂logpθ(w+∣h)−pθ(w+∣h)+k⋅pn(w+)pθ(w+∣h)∂θ∂logpθ(w+∣h)=(pθ(w+∣h)+k⋅pn(w+)k⋅pn(w+))∂θ∂logpθ(w+∣h)
这里 p n ( w + ) p_n(w^+) pn(w+) 与 θ \theta θ 无关,对其偏导为零,因此可以移除。
item2 = ∂ ∂ θ [ log k p n ( w i − ) − log ( p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ) ] = − p θ ( w i − ∣ h ) p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ∂ ∂ θ log p θ ( w i − ∣ h ) \begin{aligned} \text{item2} &= \frac{\partial}{\partial \theta} \left[ \log kp_n(w_i^-) - \log \left( p_\theta(w_i^-|h) + k\cdot p_n(w_i^-) \right)\right] \\ &= - \frac{p_\theta(w^-_i|h)}{p_\theta(w^-_i|h) + k\cdot p_n(w^-_i)} \frac{\partial}{\partial \theta} \log p_\theta(w^-_i|h) \end{aligned} item2=∂θ∂[logkpn(wi−)−log(pθ(wi−∣h)+k⋅pn(wi−))]=−pθ(wi−∣h)+k⋅pn(wi−)pθ(wi−∣h)∂θ∂logpθ(wi−∣h)
我们现在可以得到整个式子的最终表达式:
∂ L NCE ( θ ) ∂ θ = k ⋅ p n ( w + ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ∂ ∂ θ log p θ ( w + ∣ h ) − ∑ i = 1 k p θ ( w i − ∣ h ) p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ∂ ∂ θ log p θ ( w i − ∣ h ) \frac{\partial \mathcal L_\text{NCE}(\theta)}{\partial \theta} = \frac{k\cdot p_n(w^+)}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \sum_{i=1}^k \frac{p_\theta(w^-_i|h)}{p_\theta(w^-_i|h) + k\cdot p_n(w^-_i)} \frac{\partial}{\partial \theta} \log p_\theta(w^-_i|h) ∂θ∂LNCE(θ)=pθ(w+∣h)+k⋅pn(w+)k⋅pn(w+)∂θ∂logpθ(w+∣h)−i=1∑kpθ(wi−∣h)+k⋅pn(wi−)pθ(wi−∣h)∂θ∂logpθ(wi−∣h)
当 k k k 趋于无穷大时:
lim k → ∞ ∂ L NCE ( θ ) ∂ θ = lim k → ∞ [ k ⋅ p n ( w + ) p θ ( w + ∣ h ) + k ⋅ p n ( w + ) ∂ ∂ θ log p θ ( w + ∣ h ) − ∑ i = 1 k p θ ( w i − ∣ h ) p θ ( w i − ∣ h ) + k ⋅ p n ( w i − ) ∂ ∂ θ log p θ ( w i − ∣ h ) ] = ∂ ∂ θ log p θ ( w + ∣ h ) (7) \begin{aligned} \lim_{k \rightarrow \infty}\frac{\partial \mathcal L_\text{NCE}(\theta)}{\partial \theta} &= \lim_{k \rightarrow \infty} \left[\frac{k\cdot p_n(w^+)}{p_\theta(w^+|h) + k\cdot p_n(w^+)} \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) - \sum_{i=1}^k \frac{p_\theta(w^-_i|h)}{p_\theta(w^-_i|h) + k\cdot p_n(w^-_i)} \frac{\partial}{\partial \theta} \log p_\theta(w^-_i|h) \right] \\ &= \frac{\partial}{\partial \theta} \log p_\theta(w^+|h) \end{aligned} \tag 7 k→∞lim∂θ∂LNCE(θ)=k→∞lim[pθ(w+∣h)+k⋅pn(w+)k⋅pn(w+)∂θ∂logpθ(w+∣h)−i=1∑kpθ(wi−∣h)+k⋅pn(wi−)pθ(wi−∣h)∂θ∂logpθ(wi−∣h)]=∂θ∂logpθ(w+∣h)(7)
这个梯度和对数似然的梯度相同,证明了这个目标函数是有效的。
回顾下对数似然梯度。
对于给定的语言模型参数 θ \theta θ,预测句子 s = { w 1 , w 2 , … , w n } s = \{w_1, w_2, \ldots, w_n\} s={w1,w2,…,wn}的出现概率,即建模 p θ ( w 1 , w 2 , … , w n ) p_\theta(w_1, w_2, \ldots, w_n) pθ(w1,w2,…,wn)。
基于链式法则可以表示为每个单词出现的条件概率的乘积,将每个单词 w i w_i wi 的上下文 ( w 1 , w 2 , … , w i − 1 ) (w_1,w_2,\ldots,w_{i-1}) (w1,w2,…,wi−1)用 c i c_i ci 表示。那么可以写成
p θ ( w 1 , w 2 , … , w n ) = p θ ( w 1 ) p θ ( w 2 ∣ w 1 ) p θ ( w 3 ∣ w 1 , w 2 ) … p ( w n ∣ w 1 , … , w n − 1 ) = ∏ i = 1 n p θ ( w i ∣ w 1 , w 2 , … , w i − 1 ) = ∏ i = 1 n p θ ( w i ∣ c i ) \begin{aligned} p_\theta(w_1,w_2,\ldots,w_n) &= p_\theta(w_1)\ p_\theta(w_2|w_1)p_\theta(w_3|w_1,w_2)\ldots p(w_n|w_1,\ldots,w_{n-1}) \\ &=\prod_{i=1}^n p_\theta (w_i|w_1,w_2,\ldots,w_{i-1}) \\ &= \prod_{i=1}^n p_\theta (w_i|c_i) \end{aligned} pθ(w1,w2,…,wn)=pθ(w1) pθ(w2∣w1)pθ(w3∣w1,w2)…p(wn∣w1,…,wn−1)=i=1∏npθ(wi∣w1,w2,…,wi−1)=i=1∏npθ(wi∣ci)
当 n n n 很大时,通常还要引入马尔科夫假设。我们为上式添加对数,并且期望这个句子概率最大化,就是对数最大似然估计,可以写出对数似然函数为:
L M L E = ∑ i log p θ ( w i ∣ c i ) \mathcal L _{MLE} = \sum_i \log p_\theta (w_i|c_i) LMLE=i∑logpθ(wi∣ci)
对 θ \theta θ 求导得到
∑ i ∂ ∂ θ log p θ ( w i ∣ c i ) (8) \sum_i \frac{\partial}{\partial \theta} \log p_\theta (w_i|c_i) \tag 8 i∑∂θ∂logpθ(wi∣ci)(8)
考虑单个单词,(7)和(8)其实是一样的。所以说NCE本质上是极大似然估计的一种近似,NCE损失是可以工作的。
参考
- 维基百科
- Noise-contrastive estimation: A new estimation principle for unnormalized statistical models
- A fast and simple algorithm for training neural probabilistic language models
- Noise-Contrastive Estimation - CLEARLY EXPLAINED!