Noise Contrastive Estimation 前世今生——从 NCE 到 InfoNCE

文章首发于:https://zhuanlan.zhihu.com/p/334772391

0 前言

作为刚入门自监督学习的小白,在阅读其中 Contrastive Based 方法的论文时,经常会看到 InfoNCE 这个 loss(在 CPC 的论文中提出),之前只知道它的思想来自于 NCE 以及代表什么含义,但是对其背后的理论推导、以及如何从 NCE 迁移到 InfoNCE 的思想不太清楚,因此这篇文章就是通过理论推导和自己的理解来对 NCE 和 InfoNCE 的来龙去脉有个了解。

1 从 NLP 入手

1.1 背景

NCE,也就是 Noise Contrastive Noise(噪声对比估计), 在 Noise-contrastive estimation: A new estimation principle for unnormalized statistical models [Gutmann and Hyvsarinen, 2010] 这篇论文中被提出,但是这篇论文的阐述过于“数学”不太便于理解,并且论文中估计的是概率密度函数(pdf, probability density function)。而 NLP 中的 word 或 vision 中的 pixel 都是离散的,且我们感兴趣的是的概率质量函数(pmf, probability mass function),因此我主要参考了 A fast and simple algorithm for training neural probabilistic language models 这篇论文,它就是在使用 NCE 时假设了离散分布,并用 pmf 代替其中 pdf,然后将 NCE 应用到 NLP 领域。(我对 NLP 领域不是很了解,部分阐述方式可能会不严谨)。

1.2 n-gram

语言模型(language model)就是假设一门语言所有可能的句子服从一个概率分布,每个句子出现的概率加起来是1,那么语言模型的任务就是预测每个句子在语言中出现的概率。如果把句子 s s s 看成单词 w w w 的序列 s = { w 1 , w 2 , . . . , w m } s=\{w_1,w_2,...,w_m\} s={w1,w2,...,wm},那么语言模型就是建模一个 p ( w 1 , w 2 , . . . , w m ) p(w_1,w_2,...,w_m) p(w1,w2,...,wm) 来计算这个句子 s s s 出现的概率,直观上我们要得到这个语言模型,基于链式法则可以表示为每个单词出现的条件概率的乘积,我们将条件概率的条件 ( w 1 , w 2 , . . . , w i − 1 ) (w_1,w_2,...,w_{i-1}) (w1,w2,...,wi1) 称为单词 w i w_i wi 的上下文,用 c i c_i ci 表示。
p ( w 1 , w 2 , … , w m ) = p ( w 1 ) ∗ p ( w 2 ∣ w 1 ) ∗ p ( w 3 ∣ w 1 , w 2 ) … p ( w m ∣ w 1 , … , w m − 1 ) = ∏ i = 1 m p ( w i ∣ w 1 , w 2 , … , w i − 1 ) = ∏ i = 1 m p ( w i ∣ c i ) (1) \begin{aligned} p\left(w_{1}, w_{2}, \ldots, w_{m}\right)&=p\left(w_{1}\right) * p\left(w_{2} \mid w_{1}\right) * p\left(w_{3} \mid w_{1}, w_{2}\right) \ldots p\left(w_{m} \mid w_{1}, \ldots, w_{m-1}\right) \\ &=\prod_{i=1}^{m} p\left(w_{i} \mid w_{1}, w_{2}, \ldots, w_{i-1}\right) \\ &=\prod_{i=1}^{m} p\left(w_{i} \mid c_i\right) \end{aligned} \tag 1 p(w1,w2,,wm)=p(w1)p(w2w1)p(w3w1,w2)p(wmw1,,wm1)=i=1mp(wiw1,w2,,wi1)=i=1mp(wici)(1)
可以看到,language model 就是条件概率 p ( w i ∣ c i ) p(w_i|c_i) p(wici) 的集合,但是直接计算每个条件概率是不现实的。因此在统计语言模型中,引入了马尔可夫假设,即“一个词出现的概率只与它前面出现的有限的一个或者 n 个词有关”,将这 n n n 个词称为一个 gram,这就是著名的 n-gram 模型,因此可以将模型简化为:
p ( w 1 , w 2 , w 3 , … , w m ) = ∏ i = 1 m p ( w i ∣ w i − n + 1 , … , w i − 1 ) (2) p\left(w_{1}, w_{2}, w_{3}, \ldots, w_{m}\right)=\prod_{i=1}^{m} p\left(w_{i} \mid w_{i-n+1}, \ldots, w_{i-1}\right) \tag 2 p(w1,w2,w3,,wm)=i=1mp(wiwin+1,,wi1)(2)

1.3 最大似然估计

然而,在机器学习领域有一个方法是:对所要考虑的问题建模后为其构造一个目标函数,然后对这个目标函数进行优化,从而求得一组最优的参数,最后利用这组最优参数对应的模型进行预测,也就是最大似然估计

因此,在建模统计语言模型时,利用最大似然估计,对于 ( 1 ) (1) (1) 式目标函数,我们可以写出其对数似然函数如下:
L M L E = ∑ w ∈ s log ⁡ p θ ( w ∣ c ) (3) \mathcal{L}_{MLE}= \sum_{w \in s} \log p_{\theta}(w \mid c) \tag 3 LMLE=wslogpθ(wc)(3)
然后对最大化对数似然函数 L M L E \mathcal{L}_{MLE} LMLE,实际上这样就是将 p ( w ∣ c ) p(w|c) p(wc) 看成 w w w c c c 的函数, θ \theta θ 为待定参数集:
p θ ( w ∣ c ) = F ( w , c ; θ ) (4) p_{\theta}(w|c)=F(w,c;\theta) \tag 4 pθ(wc)=F(w,c;θ)(4)
这样一旦最优参数集 θ ∗ \theta^{*} θ 可以确定,函数 F F F 就被唯一确定,那么对于任何概率 p ( w ∣ c ) p(w|c) p(wc) 都可以用 函数 F ( w , c ; θ ∗ ) F(w,c;{\theta}^{*}) F(w,c;θ) 来计算了。

1.4 神经概率语言模型

上面的方法似然看起来很美好,但其中有两个问题:

  • 如何构造一个好的函数 F F F
  • 最大似然估计虽然理论上简单可行,但对于某些模型,在实际计算时可能需要很大的计算量,因此未必容易。

首先来看第一个问题,这也就是我们为什么引入神经网络,因为神经网络理论上可以表示任何函数,那么通过训练,肯定能找到这个合适的 F F F,因此Bengio 等人在 2003 年 A Neural Probabilistic Language Model 中提出了神经概率语言模型(NPLM)。其不在受限于 gram 的大小,可以在包含任意大小上下文的情况下建模 w w w 的条件概率。

具体来看,它把语言模型的建立当作一个多分类问题,我们用 V = { v 1 , v 2 , . . . , v ∣ V ∣ } V=\{ v_1,v_2,...,v_{|V|} \} V={v1,v2,...,vV} 表示一个包含所有单词的单词库,其大小为 ∣ V ∣ |V| V,将 ( w i , c i ) (w_i,c_i) (wi,ci) 当成一对训练样本(实际上 w w w 会转换成词向量,这里不做详解),通过神经网络后和 softmax 后,输出一个向量 y ^ = [ y ^ i , 1 , y ^ i , 2 , . . . , y ^ i , ∣ V ∣ ] \hat{y}=\left[\hat{y}_{i,1},\hat{y}_{i,2},...,\hat{y}_{i,|V|}\right] y^=[y^i,1,y^i,2,...,y^i,V], 其中每一维 y ^ i , j = p ( v j ∣ c i ) \hat{y}_{i,j}=p(v_j|c_i) y^i,j=p(vjci) 表示上下文为 c i c_i ci时 第 i i i 个单词是单词库中第 j j j 个单词 v j v_j vj 的概率,训练过程要求最后单词库中概率最大的单词就是训练样本对中的 w i w_i wi。这样训练结束后,给神经网络一个上下文 c l = ( w 1 , w 2 , . . . , w l − 1 ) c_l=(w_1,w_2,...,w_{l-1}) cl=(w1,w2,...,wl1),神经网络就能预测在当前上下文 c l c_l cl时,下一个 单词 w l w_l wl 是单词库中的各个词的概率,通过这个我们也就可以构建语言模型。

我们知道,这种方法本质上就是拟合一个 w w w c c c 的函数 F F F,或者说建立一个参数集为 θ \theta θ 条件概率分布 p θ ( w ∣ c ) p_{\theta}(w|c) pθ(wc) ,只要给出当前上下文 c c c ,我们就能够直接计算下一个单词 w w w 的概率。

假设输入到 softmax 前的结果用 s θ ( w , c ) s_{\theta}(w,c) sθ(w,c) 表示,实际上 s θ ( w , c ) s_{\theta}(w,c) sθ(w,c) 是有含义的,它是一个 socring function ,输出的分数用来量化 w w w 在上下文 c c c 中匹配性,那么 w w w 条件概率可以表示为以下形式:
p θ ( w ∣ c ) = e x p ( s θ ( w , c ) ) ∑ w ′ ∈ V e x p ( s θ ( w , c ) ) = u θ ( w , c ) Z ( c ) (5) \begin{aligned} p_{\theta}(w|c)&= \frac{exp(s_{\theta}(w,c))}{\sum_{w^\prime \in V}exp(s_{\theta}(w,c))} \\ &= \frac{u_{\theta}(w,c)}{Z(c)} \end{aligned} \tag 5 pθ(wc)=wVexp(sθ(w,c))exp(sθ(w,c))=Z(c)uθ(w,c)(5)
式中, u θ ( w , c ) = e x p ( s θ ( w , c ) ) u_{\theta}(w,c)=exp(s_{\theta}(w,c)) uθ(w,c)=exp(sθ(w,c)) 表示下一个单词是这个 w w w 在单词库中的概率;令 Z ( c ) = ∑ w ′ ∈ V e x p ( s θ ( w , c ) ) Z(c) = \sum_{w^\prime \in V}exp(s_{\theta}(w,c)) Z(c)=wVexp(sθ(w,c)) 表示当前单词库中所有单词的概率的累和,通常将这一项叫做“配分函数”或“归一化因子”。一般来说,单词库 ∣ V ∣ |V| V 的数量是非常巨大的,因此计算 Z ( c ) Z(c) Z(c) 是非常昂贵、耗时的一件事,这也就是 NCE 要解决的问题(见附录1)

如果我们不考虑 s θ ( w , c ) s_{\theta}(w,c) sθ(w,c) 的具体形式,那么 ( 5 ) (5) (5) 式实际上就可以当作我们在 ( 4 ) (4) (4) 式中所构造的函数 F F F 的表达式, 既然如此,那我们接着用 1.3 中提到的最大似然估计的方式来试着求解 F F F 的参数 θ \theta θ。我们将从句子(语料) s s s 中取样的 w w w 看成经验分布(数据分布) p ~ ( w ∣ c ) \tilde{p}(w|c) p~(wc) ( 3 ) (3) (3) 式中的 L M L E \mathcal{L}_{MLE} LMLE 可以写成:
L M L E = ∑ w ∼ p ~ ( w ∣ c ) log ⁡ p θ ( w ∣ c ) = E w ∼ p ~ ( w ∣ c ) log ⁡ u θ ( w , c ) Z ( c ) (6) \begin{aligned} \mathcal{L}_{MLE} &= \sum_{w \sim \tilde{p}(w|c)} \log p_{\theta}(w \mid c) \\ &=\mathbb E_{w \sim \tilde{p}(w|c)} \log{\frac{u_{\theta}(w,c)}{Z(c)}} \end{aligned} \tag 6 LMLE=wp~(wc)logpθ(wc)=Ewp~(wc)logZ(c)uθ(w,c)(6)
现在要最大化 L M L E \mathcal{L}_{MLE} LMLE,那么将其关于 θ \theta θ 求导:
∂ ∂ θ L M L E = E w ∼ p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) Z ( c ) = E w ∼ p ~ ( w ∣ c ) [ ∂ ∂ θ log ⁡ u θ ( w , c ) − ∂ ∂ θ log ⁡ Z ( c ) ] = E w ∼ p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) − ∂ ∂ θ log ⁡ Z ( c ) (7) \begin{aligned} \frac{\partial}{\partial \theta}\mathcal{L}_{\mathrm{MLE}}&=\mathbb E_{w \sim \tilde{p}(w|c)} \frac{\partial}{\partial \theta}\log{\frac{u_{\theta}(w,c)}{Z(c)}} \\ &=\mathbb E_{w \sim \tilde{p}(w|c)} \left[ \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)}- \frac{\partial}{\partial \theta}\log{Z(c)} \right] \\ &=\mathbb E_{w \sim \tilde{p}(w|c)} \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - \frac{\partial}{\partial \theta} \log{Z(c)} \end{aligned} \tag 7 θLMLE=Ewp~(wc)θlogZ(c)uθ(w,c)=Ewp~(wc)[θloguθ(w,c)θlogZ(c)]=Ewp~(wc)θloguθ(w,c)θlogZ(c)(7)

这里解释一下上面到最后一步的转换,因为 Z ( c ) = ∑ w ′ ∈ V e x p ( s θ ( w , c ) ) Z(c)=\sum_{w^\prime \in V}exp(s_{\theta}(w,c)) Z(c)=wVexp(sθ(w,c)),其中 w ′ w^{\prime} w 为单词库 V V V 中所有的单词,而单词库其中每个单词的概率由 p θ ( w ∣ c ) p_{\theta}(w|c) pθ(wc) 产生,因此 w ′ ∼ p θ ( w ∣ c ) w^{\prime} \sim p_{\theta}(w|c) wpθ(wc),与经验分布 w ∼ p ~ ( w ∣ c ) w \sim \tilde{p}(w|c) wp~(wc) 不相关,所以可以把期望 E w ∼ p ~ ( w ∣ c ) \mathbb E_{w \sim \tilde{p}(w|c)} Ewp~(wc) 去掉。

( 7 ) (7) (7) 式结果中的 ∂ ∂ θ log ⁡ Z ( c ) \frac{\partial}{\partial \theta} \log{Z(c)} θlogZ(c) 计算如下:
∂ ∂ θ log ⁡ Z ( c ) = 1 Z ( c ) ∂ ∂ θ Z ( c ) = 1 Z ( c ) ∂ ∂ θ ∑ w ′ ∈ V u θ ( w , c ) = 1 Z ( c ) ∂ ∂ θ ∑ w ′ ∈ V e x p ( s θ ( w , c ) ) = ∑ w ′ ∈ V 1 Z ( c ) e x p ( s θ ( w , c ) ) ∂ ∂ θ s θ ( w , c ) = ∑ w ′ ∈ V p θ ( w ∣ c ) ∂ ∂ θ s θ ( w , c ) = E w ∼ p θ ( w ∣ c ) ∂ ∂ θ s θ ( w , c ) = E w ∼ p θ ( w ∣ c ) ∂ ∂ θ l o g u θ ( w , c ) (8) \begin{aligned} \frac{\partial}{\partial \theta}\log{Z(c)}&=\frac{1}{Z(c)} \frac{\partial}{\partial \theta}Z(c) \\ &=\frac{1}{Z(c)}\frac{\partial}{\partial \theta} \sum_{w^\prime \in V}u_{\theta}(w,c) \\ &=\frac{1}{Z(c)} \frac{\partial}{\partial \theta} \sum_{w^\prime \in V} {exp(s_{\theta}(w,c))} \\ &=\sum_{w^\prime \in V} \frac{1}{Z(c)} exp(s_{\theta}(w,c)) \frac{\partial}{\partial \theta} s_{\theta}(w,c) \\ &=\sum_{w^\prime \in V} p_{\theta}(w|c) \frac{\partial}{\partial \theta} s_{\theta}(w,c) \\ &=\mathbb{E}_{w \sim p_{\theta}(w|c)} \frac{\partial}{\partial \theta} s_{\theta}(w,c) \\ &=\mathbb{E}_{w \sim p_{\theta}(w|c)} \frac{\partial}{\partial \theta} logu_{\theta}(w,c) \end{aligned} \tag 8 θlogZ(c)=Z(c)1θZ(c)=Z(c)1θwVuθ(w,c)=Z(c)1θwVexp(sθ(w,c))=wVZ(c)1exp(sθ(w,c))θsθ(w,c)=wVpθ(wc)θsθ(w,c)=Ewpθ(wc)θsθ(w,c)=Ewpθ(wc)θloguθ(w,c)(8)

( 8 ) (8) (8) 式结果带回 ( 7 ) (7) (7) 式中得:
∂ ∂ θ L M L E = E w ∼ p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) − ∂ ∂ θ log ⁡ Z ( c ) = E w ∼ p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) − E w ∼ p θ ( w ∣ c ) ∂ ∂ θ l o g u θ ( w , c ) = ∑ w p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) − ∑ w p θ ( w ∣ c ) ∂ ∂ θ l o g u θ ( w , c ) = ∑ w [ p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) − p θ ( w ∣ c ) ∂ ∂ θ l o g u θ ( w , c ) ] = ∑ w [ ( p ~ ( w ∣ c ) − p θ ( w ∣ c ) ) ∂ ∂ θ l o g u θ ( w , c ) ] (9) \begin{aligned} \frac{\partial}{\partial \theta}\mathcal{L}_{\mathrm{MLE}} &=\mathbb E_{w \sim \tilde{p}(w|c)} \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - \frac{\partial}{\partial \theta} \log{Z(c)} \\ &=\mathbb E_{w \sim \tilde{p}(w|c)} \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - \mathbb{E}_{w \sim p_{\theta}(w|c)} \frac{\partial}{\partial \theta} logu_{\theta}(w,c) \\ &=\sum_w{\tilde{p}(w|c) \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)}} - \sum_w {p_{\theta}(w|c) \frac{\partial}{\partial \theta} logu_{\theta}(w,c)} \\ &=\sum_w{\left[ \tilde{p}(w|c) \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - p_{\theta}(w|c) \frac{\partial}{\partial \theta} logu_{\theta}(w,c) \right]} \\ &=\sum_w{\left[\left(\tilde{p}(w|c)- p_{\theta}(w|c)\right)\frac{\partial}{\partial \theta} logu_{\theta}(w,c)\right]} \end{aligned} \tag 9 θLMLE=Ewp~(wc)θloguθ(w,c)θlogZ(c)=Ewp~(wc)θloguθ(w,c)Ewpθ(wc)θloguθ(w,c)=wp~(wc)θloguθ(w,c)wpθ(wc)θloguθ(w,c)=w[p~(wc)θloguθ(w,c)pθ(wc)θloguθ(w,c)]=w[(p~(wc)pθ(wc))θloguθ(w,c)](9)
看似最大似然很美好,但是实际上还是绕不开对“归一化常数”的计算,所以就需要 NCE 登场了。

2 什么是 NCE

上一节中说明了计算 Z ( c ) Z(c) Z(c) 非常昂贵这个问题需要解决,一个简单的思路是将 Z ( c ) Z(c) Z(c) 也看出模型的一个参数 z c z_c zc 来进行训练,但是这种方法不适合于上面提到的最大似然估计,因为由 ( 6 ) (6) (6) 式可以看出来,它会直接将 Z ( c ) Z(c) Z(c) 趋于 0 0 0 来获得最大似然。因此,也有人提利用这个思想提出了一些不定义 Z ( c ) Z(c) Z(c) ,直接用 u θ ( w , c ) u_{\theta}(w,c) uθ(w,c) 估计模型的方法,如 contrastive divergence (Hinton, 2002) 和 score matching (Hyvarinen, 2005)。(见附录2)

而 NCE 不同于上面两种方法,它是通过最大化同一个目标函数来估计模型参数 θ \theta θ 和归一化常数,NCE 的核心思想就是通过学习数据分布样本和噪声分布样本之间的区别,从而发现数据中的一些特性,因为这个方法需要依靠与噪声数据进行对比,所以称为“噪声对比估计(Noise Contrastive Estimation)”。更具体来说,NCE 将问题转换成了一个二分类问题,分类器能够对数据样本和噪声样本进行二分类。(见附录3)

现在假设一个特定上下文 c c c 的数据分布为 p ~ ( w ∣ c ) \tilde{p}(w|c) p~(wc) ,我们称从它里面取出的样本为正样本,令类别 D = 1 D=1 D=1;而另一个与 c c c 无关的噪声分布为 q ( w ) q(w) q(w),我们称从里面取出的样本为负样本,令类别为 D = 0 D=0 D=0。遵循Gutmann and Hyvrinen (2012) 中的设置,假设现在取出了 k d k_d kd 个正样本和 k n k_n kn 个负样本,将这些正负样本混合形成一个混合分布 p m i x t u r e ( w ∣ c ) p_{mixture}(w|c) pmixture(wc)

我们可以得到先验概率:
p ( D = 1 ) = k d k d + k n p ( D = 0 ) = k n k d + k n p ( w ∣ D = 1 , c ) = p ~ ( w ∣ c ) p ( w ∣ D = 0 , c ) = q ( w ) (10) \begin{aligned} p(D=1)=\frac{k_d}{k_d+k_n} \\ p(D=0)=\frac{k_n}{k_d+k_n} \\ p(w|D=1,c)= \tilde{p}(w|c) \\ p(w|D=0,c)=q(w) \end{aligned} \tag {10} p(D=1)=kd+knkdp(D=0)=kd+knknp(wD=1,c)=p~(wc)p(wD=0,c)=q(w)(10)
所以可以计算后验概率:

p ( D = 0 ∣ w , c ) = p ( D = 0 ) p ( w ∣ D = 0 , c ) p ( D = 0 ) p ( w ∣ D = 0 , c ) + p ( D = 1 ) p ( w ∣ D = 1 , c ) = k n k d + k n × q ( w ) k d k d + k n × p ~ ( w ∣ c ) + k n k d + k n × q ( w ) = k n k d × q ( w ) p ~ ( w ∣ c ) + k n k d × q ( w ) p ( D = 1 ∣ w , c ) = p ( D = 1 ) p ( w ∣ D = 1 , c ) p ( D = 0 ) p ( w ∣ D = 0 , c ) + p ( D = 1 ) p ( w ∣ D = 1 , c ) = k d k d + k n × p ~ ( w ∣ c ) k d k d + k n × p ~ ( w ∣ c ) + k n k d + k n × q ( w ) = p ~ ( w ∣ c ) p ~ ( w ∣ c ) + k n k d × q ( w ) (11) \begin{aligned} p(D=0|w,c) &=\frac{p(D=0)p(w|D=0,c)}{p(D=0)p(w|D=0,c)+p(D=1)p(w|D=1,c)} \\ &=\frac{\frac{k_n}{k_d+k_n} \times q(w)}{\frac{k_d}{k_d+k_n} \times \tilde{p}(w \mid c)+\frac{k_n}{k_d+k_n} \times q(w)} \\ &=\frac{\frac{k_n}{k_d} \times q(w)}{\tilde{p}(w \mid c)+\frac{k_n}{k_d} \times q(w)} \\ \\ p(D=1|w,c)&= \frac{p(D=1)p(w|D=1,c)}{p(D=0)p(w|D=0,c)+p(D=1)p(w|D=1,c)} \\ &=\frac{\frac{k_d}{k_d+k_n} \times \tilde{p}(w|c)}{\frac{k_d}{k_d+k_n} \times \tilde{p}(w \mid c)+\frac{k_n}{k_d+k_n} \times q(w)} \\ &=\frac{\tilde{p}(w \mid c)}{\tilde{p}(w \mid c)+\frac{k_n}{k_d} \times q(w)} \end{aligned} \tag {11} p(D=0w,c)p(D=1w,c)=p(D=0)p(wD=0,c)+p(D=1)p(wD=1,c)p(D=0)p(wD=0,c)=kd+knkd×p~(wc)+kd+knkn×q(w)kd+knkn×q(w)=p~(wc)+kdkn×q(w)kdkn×q(w)=p(D=0)p(wD=0,c)+p(D=1)p(wD=1,c)p(D=1)p(wD=1,c)=kd+knkd×p~(wc)+kd+knkn×q(w)kd+knkd×p~(wc)=p~(wc)+kdkn×q(w)p~(wc)(11)

我们令负样本和正样本的比例为: k = k n k d k=\frac{k_n}{k_d} k=kdkn,则有:
p ( D = 0 ∣ w , c ) = k × q ( w ) p ~ ( w ∣ c ) + k × q ( w ) p ( D = 1 ∣ w , c ) = p ~ ( w ∣ c ) p ~ ( w ∣ c ) + k × q ( w ) (12) \begin{aligned} p(D=0|w,c) &=\frac{k \times q(w)}{\tilde{p}(w \mid c)+k \times q(w)} \\ \\ p(D=1|w,c) &=\frac{\tilde{p}(w \mid c)}{\tilde{p}(w \mid c)+k \times q(w)} \end{aligned} \tag {12} p(D=0w,c)p(D=1w,c)=p~(wc)+k×q(w)k×q(w)=p~(wc)+k×q(w)p~(wc)(12)
现在我们观察 ( 12 ) (12) (12) 式,NCE 所做的事情就是将式中的经验分布 p ~ ( w ∣ c ) \tilde{p}(w|c) p~(wc) 替换成概率模型 p θ ( w ∣ c ) p_{\theta}(w|c) pθ(wc),使后验概率称为参数为 θ \theta θ 的函数。但问题是这样现在这样的形式还是需要计算 Z ( c ) Z(c) Z(c),我们只是将原来问题进行了一定的转换从而引入了噪声分布。为了解决这个问题,NCE 做了两个设定:

  • 一个就是前面提到的,将 Z ( c ) Z(c) Z(c) 作为一个参数 z c z_c zc 来进行估计,相当于引进了一个新的参数。
  • 第二个是:事实证明(Mnih and Teh, 2012),对于参数很多的神经网络来说,我们将 z c z_c zc 固定为 1 对每个 c c c 仍是有效的。

第二个设定,即减少了参数的数量,又使模型的输出符合”归一化“的性质(即 Z ( c ) ≈ 1 Z(c)≈1 Z(c)1),是很合理的,如果 Z ( c ) = 1 Z(c)=1 Z(c)=1 ,由 ( 5 ) (5) (5) 式可以得到 p θ ( w ∣ c ) = u θ ( w ∣ c ) p_{\theta}(w|c)=u_{\theta}(w|c) pθ(wc)=uθ(wc), 那么 ( 12 ) (12) (12) 式可以写成如下形式,即具有参数 θ \theta θ 的后验概率:
p θ ( D = 0 ∣ w , c ) = k × q ( w ) u θ ( w , c ) + k × q ( w ) p θ ( D = 1 ∣ w , c ) = u θ ( w , c ) u θ ( w , c ) + k × q ( w ) (13) \begin{array}{l} p_{\theta}(D=0|w,c)=\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \\ p_{\theta}(D=1|w,c)=\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} \end{array} \tag {13} pθ(D=0w,c)=uθ(w,c)+k×q(w)k×q(w)pθ(D=1w,c)=uθ(w,c)+k×q(w)uθ(w,c)(13)
现在我们有了参数为 θ \theta θ 的二元分类问题,假设标签 D t D_t Dt 为伯努利分布,那么很容易写出他的条件对数似然 L N C E c \mathcal{L}_{NCE}^c LNCEc 如下,实际上在它前面加上负号后, − L N C E c -\mathcal{L}_{NCE}^c LNCEc 也就等价于 logistics 分类里的 log loss,或者说交叉熵损失函数:
L N C E c = ∑ t = 1 k d + k n [ D t log ⁡ P ( D = 1 ∣ w t , c ) + ( 1 − D t ) log ⁡ P ( D = 0 ∣ w t , c ) ] = ∑ t = 1 k d log ⁡ P ( D = 1 ∣ w t , c ) + ∑ t = 1 k n log ⁡ P ( D = 0 ∣ w t , c ) = ∑ t = 1 k d u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + ∑ t = 1 k n k × q ( w ) u θ ( w , c ) + k × q ( w ) (14) \begin{aligned} \mathcal{L}^c_{\mathrm{NCE}} &=\sum_{t=1}^{k_d+k_n} \left[ D_t \log P(D=1|w_t,c) +(1-D_t) \log P(D=0|w_t,c) \right] \\ &=\sum_{t=1}^{k_d}\log P(D=1|w_t,c) + \sum_{t=1}^{k_n} \log P(D=0|w_t,c) \\ &=\sum_{t=1}^{k_d}\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + \sum_{t=1}^{k_n} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \\ \end{aligned} \tag {14} LNCEc=t=1kd+kn[DtlogP(D=1wt,c)+(1Dt)logP(D=0wt,c)]=t=1kdlogP(D=1wt,c)+t=1knlogP(D=0wt,c)=t=1kduθ(w,c)+k×q(w)uθ(w,c)+t=1knuθ(w,c)+k×q(w)k×q(w)(14)
而在 NCE 的目标函数还需要在 ( 14 ) (14) (14) 式的基础上除以正样本的数量 k d k_d kd,即
J N C E c = 1 k d [ ∑ t = 1 k d u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + ∑ t = 1 k n k × q ( w ) u θ ( w , c ) + k × q ( w ) ] = 1 k d ∑ t = 1 k d u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + 1 k d ∑ t = 1 k n k × q ( w ) u θ ( w , c ) + k × q ( w ) = 1 k d ∑ t = 1 k d u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k k n ∑ t = 1 k n k × q ( w ) u θ ( w , c ) + k × q ( w ) (15) \begin{aligned} J^c_{NCE} &=\frac{1}{k_d}\left[\sum_{t=1}^{k_d}\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + \sum_{t=1}^{k_n} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}\right] \\ &=\frac{1}{k_d}\sum_{t=1}^{k_d}\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + \frac{1}{k_d} \sum_{t=1}^{k_n} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \\ &=\frac{1}{k_d}\sum_{t=1}^{k_d}\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + \frac{k}{k_n} \sum_{t=1}^{k_n} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \end{aligned} \tag {15} JNCEc=kd1[t=1kduθ(w,c)+k×q(w)uθ(w,c)+t=1knuθ(w,c)+k×q(w)k×q(w)]=kd1t=1kduθ(w,c)+k×q(w)uθ(w,c)+kd1t=1knuθ(w,c)+k×q(w)k×q(w)=kd1t=1kduθ(w,c)+k×q(w)uθ(w,c)+knkt=1knuθ(w,c)+k×q(w)k×q(w)(15)
当数据数量很大时,根据大数定律,上式也可以写成:
J N C E c = 1 k d ∑ t = 1 k d u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k k n ∑ t = 1 k n k × q ( w ) u θ ( w , c ) + k × q ( w ) = E w ∼ p ~ ( w ∣ c ) u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k E w ∼ q ( w ) k × q ( w ) u θ ( w , c ) + k × q ( w ) (16) \begin{aligned} J^c_{NCE} &=\frac{1}{k_d}\sum_{t=1}^{k_d}\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + \frac{k}{k_n} \sum_{t=1}^{k_n} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \\ &=\mathbb{E}_{w \sim \tilde{p}(w|c)} \frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)} + k \mathbb{E}_{w \sim q(w)} \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \end{aligned} \tag {16} JNCEc=kd1t=1kduθ(w,c)+k×q(w)uθ(w,c)+knkt=1knuθ(w,c)+k×q(w)k×q(w)=Ewp~(wc)uθ(w,c)+k×q(w)uθ(w,c)+kEwq(w)uθ(w,c)+k×q(w)k×q(w)(16)
要最大化上述对数似然函数,也就是最大化如下目标函数:
J N C E c = E w ∼ p ~ ( w ∣ c ) log ⁡ u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k E w ∼ q ( w ) log ⁡ k × q ( w ) u θ ( w , c ) + k × q ( w ) (17) \begin{aligned} J^c_{NCE}&= \mathbb{E}_{w \sim \tilde{p}(w|c)}{\log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)}}} + k\mathbb{E}_{w \sim q(w)} {\log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}}} \\ \end{aligned} \tag {17} JNCEc=Ewp~(wc)loguθ(w,c)+k×q(w)uθ(w,c)+kEwq(w)loguθ(w,c)+k×q(w)k×q(w)(17)
NCE 目标函数中的 k k k 实际上就是在设置“二分类问题”时,选取的负样本与正样本的比例,通常的做法会默认正样本数量为 1 ,然后将负样本的数量 k k k 作为一个手动输入的参数,从而确定这个比例 k k k。在 TensorFlow 中,正样本的数量 num_true 默认值为1,如果设置大于 1,那么会进行一个 $1 / {\text{num_ture}} $ 的归一化。
在这里插入图片描述

可以看到实际上这个比例 k k k 对我们的 NCE 优化是有影响的,所以 NCE 的作者也考虑了什么样的比例 k k k 是最好的,我这里就直接说结论了,有兴趣的可以看详细看下这篇论文 Gutmann and Hyvrinen (2012) 。

结论是:对于设置的噪声分布 q ( w ) q(w) q(w),我们实际上是希望它尽量接近数据分布 p ~ ( w ∣ c ) \tilde{p}(w|c) p~(wc) 的,否则这个二分类任务就过于简单了,也就无法很好的学到数据特性。而作者通过实验和推导证明(我在第三节中也会简单的证明一下),当负样本和正样本数量之比 k k k 越大,那么我们的 NCE 对于噪声分布好坏的依赖程度也就越小。换句话说,作者建议我们在计算能力运行的条件下,尽可能的增大比值 k k k。也许这也就是大家都默认将正样本数量设置为 1 1 1 的原因:正样本至少取要 1 个,所以最大化比值 k k k,也就是尽可能取更多负样本的同时,将正样本数量取最小值 1 1 1.

另外,如果我们希望目标函数不是只针对一个特定的上下文 c c c,而是使不同的上下文可以共享参数,也就是设置一批上下文的全局目标函数:
J N C E = ∑ c P ( c ) J N C E c (18) \begin{aligned} J_{NCE} &=\sum_c P(c) J^c_{NCE} \\ \end{aligned} \tag {18} JNCE=cP(c)JNCEc(18)
到这,NCE 的构建就完成了,总结一下就是:从上下文 c c c 中取出单词作为正样本,从噪声分布中取出单词作为负样本,正负样本数量比为 1 : k 1:k 1:k,然后训练一个二分类器,通过一个类似于交叉熵损失函数的目标函数进行训练(如果取正样本数量为1,那么 ( 14 ) (14) (14) 式与 ( 15 ) (15) (15) 式等价,NCE 目标函数就等价于交叉熵损失函数)。

3 NCE 的原理

上面虽然推导了那么多公式,但实际只是按照 NCE 的思想进行问题的转换,那么这样做究竟是否正确呢?根据附录 3 的描述,直觉上看好像是没有问题的。

我们再看回 ( 17 ) (17) (17) 式,我们对它关于 θ \theta θ 进行求导:
∂ ∂ θ J N C E c ( θ ) = ∂ ∂ θ [ E w ∼ p ~ ( w ∣ c ) log ⁡ u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k E w ∼ q ( w ) log ⁡ k × q ( w ) u θ ( w , c ) + k × q ( w ) ] = ∂ ∂ θ ∑ w p ~ ( w ∣ c ) log ⁡ u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + ∂ ∂ θ k ∑ w q ( w ) log ⁡ k × q ( w ) u θ ( w , c ) + k × q ( w ) = ∑ w p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k ∑ w q ( w ) ∂ ∂ θ log ⁡ k × q ( w ) u θ ( w , c ) + k × q ( w ) (19) \begin{aligned} \frac{\partial}{\partial \theta} J^c_{NCE}(\theta)&= \frac{\partial}{\partial \theta} \left[\mathbb{E}_{w \sim \tilde{p}(w|c)}{\log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)}}} + k\mathbb{E}_{w \sim q(w)} {\log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}}} \right] \\ &=\frac{\partial}{\partial \theta} \sum_{w} \tilde{p}(w|c) \log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)}} + \frac{\partial}{\partial \theta} k\sum_{w}q(w) \log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}} \\ &=\sum_{w} \tilde{p}(w|c)\frac{\partial}{\partial \theta} \log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)}} + k\sum_{w}q(w) \frac{\partial}{\partial \theta} \log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}} \\ \end{aligned} \tag {19} θJNCEc(θ)=θ[Ewp~(wc)loguθ(w,c)+k×q(w)uθ(w,c)+kEwq(w)loguθ(w,c)+k×q(w)k×q(w)]=θwp~(wc)loguθ(w,c)+k×q(w)uθ(w,c)+θkwq(w)loguθ(w,c)+k×q(w)k×q(w)=wp~(wc)θloguθ(w,c)+k×q(w)uθ(w,c)+kwq(w)θloguθ(w,c)+k×q(w)k×q(w)(19)
分布对上面的两项进行求导:
∂ ∂ θ l o g u θ ( w , c ) u θ ( w , c ) + k × q ( w ) = − ∂ ∂ θ l o g ( 1 + k × q ( w ) u θ ( w , c ) ) = − 1 1 + k × q ( w ) u θ ( w , c ) ∂ ∂ θ k × q ( w ) u θ ( w , c ) = − 1 1 + k × q ( w ) u θ ( w , c ) ( k × q ( w ) ) − 1 [ u θ ( w , c ) ] 2 ∂ ∂ θ 1 u θ ( w , c ) = k × q ( w ) u θ ( w , c ) + k × q ( w ) 1 u θ ( w , c ) ∂ ∂ θ 1 u θ ( w , c ) = k × q ( w ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ l o g u θ ( w , c ) (20) \begin{aligned} \frac{\partial}{\partial \theta} log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q({w})}} &= -\frac{\partial}{\partial \theta}log{(1+\frac{k \times q(w)}{u_{\theta}(w,c)})} \\ &=-\frac{1}{1+\frac{k \times q(w)}{u_{\theta}(w,c)}}\frac{\partial}{\partial \theta}\frac{k \times q(w)}{u_{\theta}(w,c)} \\ &=-\frac{1}{1+\frac{k \times q({w})}{u_{\theta}(w,c)}} (k \times q(w)) \frac{-1} {[u_{\theta}(w,c)]^2} \frac{\partial}{\partial \theta} \frac{1}{u_{\theta}(w, c)} \\ &=\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \frac{1}{u_{\theta}(w,c)} \frac{\partial}{\partial \theta} \frac{1}{u_{\theta}(w,c)} \\ &=\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \frac{\partial}{\partial \theta} log{u_{\theta}(w,c)} \end{aligned} \tag {20} θloguθ(w,c)+k×q(w)uθ(w,c)=θlog(1+uθ(w,c)k×q(w))=1+uθ(w,c)k×q(w)1θuθ(w,c)k×q(w)=1+uθ(w,c)k×q(w)1(k×q(w))[uθ(w,c)]21θuθ(w,c)1=uθ(w,c)+k×q(w)k×q(w)uθ(w,c)1θuθ(w,c)1=uθ(w,c)+k×q(w)k×q(w)θloguθ(w,c)(20)

∂ ∂ θ l o g k × q ( w ) u θ ( w , c ) + k × q ( w ) = − ∂ ∂ θ l o g ( 1 + u θ ( w , c ) k × q ( w ) ) = − 1 1 + u θ ( w , c ) k × q ( w ) ∂ ∂ θ u θ ( w , c ) k × q ( w ) = − 1 1 + u θ ( w , c ) k × q ( w ) 1 k × q ( w ) ∂ ∂ θ u θ ( w , c ) = − 1 u θ ( w , c ) + k × q ( w ) ∂ ∂ θ u θ ( w , c ) = − u θ ( w , c ) u θ ( w , c ) + k × q ( w ) 1 u θ ( w , c ) ∂ ∂ θ u θ ( w , c ) = − u θ ( w , c ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ l o g u θ ( w , c ) (21) \begin{aligned} \frac{\partial}{\partial \theta} log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}} &=-\frac{\partial}{\partial \theta}log{(1+\frac{u_{\theta}(w,c)}{k \times q(w)})} \\ &=-\frac{1}{1+\frac{u_{\theta}(w,c)}{k \times q(w)}}\frac{\partial}{\partial \theta}\frac{u_{\theta}(w,c)}{k \times q(w)} \\ &=-\frac{1}{1+\frac{u_{\theta}(w,c)}{k \times q(w)}} \frac{1}{k \times q(w)} \frac{\partial}{\partial \theta}u_{\theta}(w,c) \\ &=-\frac{1}{u_{\theta}(w,c) + k \times q(w)} \frac{\partial}{\partial \theta}u_{\theta}(w,c) \\ &=-\frac{u_{\theta}(w,c)}{u_{\theta}(w,c) + k \times q(w)} \frac{1}{u_{\theta}(w,c)} \frac{\partial}{\partial \theta}u_{\theta}(w,c) \\ &=-\frac{u_{\theta}(w,c)}{u_{\theta}(w,c) + k \times q(w)} \frac{\partial}{\partial \theta}log{u_{\theta}(w,c)} \\ \end{aligned} \tag {21} θloguθ(w,c)+k×q(w)k×q(w)=θlog(1+k×q(w)uθ(w,c))=1+k×q(w)uθ(w,c)1θk×q(w)uθ(w,c)=1+k×q(w)uθ(w,c)1k×q(w)1θuθ(w,c)=uθ(w,c)+k×q(w)1θuθ(w,c)=uθ(w,c)+k×q(w)uθ(w,c)uθ(w,c)1θuθ(w,c)=uθ(w,c)+k×q(w)uθ(w,c)θloguθ(w,c)(21)
将结果再带回 ( 19 ) (19) (19) 式中,并根据前面 Z ( c ) = 1 Z(c)=1 Z(c)=1 的设定,也就是 p θ ( w , c ) = u θ ( w , c ) p_{\theta}(w,c)=u_{\theta}(w,c) pθ(w,c)=uθ(w,c)
∂ ∂ θ J N C E c ( θ ) = ∑ w p ~ ( w ∣ c ) ∂ ∂ θ log ⁡ u θ ( w , c ) u θ ( w , c ) + k × q ( w ) + k ∑ w q ( w ) ∂ ∂ θ log ⁡ k × q ( w ) u θ ( w , c ) + k × q ( w ) = ∑ w p ~ ( w ∣ c ) k × q ( w ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ log ⁡ u θ ( w , c ) − k ∑ w q ( w ) u θ ( w , c ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ log ⁡ u θ ( w , c ) = ∑ w p ~ ( w ∣ c ) k × q ( w ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ log ⁡ u θ ( w , c ) − ∑ w u θ ( w , c ) k × q ( w ) u θ ( w , c ) + k × q ( w ) ∂ ∂ θ log ⁡ u θ ( w , c ) = ∑ w [ k × q ( w ) u θ ( w , c ) + k × q ( w ) ( p ~ ( w ∣ c ) − u θ ( w , c ) ) ∂ ∂ θ l o g u θ ( w , c ) ] (22) \begin{aligned} \frac{\partial}{\partial \theta} J^c_{NCE}(\theta) &=\sum_{w} \tilde{p}(w|c)\frac{\partial}{\partial \theta} \log{\frac{u_{\theta}(w, c)}{u_{\theta}(w, c)+k \times q(w)}} + k\sum_{w}q(w) \frac{\partial}{\partial \theta} \log{\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)}} \\ &=\sum_{w} \tilde{p}(w|c) \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - k\sum_{w}q(w) \frac{u_{\theta}(w,c)}{u_{\theta}(w,c) + k \times q(w)} \frac{\partial}{\partial \theta}\log{u_{\theta}(w,c)} \\ &=\sum_{w} \tilde{p}(w|c) \frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \frac{\partial}{\partial \theta} \log{u_{\theta}(w,c)} - \sum_{w} u_{\theta}(w,c) \frac{k \times q(w)}{u_{\theta}(w,c) + k \times q(w)} \frac{\partial}{\partial \theta}\log{u_{\theta}(w,c)} \\ &=\sum_w{\left[\frac{k \times q(w)}{u_{\theta}(w, c)+k \times q(w)} \left(\tilde{p}(w|c)- u_{\theta}(w,c)\right)\frac{\partial}{\partial \theta}log u_{\theta}(w,c)\right]} \end{aligned} \tag {22} θJNCEc(θ)=wp~(wc)θloguθ(w,c)+k×q(w)uθ(w,c)+kwq(w)θloguθ(w,c)+k×q(w)k×q(w)=wp~(wc)uθ(w,c)+k×q(w)k×q(w)θloguθ(w,c)kwq(w)uθ(w,c)+k×q(w)uθ(w,c)θloguθ(w,c)=wp~(wc)uθ(w,c)+k×q(w)k×q(w)θloguθ(w,c)wuθ(w,c)uθ(w,c)+k×q(w)k×q(w)θloguθ(w,c)=w[uθ(w,c)+k×q(w)k×q(w)(p~(wc)uθ(w,c))θloguθ(w,c)](22)
上一节中我们设定了 Z ( c ) = 1 Z(c)=1 Z(c)=1,也就是 p θ ( w ∣ c ) = u θ ( w , c ) p_{\theta}(w|c)=u_{\theta}(w,c) pθ(wc)=uθ(w,c),因此:
∂ ∂ θ J N C E c ( θ ) = ∑ w [ k × q ( w ) p θ ( w ∣ c ) + k × q ( w ) ( p ~ ( w ∣ c ) − p θ ( w ∣ c ) ) ∂ ∂ θ l o g u θ ( w , c ) ] (23) \begin{aligned} \frac{\partial}{\partial \theta} J^c_{NCE}(\theta) &=\sum_w{\left[\frac{k \times q(w)}{p_{\theta}(w|c)+k \times q(w)} \left(\tilde{p}(w|c)- p_{\theta}(w|c)\right)\frac{\partial}{\partial \theta}log u_{\theta}(w,c)\right]} \end{aligned} \tag {23} θJNCEc(θ)=w[pθ(wc)+k×q(w)k×q(w)(p~(wc)pθ(wc))θloguθ(w,c)](23)
这里的参数 k k k 依然指的是负样本与正样本数量的比例,如果我们令 k → ∞ k\to\infty k 的话,那么:
lim ⁡ k → ∞ ∂ ∂ θ J N C E c ( θ ) = lim ⁡ k → ∞ ∑ w [ q ( w ) p θ ( w ∣ c ) k + q ( w ) ( p ~ ( w ∣ c ) − p θ ( w ∣ c ) ) ∂ ∂ θ l o g u θ ( w , c ) ] = ∑ w [ ( p ~ ( w ∣ c ) − p θ ( w ∣ c ) ) ∂ ∂ θ l o g u θ ( w , c ) ] (24) \begin{aligned} \lim_{k \to \infty} \frac{\partial}{\partial \theta} J^c_{NCE}(\theta) &=\lim_{k \to \infty} \sum_w{\left[\frac{q(w)}{ \frac{p_{\theta}(w|c)}{k}+q(w)} \left(\tilde{p}(w|c)- p_{\theta}(w|c)\right)\frac{\partial}{\partial \theta}log u_{\theta}(w,c)\right]} \\ &= \sum_w{\left[\left(\tilde{p}(w|c)- p_{\theta}(w|c)\right)\frac{\partial}{\partial \theta}log u_{\theta}(w,c)\right]} \end{aligned} \tag {24} klimθJNCEc(θ)=klimw[kpθ(wc)+q(w)q(w)(p~(wc)pθ(wc))θloguθ(w,c)]=w[(p~(wc)pθ(wc))θloguθ(w,c)](24)
可以看到,当 k k k 趋于无穷时, ( 24 ) (24) (24) 式中 NCE 目标函数的梯度和 ( 9 ) (9) (9) 式中 MLE 对数似然函数梯度是等价的,也就是说我们通过 NCE 转换后的优化目标,本质上就是对极大似然估计方法的一种近似,并且随着负样本和正样本数量比 k k k 的增大,这种近似越精确,这也解释了为什么作者建议我们将 k k k 设置的越大越好。

4 从 NCE 到 InfoNCE

到目前为止,应该对 NCE 的来龙去脉比较清楚了(至少我比较清楚了,公式太多不知道多少人有耐心看到这里了…)。

InfoNCE 是在 Representation Learning with Contrastive Predictive Coding 这篇论文中提出的,这里不会具体介绍 CPC ,而是着重说明如何借鉴 NCE 的思想提出 InfoNCE 并用于 CPC 中的,如果还不太了解的可以看我的这篇文章 对 CPC (对比预测编码) 的理解。

简单来说,CPC(对比预测编码) 就是一种通过无监督任务来学习(编码)高维数据在的特征表示(representation),而通常采取的无监督策略就是根据上下文预测未来或者缺失的信息,NLP 中已经利用这种思想来学习 word 的 representation [ 1 ] ^{[1]} [1]。而作者认为,要构建这样的预测任务,一个方法是直接建模条件生成模型 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct) 根据当前上下文 c t c_t ct预测 k k k 个时刻后的数据 x t + k x_{t+k} xt+k(假设是像文本/语音中那样的序列数据);但作者觉得这样的方法过于针对细节进行重建,并不是很好,于是引入了互信息的思想,认为我们可以通过最大化当前上下文 c t c_t ct 和要未来的数据 x t + k x_{t+k} xt+k 之间的互信息来构建预测任务,互信息的表示如下:
I ( x t + k ; c t ) = ∑ x , c p ( x t + k , c t ) log ⁡ p ( x t + k ∣ c t ) p ( x t + k ) (25) \begin{aligned} I(x_{t+k} ; c_t)=\sum_{x, c} p(x_{t+k}, c_t) \log \frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})} \end{aligned} \tag {25} I(xt+k;ct)=x,cp(xt+k,ct)logp(xt+k)p(xt+kct)(25)
我们没办法知道 x t + k x_{t+k} xt+k c t c_t ct 之间的联合分布 p ( x t + k , c t ) p(x_{t+k},c_t) p(xt+k,ct) ,因此要最大化 I ( x t + k ; c t ) I(x_{t+k} ; c_t) I(xt+k;ct),就需要从 p ( x t + k ∣ c t ) p ( x t + k ) \frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})} p(xt+k)p(xt+kct) 入手,即最大化 p ( x t + k ∣ c t ) p ( x t + k ) \frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})} p(xt+k)p(xt+kct)

那么如何训练 p ( x t + k ∣ c t ) p ( x t + k ) \frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})} p(xt+k)p(xt+kct) 呢?我们可以把这个比例定义为密度比,那么根据附录 3 中的思想,分子 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct) 就相当于 p d p_d pd,是我们想得到的目标函数;分母 p ( x t + k ) p(x_{t+k}) p(xt+k) 就相当于 p n p_n pn ,是用来进行对比的参考分布(噪声)。

因此,我们就可以根据 NCE 中提供的思路,将问题转换为一个二分类的问题,更具体来解释:

  • 从条件 p ( x t + k ∣ c t ) p(x_{t+k} \mid c_t) p(xt+kct) 中取出数据称为“正样本”,它是根据上下文 c t c_t ct 所做出的预测数据,将它和这个上下文一起组成“正样本对”,类别标签设为 1。
  • 将从 p ( x t + k ) p(x_{t+k}) p(xt+k) 中取出的样本称为“负样本”,它是与当前上下文 c t c_t ct 没有必然关系的随机数据,将它和这个上下文 c t c_t ct 一起组成“负样本对”,类别标签设为 0。
  • 正样本也就是与 c t c_t ct 间隔固定步长 k k k 的数据,根据 NCE 中说明的设定,正样本选取 1 个;因为在 NCE 中证明了噪声分布与数据分布越接近越好,所以负样本就直接在当前序列中随机选取(只要不是那一个正样本就行),负样本数量越多越好。

所以要做的就是训练一个 logistics 分类模型,来区分这两个正负样本对。问题转换后,训练的模型能够“成功分辨出每个正负样本的能力”就等价于“根据 c t c_t ct 预测 x t + k x_{t+k} xt+k 的能力”。

根据 NCE 中的设置,现在假设给出一组大小为 N N N X = { x 1 , … , x N } X=\{x_1,\dots,x_N\} X={x1,,xN},其中包含 1 1 1 个从 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct) 中取样正样本和 N − 1 N-1 N1 从一个指定分布(用于对比的噪声分布) p ( x t + k ) p(x_{t+k}) p(xt+k),假设第 x i x_i xi 是正样本,且 i = t + k i=t+k i=t+k,上下文 c t c_t ct 表示 t t t 之前的数据,那么能够正确的同时找到那一个正样本 x t + k x_{t+k} xt+k N − 1 N-1 N1 个负样本的情况可以写成如下形式:
p ( d = i ∣ X , c t ) = p ( x t + k ∣ c t ) = p ( x t + k ∣ c t ) ∏ l ≠ t + k p ( x l ) ∑ j = 1 N p ( x j ∣ c t ) ∏ l ≠ j p ( x l ) = p ( x t + k ∣ c t ) p ( x t + k ) ∑ j = 1 N p ( x j ∣ c t ) p ( x j ) (26) \begin{aligned} p\left(d=i \mid X, c_{t}\right)&=p(x_{t+k}|c_t)\\ &=\frac{p\left(x_{t+k} \mid c_{t}\right) \prod_{l \neq t+k} p\left(x_{l}\right)}{\sum_{j=1}^{N} p\left(x_{j} \mid c_{t}\right) \prod_{l \neq j} p\left(x_{l}\right)} \\ &=\frac{\frac{p\left(x_{t+k} \mid c_{t}\right)}{p\left(x_{t+k}\right)}}{\sum_{j=1}^{N} \frac{p\left(x_{j} \mid c_{t}\right)}{p\left(x_{j}\right)}} \end{aligned} \tag {26} p(d=iX,ct)

你可能感兴趣的:(人工智能,人工智能,NLP,NCE,噪声对比估计,InfoNCE)