文章首发于: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,那么语言模型的任务就是预测每个句子在语言中出现的概率。如果把句子 sss 看成单词 www 的序列 s={w1,w2,...,wm}s=\{w_1,w_2,...,w_m\}s={w1​,w2​,...,wm​},那么语言模型就是建模一个 p(w1,w2,...,wm)p(w_1,w_2,...,w_m)p(w1​,w2​,...,wm​) 来计算这个句子 sss 出现的概率,直观上我们要得到这个语言模型,基于链式法则可以表示为每个单词出现的条件概率的乘积,我们将条件概率的条件 (w1,w2,...,wi−1)(w_1,w_2,...,w_{i-1})(w1​,w2​,...,wi−1​) 称为单词 wiw_iwi​ 的上下文,用 cic_ici​ 表示。
p(w1,w2,…,wm)=p(w1)∗p(w2∣w1)∗p(w3∣w1,w2)…p(wm∣w1,…,wm−1)=∏i=1mp(wi∣w1,w2,…,wi−1)=∏i=1mp(wi∣ci)(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(w2​∣w1​)∗p(w3​∣w1​,w2​)…p(wm​∣w1​,…,wm−1​)=i=1∏m​p(wi​∣w1​,w2​,…,wi−1​)=i=1∏m​p(wi​∣ci​)​(1)
可以看到,language model 就是条件概率 p(wi∣ci)p(w_i|c_i)p(wi​∣ci​) 的集合,但是直接计算每个条件概率是不现实的。因此在统计语言模型中,引入了马尔可夫假设,即“一个词出现的概率只与它前面出现的有限的一个或者 n 个词有关”,将这 nnn 个词称为一个 gram,这就是著名的 n-gram 模型,因此可以将模型简化为:
p(w1,w2,w3,…,wm)=∏i=1mp(wi∣wi−n+1,…,wi−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=1∏m​p(wi​∣wi−n+1​,…,wi−1​)(2)

1.3 最大似然估计

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

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

1.4 神经概率语言模型

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

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

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

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

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

假设输入到 softmax 前的结果用 sθ(w,c)s_{\theta}(w,c)sθ​(w,c) 表示,实际上 sθ(w,c)s_{\theta}(w,c)sθ​(w,c) 是有含义的,它是一个 socring function ,输出的分数用来量化 www 在上下文 ccc 中匹配性,那么 www 条件概率可以表示为以下形式:
pθ(w∣c)=exp(sθ(w,c))∑w′∈Vexp(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θ​(w∣c)​=∑w′∈V​exp(sθ​(w,c))exp(sθ​(w,c))​=Z(c)uθ​(w,c)​​(5)
式中, uθ(w,c)=exp(sθ(w,c))u_{\theta}(w,c)=exp(s_{\theta}(w,c))uθ​(w,c)=exp(sθ​(w,c)) 表示下一个单词是这个 www 在单词库中的概率;令 Z(c)=∑w′∈Vexp(sθ(w,c))Z(c) = \sum_{w^\prime \in V}exp(s_{\theta}(w,c))Z(c)=∑w′∈V​exp(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) 式中所构造的函数 FFF 的表达式, 既然如此,那我们接着用 1.3 中提到的最大似然估计的方式来试着求解 FFF 的参数 θ\thetaθ。我们将从句子(语料) sss 中取样的 www 看成经验分布(数据分布) p~(w∣c)\tilde{p}(w|c)p~​(w∣c) ,(3)(3)(3) 式中的 LMLE\mathcal{L}_{MLE}LMLE​ 可以写成:
LMLE=∑w∼p~(w∣c)log⁡pθ(w∣c)=Ew∼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​​=w∼p~​(w∣c)∑​logpθ​(w∣c)=Ew∼p~​(w∣c)​logZ(c)uθ​(w,c)​​(6)
现在要最大化 LMLE\mathcal{L}_{MLE}LMLE​,那么将其关于 θ\thetaθ 求导:
∂∂θLMLE=Ew∼p~(w∣c)∂∂θlog⁡uθ(w,c)Z(c)=Ew∼p~(w∣c)[∂∂θlog⁡uθ(w,c)−∂∂θlog⁡Z(c)]=Ew∼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​​=Ew∼p~​(w∣c)​∂θ∂​logZ(c)uθ​(w,c)​=Ew∼p~​(w∣c)​[∂θ∂​loguθ​(w,c)−∂θ∂​logZ(c)]=Ew∼p~​(w∣c)​∂θ∂​loguθ​(w,c)−∂θ∂​logZ(c)​(7)

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

(7)(7)(7) 式结果中的 ∂∂θlog⁡Z(c)\frac{\partial}{\partial \theta} \log{Z(c)}∂θ∂​logZ(c) 计算如下:
∂∂θlog⁡Z(c)=1Z(c)∂∂θZ(c)=1Z(c)∂∂θ∑w′∈Vuθ(w,c)=1Z(c)∂∂θ∑w′∈Vexp(sθ(w,c))=∑w′∈V1Z(c)exp(sθ(w,c))∂∂θsθ(w,c)=∑w′∈Vpθ(w∣c)∂∂θsθ(w,c)=Ew∼pθ(w∣c)∂∂θsθ(w,c)=Ew∼pθ(w∣c)∂∂θloguθ(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​∂θ∂​w′∈V∑​uθ​(w,c)=Z(c)1​∂θ∂​w′∈V∑​exp(sθ​(w,c))=w′∈V∑​Z(c)1​exp(sθ​(w,c))∂θ∂​sθ​(w,c)=w′∈V∑​pθ​(w∣c)∂θ∂​sθ​(w,c)=Ew∼pθ​(w∣c)​∂θ∂​sθ​(w,c)=Ew∼pθ​(w∣c)​∂θ∂​loguθ​(w,c)​(8)

将 (8)(8)(8) 式结果带回 (7)(7)(7) 式中得:
∂∂θLMLE=Ew∼p~(w∣c)∂∂θlog⁡uθ(w,c)−∂∂θlog⁡Z(c)=Ew∼p~(w∣c)∂∂θlog⁡uθ(w,c)−Ew∼pθ(w∣c)∂∂θloguθ(w,c)=∑wp~(w∣c)∂∂θlog⁡uθ(w,c)−∑wpθ(w∣c)∂∂θloguθ(w,c)=∑w[p~(w∣c)∂∂θlog⁡uθ(w,c)−pθ(w∣c)∂∂θloguθ(w,c)]=∑w[(p~(w∣c)−pθ(w∣c))∂∂θloguθ(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​​=Ew∼p~​(w∣c)​∂θ∂​loguθ​(w,c)−∂θ∂​logZ(c)=Ew∼p~​(w∣c)​∂θ∂​loguθ​(w,c)−Ew∼pθ​(w∣c)​∂θ∂​loguθ​(w,c)=w∑​p~​(w∣c)∂θ∂​loguθ​(w,c)−w∑​pθ​(w∣c)∂θ∂​loguθ​(w,c)=w∑​[p~​(w∣c)∂θ∂​loguθ​(w,c)−pθ​(w∣c)∂θ∂​loguθ​(w,c)]=w∑​[(p~​(w∣c)−pθ​(w∣c))∂θ∂​loguθ​(w,c)]​(9)
看似最大似然很美好,但是实际上还是绕不开对“归一化常数”的计算,所以就需要 NCE 登场了。

2 什么是 NCE

上一节中说明了计算 Z(c)Z(c)Z(c) 非常昂贵这个问题需要解决,一个简单的思路是将 Z(c)Z(c)Z(c) 也看出模型的一个参数 zcz_czc​ 来进行训练,但是这种方法不适合于上面提到的最大似然估计,因为由 (6)(6)(6) 式可以看出来,它会直接将 Z(c)Z(c)Z(c) 趋于 000 来获得最大似然。因此,也有人提利用这个思想提出了一些不定义 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)

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

我们可以得到先验概率:
p(D=1)=kdkd+knp(D=0)=knkd+knp(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​+kn​kd​​p(D=0)=kd​+kn​kn​​p(w∣D=1,c)=p~​(w∣c)p(w∣D=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)=knkd+kn×q(w)kdkd+kn×p~(w∣c)+knkd+kn×q(w)=knkd×q(w)p~(w∣c)+knkd×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)=kdkd+kn×p~(w∣c)kdkd+kn×p~(w∣c)+knkd+kn×q(w)=p~(w∣c)p~(w∣c)+knkd×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=0∣w,c)p(D=1∣w,c)​=p(D=0)p(w∣D=0,c)+p(D=1)p(w∣D=1,c)p(D=0)p(w∣D=0,c)​=kd​+kn​kd​​×p~​(w∣c)+kd​+kn​kn​​×q(w)kd​+kn​kn​​×q(w)​=p~​(w∣c)+kd​kn​​×q(w)kd​kn​​×q(w)​=p(D=0)p(w∣D=0,c)+p(D=1)p(w∣D=1,c)p(D=1)p(w∣D=1,c)​=kd​+kn​kd​​×p~​(w∣c)+kd​+kn​kn​​×q(w)kd​+kn​kd​​×p~​(w∣c)​=p~​(w∣c)+kd​kn​​×q(w)p~​(w∣c)​​(11)

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

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

第二个设定,即减少了参数的数量,又使模型的输出符合”归一化“的性质(即 Z(c)≈1Z(c)≈1Z(c)≈1),是很合理的,如果 Z(c)=1Z(c)=1Z(c)=1 ,由 (5)(5)(5) 式可以得到 pθ(w∣c)=uθ(w∣c)p_{\theta}(w|c)=u_{\theta}(w|c)pθ​(w∣c)=uθ​(w∣c), 那么 (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=0∣w,c)=uθ​(w,c)+k×q(w)k×q(w)​pθ​(D=1∣w,c)=uθ​(w,c)+k×q(w)uθ​(w,c)​​(13)
现在我们有了参数为 θ\thetaθ 的二元分类问题,假设标签 DtD_tDt​ 为伯努利分布,那么很容易写出他的条件对数似然 LNCEc\mathcal{L}_{NCE}^cLNCEc​ 如下,实际上在它前面加上负号后,−LNCEc-\mathcal{L}_{NCE}^c−LNCEc​ 也就等价于 logistics 分类里的 log loss,或者说交叉熵损失函数:
LNCEc=∑t=1kd+kn[Dtlog⁡P(D=1∣wt,c)+(1−Dt)log⁡P(D=0∣wt,c)]=∑t=1kdlog⁡P(D=1∣wt,c)+∑t=1knlog⁡P(D=0∣wt,c)=∑t=1kduθ(w,c)uθ(w,c)+k×q(w)+∑t=1knk×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=1∑kd​+kn​​[Dt​logP(D=1∣wt​,c)+(1−Dt​)logP(D=0∣wt​,c)]=t=1∑kd​​logP(D=1∣wt​,c)+t=1∑kn​​logP(D=0∣wt​,c)=t=1∑kd​​uθ​(w,c)+k×q(w)uθ​(w,c)​+t=1∑kn​​uθ​(w,c)+k×q(w)k×q(w)​​(14)
而在 NCE 的目标函数还需要在 (14)(14)(14) 式的基础上除以正样本的数量 kdk_dkd​,即
JNCEc=1kd[∑t=1kduθ(w,c)uθ(w,c)+k×q(w)+∑t=1knk×q(w)uθ(w,c)+k×q(w)]=1kd∑t=1kduθ(w,c)uθ(w,c)+k×q(w)+1kd∑t=1knk×q(w)uθ(w,c)+k×q(w)=1kd∑t=1kduθ(w,c)uθ(w,c)+k×q(w)+kkn∑t=1knk×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​​=kd​1​[t=1∑kd​​uθ​(w,c)+k×q(w)uθ​(w,c)​+t=1∑kn​​uθ​(w,c)+k×q(w)k×q(w)​]=kd​1​t=1∑kd​​uθ​(w,c)+k×q(w)uθ​(w,c)​+kd​1​t=1∑kn​​uθ​(w,c)+k×q(w)k×q(w)​=kd​1​t=1∑kd​​uθ​(w,c)+k×q(w)uθ​(w,c)​+kn​k​t=1∑kn​​uθ​(w,c)+k×q(w)k×q(w)​​(15)
当数据数量很大时,根据大数定律,上式也可以写成:
JNCEc=1kd∑t=1kduθ(w,c)uθ(w,c)+k×q(w)+kkn∑t=1knk×q(w)uθ(w,c)+k×q(w)=Ew∼p~(w∣c)uθ(w,c)uθ(w,c)+k×q(w)+kEw∼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​​=kd​1​t=1∑kd​​uθ​(w,c)+k×q(w)uθ​(w,c)​+kn​k​t=1∑kn​​uθ​(w,c)+k×q(w)k×q(w)​=Ew∼p~​(w∣c)​uθ​(w,c)+k×q(w)uθ​(w,c)​+kEw∼q(w)​uθ​(w,c)+k×q(w)k×q(w)​​(16)
要最大化上述对数似然函数,也就是最大化如下目标函数:
JNCEc=Ew∼p~(w∣c)log⁡uθ(w,c)uθ(w,c)+k×q(w)+kEw∼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​​=Ew∼p~​(w∣c)​loguθ​(w,c)+k×q(w)uθ​(w,c)​+kEw∼q(w)​loguθ​(w,c)+k×q(w)k×q(w)​​(17)
NCE 目标函数中的 kkk 实际上就是在设置“二分类问题”时,选取的负样本与正样本的比例,通常的做法会默认正样本数量为 1 ,然后将负样本的数量 kkk 作为一个手动输入的参数,从而确定这个比例 kkk。在 TensorFlow 中,正样本的数量 num_true 默认值为1,如果设置大于 1,那么会进行一个 $1 / {\text{num_ture}} $ 的归一化。

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

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

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

3 NCE 的原理

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

我们再看回 (17)(17)(17) 式,我们对它关于 θ\thetaθ 进行求导:
∂∂θJNCEc(θ)=∂∂θ[Ew∼p~(w∣c)log⁡uθ(w,c)uθ(w,c)+k×q(w)+kEw∼q(w)log⁡k×q(w)uθ(w,c)+k×q(w)]=∂∂θ∑wp~(w∣c)log⁡uθ(w,c)uθ(w,c)+k×q(w)+∂∂θk∑wq(w)log⁡k×q(w)uθ(w,c)+k×q(w)=∑wp~(w∣c)∂∂θlog⁡uθ(w,c)uθ(w,c)+k×q(w)+k∑wq(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​(θ)​=∂θ∂​[Ew∼p~​(w∣c)​loguθ​(w,c)+k×q(w)uθ​(w,c)​+kEw∼q(w)​loguθ​(w,c)+k×q(w)k×q(w)​]=∂θ∂​w∑​p~​(w∣c)loguθ​(w,c)+k×q(w)uθ​(w,c)​+∂θ∂​kw∑​q(w)loguθ​(w,c)+k×q(w)k×q(w)​=w∑​p~​(w∣c)∂θ∂​loguθ​(w,c)+k×q(w)uθ​(w,c)​+kw∑​q(w)∂θ∂​loguθ​(w,c)+k×q(w)k×q(w)​​(19)
分布对上面的两项进行求导:
∂∂θloguθ(w,c)uθ(w,c)+k×q(w)=−∂∂θlog(1+k×q(w)uθ(w,c))=−11+k×q(w)uθ(w,c)∂∂θk×q(w)uθ(w,c)=−11+k×q(w)uθ(w,c)(k×q(w))−1[uθ(w,c)]2∂∂θ1uθ(w,c)=k×q(w)uθ(w,c)+k×q(w)1uθ(w,c)∂∂θ1uθ(w,c)=k×q(w)uθ(w,c)+k×q(w)∂∂θloguθ(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)]2−1​∂θ∂​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)

∂∂θlogk×q(w)uθ(w,c)+k×q(w)=−∂∂θlog(1+uθ(w,c)k×q(w))=−11+uθ(w,c)k×q(w)∂∂θuθ(w,c)k×q(w)=−11+uθ(w,c)k×q(w)1k×q(w)∂∂θuθ(w,c)=−1uθ(w,c)+k×q(w)∂∂θuθ(w,c)=−uθ(w,c)uθ(w,c)+k×q(w)1uθ(w,c)∂∂θuθ(w,c)=−uθ(w,c)uθ(w,c)+k×q(w)∂∂θloguθ(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)​1​k×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)=1Z(c)=1Z(c)=1 的设定,也就是 pθ(w,c)=uθ(w,c)p_{\theta}(w,c)=u_{\theta}(w,c)pθ​(w,c)=uθ​(w,c):
∂∂θJNCEc(θ)=∑wp~(w∣c)∂∂θlog⁡uθ(w,c)uθ(w,c)+k×q(w)+k∑wq(w)∂∂θlog⁡k×q(w)uθ(w,c)+k×q(w)=∑wp~(w∣c)k×q(w)uθ(w,c)+k×q(w)∂∂θlog⁡uθ(w,c)−k∑wq(w)uθ(w,c)uθ(w,c)+k×q(w)∂∂θlog⁡uθ(w,c)=∑wp~(w∣c)k×q(w)uθ(w,c)+k×q(w)∂∂θlog⁡uθ(w,c)−∑wuθ(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))∂∂θloguθ(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​(θ)​=w∑​p~​(w∣c)∂θ∂​loguθ​(w,c)+k×q(w)uθ​(w,c)​+kw∑​q(w)∂θ∂​loguθ​(w,c)+k×q(w)k×q(w)​=w∑​p~​(w∣c)uθ​(w,c)+k×q(w)k×q(w)​∂θ∂​loguθ​(w,c)−kw∑​q(w)uθ​(w,c)+k×q(w)uθ​(w,c)​∂θ∂​loguθ​(w,c)=w∑​p~​(w∣c)uθ​(w,c)+k×q(w)k×q(w)​∂θ∂​loguθ​(w,c)−w∑​uθ​(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~​(w∣c)−uθ​(w,c))∂θ∂​loguθ​(w,c)]​(22)
上一节中我们设定了 Z(c)=1Z(c)=1Z(c)=1,也就是 pθ(w∣c)=uθ(w,c)p_{\theta}(w|c)=u_{\theta}(w,c)pθ​(w∣c)=uθ​(w,c),因此:
∂∂θJNCEc(θ)=∑w[k×q(w)pθ(w∣c)+k×q(w)(p~(w∣c)−pθ(w∣c))∂∂θloguθ(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θ​(w∣c)+k×q(w)k×q(w)​(p~​(w∣c)−pθ​(w∣c))∂θ∂​loguθ​(w,c)]​(23)
这里的参数 kkk 依然指的是负样本与正样本数量的比例,如果我们令 k→∞k\to\inftyk→∞ 的话,那么:
lim⁡k→∞∂∂θJNCEc(θ)=lim⁡k→∞∑w[q(w)pθ(w∣c)k+q(w)(p~(w∣c)−pθ(w∣c))∂∂θloguθ(w,c)]=∑w[(p~(w∣c)−pθ(w∣c))∂∂θloguθ(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} k→∞lim​∂θ∂​JNCEc​(θ)​=k→∞lim​w∑​[kpθ​(w∣c)​+q(w)q(w)​(p~​(w∣c)−pθ​(w∣c))∂θ∂​loguθ​(w,c)]=w∑​[(p~​(w∣c)−pθ​(w∣c))∂θ∂​loguθ​(w,c)]​(24)
可以看到,当 kkk 趋于无穷时,(24)(24)(24) 式中 NCE 目标函数的梯度和 (9)(9)(9) 式中 MLE 对数似然函数梯度是等价的,也就是说我们通过 NCE 转换后的优化目标,本质上就是对极大似然估计方法的一种近似,并且随着负样本和正样本数量比 kkk 的增大,这种近似越精确,这也解释了为什么作者建议我们将 kkk 设置的越大越好。

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(xt+k∣ct)p(x_{t+k}|c_t)p(xt+k​∣ct​) 根据当前上下文 ctc_tct​预测 kkk 个时刻后的数据 xt+kx_{t+k}xt+k​(假设是像文本/语音中那样的序列数据);但作者觉得这样的方法过于针对细节进行重建,并不是很好,于是引入了互信息的思想,认为我们可以通过最大化当前上下文 ctc_tct​ 和要未来的数据 xt+kx_{t+k}xt+k​ 之间的互信息来构建预测任务,互信息的表示如下:
I(xt+k;ct)=∑x,cp(xt+k,ct)log⁡p(xt+k∣ct)p(xt+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,c∑​p(xt+k​,ct​)logp(xt+k​)p(xt+k​∣ct​)​​(25)
我们没办法知道 xt+kx_{t+k}xt+k​ 和 ctc_tct​ 之间的联合分布 p(xt+k,ct)p(x_{t+k},c_t)p(xt+k​,ct​) ,因此要最大化 I(xt+k;ct)I(x_{t+k} ; c_t)I(xt+k​;ct​),就需要从 p(xt+k∣ct)p(xt+k)\frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})}p(xt+k​)p(xt+k​∣ct​)​ 入手,即最大化 p(xt+k∣ct)p(xt+k)\frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})}p(xt+k​)p(xt+k​∣ct​)​ 。

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

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

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

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

根据 NCE 中的设置,现在假设给出一组大小为 NNN 的 X={x1,…,xN}X=\{x_1,\dots,x_N\}X={x1​,…,xN​},其中包含 111 个从 p(xt+k∣ct)p(x_{t+k}|c_t)p(xt+k​∣ct​) 中取样正样本和 N−1N-1N−1 从一个指定分布(用于对比的噪声分布) p(xt+k)p(x_{t+k})p(xt+k​),假设第 xix_ixi​ 是正样本,且i=t+ki=t+ki=t+k,上下文 ctc_tct​ 表示 ttt 之前的数据,那么能够正确的同时找到那一个正样本 xt+kx_{t+k}xt+k​ 和 N−1N-1N−1 个负样本的情况可以写成如下形式:
p(d=i∣X,ct)=p(xt+k∣ct)=p(xt+k∣ct)∏l≠t+kp(xl)∑j=1Np(xj∣ct)∏l≠jp(xl)=p(xt+k∣ct)p(xt+k)∑j=1Np(xj∣ct)p(xj)(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=i∣X,ct​)​=p(xt+k​∣ct​)=∑j=1N​p(xj​∣ct​)∏l​=j​p(xl​)p(xt+k​∣ct​)∏l​=t+k​p(xl​)​=∑j=1N​p(xj​)p(xj​∣ct​)​p(xt+k​)p(xt+k​∣ct​)​​​(26)
我们最大化上面这个式子,即最大化模型“成功分辨出每个正负样本的能力”,也就是最大化我们定义的密度比,也就是最大化 ctc_tct​ 与 xt+kx_{t+k}xt+k​ 的互信息。

参考 (5)(5)(5) 式,可以写成根据 ctc_tct​ 预测 xt+kx_{t+k}xt+k​的形式:
p(xt+k∣ct)=exp(sθ(xt+k,ct))∑xj∈Xexp(sθ(xj,ct))(27)\begin{aligned} p(x_{t+k}|c_t)&= \frac{exp(s_{\theta}(x_{t+k},c_t))}{\sum_{x_j \in X}exp(s_{\theta}(x_{j},c_t))} \\ \end{aligned} \tag {27} p(xt+k​∣ct​)​=∑xj​∈X​exp(sθ​(xj​,ct​))exp(sθ​(xt+k​,ct​))​​(27)
在上式中,我们知道 sθ(x,c)s_{\theta}(x,c)sθ​(x,c) 是一个 socring function ,输出的分数用来量化 xxx 在上下文 ccc 中匹配性,而放在这里 sθ(xt+k,ct)s_{\theta}(x_{t+k},c_t)sθ​(xt+k​,ct​) 也就指的是量化对 xt+kx_{t+k}xt+k​ 预测的结果和真实结果的相似程度,文章中用余弦相似度来量化,并且将 exp(sθ(xt+k,ct))exp(s_{\theta}(x_{t+k},c_t))exp(sθ​(xt+k​,ct​)) 定义为 fk(xt+k,ct)f_k(x_{t+k},c_t)fk​(xt+k​,ct​),也就是:
p(xt+k∣ct)=fk(xt+k,ct)∑xj∈Xfk(xj,ct)(28)\begin{aligned} p(x_{t+k}|c_t)&= \frac{f_k(x_{t+k},c_t)}{\sum_{x_j \in X}f_k(x_{j},c_t)} \\ \end{aligned} \tag {28} p(xt+k​∣ct​)​=∑xj​∈X​fk​(xj​,ct​)fk​(xt+k​,ct​)​​(28)
现在对比 (26)(28)(26)(28)(26)(28)两个式子,这两个式子的目标是一致的,也就意味着 fk(xt+k,ct)f_k(x_{t+k},c_t)fk​(xt+k​,ct​) 实际上就可以作为密度比 p(xt+k∣ct)p(xt+k)\frac{p(x_{t+k} \mid c_t)}{p(x_{t+k})}p(xt+k​)p(xt+k​∣ct​)​ 的一种表示形式,它们之间虽不直接等价,但是含义上是正相关的,即:
fk(xt+k,ct)∝p(xt+k∣ct)p(xt+k)(28)\begin{aligned} f_k(x_{t+k},c_t)\propto\frac{p(x_{t+k}|c_t)}{p(x_{t+k})} \end{aligned} \tag {28} fk​(xt+k​,ct​)∝p(xt+k​)p(xt+k​∣ct​)​​(28)
现在我们的优化目标就是使 (26)(26)(26) 或 (28)(28)(28) 式的结果最大,所以可以写出对应形式的交叉熵损失函数如下:
LN=−∑X[p(x,c)log⁡fk(xt+k,ct)∑xj∈Xfk(xj,ct)]=−EX[log⁡fk(xt+k,ct)∑xj∈Xfk(xj,ct)](29)\begin{aligned} \mathcal{L}_{N}&=-\sum_{X}\left[p(x,c)\log \frac{f_{k}\left(x_{t+k}, c_{t}\right)}{\sum_{x_{j} \in X} f_{k}\left(x_{j}, c_{t}\right)}\right] \\ &=-\mathbb{E}_X\left[\log \frac{f_{k}\left(x_{t+k}, c_{t}\right)}{\sum_{x_{j} \in X} f_{k}\left(x_{j}, c_{t}\right)}\right] \\ \end{aligned} \tag {29} LN​​=−X∑​[p(x,c)log∑xj​∈X​fk​(xj​,ct​)fk​(xt+k​,ct​)​]=−EX​[log∑xj​∈X​fk​(xj​,ct​)fk​(xt+k​,ct​)​]​(29)
上式就是最终得到的 InfoNCE 损失函数了,并且最小化 InfoNCE,也就等价于最大化 xt+kx_{t+k}xt+k​ 和 ctc_tct​ 之间互信息的下限,从而做到了我们所要求的最大化 I(xt+k;ct)I\left(x_{t+k};c_{t}\right)I(xt+k​;ct​),证明如下,
LNopt=−EXlog⁡[p(xt+k∣ct)p(xt+k)p(xt+k∣ct)p(xt+k)+∑xj∈Xnegp(xj∣ct)p(xj)]=EXlog⁡[1+p(xt+k)p(xt+k∣ct)∑xj∈Xnegp(xj∣ct)p(xj)]≈EXlog⁡[1+p(xt+k)p(xt+k∣ct)(N−1)Exjp(xj∣ct)p(xj)]=EXlog⁡[1+p(xt+k)p(xt+k∣ct)(N−1)]≥EXlog⁡[p(xt+k)p(xt+k∣ct)N]=−I(xt+k,ct)+log⁡(N)(30)\begin{aligned} \mathcal{L}_{\mathrm{N}}^{\mathrm{opt}} &=-\underset{X}{\mathbb{E}} \log \left[\frac{\frac{p\left(x_{t+k} \mid c_{t}\right)}{p\left(x_{t+k}\right)}}{\frac{p\left(x_{t+k} \mid c_{t}\right)}{p\left(x_{t+k}\right)}+\sum_{x_{j} \in X_{\mathrm{neg}}} \frac{p\left(x_{j} \mid c_{t}\right)}{p\left(x_{j}\right)}}\right] \\ &=\underset{X}{\mathbb{E}} \log \left[1+\frac{p\left(x_{t+k}\right)}{p\left(x_{t+k} \mid c_{t}\right)} \sum_{x_{j} \in X_{\mathrm{neg}}} \frac{p\left(x_{j} \mid c_{t}\right)}{p\left(x_{j}\right)}\right] \\ & \approx \underset{X}{\mathbb{E}} \log \left[1+\frac{p\left(x_{t+k}\right)}{p\left(x_{t+k} \mid c_{t}\right)}(N-1) \underset{x_{j}}{\mathbb{E}} \frac{p\left(x_{j} \mid c_{t}\right)}{p\left(x_{j}\right)}\right] \\ &=\underset{X}{\mathbb{E}} \log \left[1+\frac{p\left(x_{t+k}\right)}{p\left(x_{t+k} \mid c_{t}\right)}(N-1)\right] \\ & \geq \underset{X}{\mathbb{E}} \log \left[\frac{p\left(x_{t+k}\right)}{p\left(x_{t+k} \mid c_{t}\right)} N\right] \\ &=-I\left(x_{t+k}, c_{t}\right)+\log (N) \end{aligned} \tag {30} LNopt​​=−XE​log⎣⎡​p(xt+k​)p(xt+k​∣ct​)​+∑xj​∈Xneg​​p(xj​)p(xj​∣ct​)​p(xt+k​)p(xt+k​∣ct​)​​⎦⎤​=XE​log⎣⎡​1+p(xt+k​∣ct​)p(xt+k​)​xj​∈Xneg​∑​p(xj​)p(xj​∣ct​)​⎦⎤​≈XE​log[1+p(xt+k​∣ct​)p(xt+k​)​(N−1)xj​E​p(xj​)p(xj​∣ct​)​]=XE​log[1+p(xt+k​∣ct​)p(xt+k​)​(N−1)]≥XE​log[p(xt+k​∣ct​)p(xt+k​)​N]=−I(xt+k​,ct​)+log(N)​(30)
到底为止,如何从由 NCE 结合互信息的思想构建 (29)(29)(29) 式中的 InfoNCE 也清楚了,现在 InfoNCE 主要用在自监督学习中作为一个对比损失函数,实际上 InfoNCE 的这个思想也是可以作为互信息的一个估计器,在论文中也有证明它和另一个互信息估计器 MINE 之间的关系,这里就不再详细说明了。

在使用 InfoNCE 时把它当作一个对比损失,那么分子上的 (xt+k,ct)(x_{t+k},c_t)(xt+k​,ct​) 表示正样本对,分母上的(xj,ct)(x_j,c_t)(xj​,ct​) 表示负样本对,我们只要构建好正负样本对,然后利用 InfoNCE 的优化过程,就可以做到使正样本对之间的互信息最大,使负样本对之间的互信息最小这件事情了:
LNInfoNCE=−EX[log⁡fk(xt+k,ct)∑xj∈Xfk(xj,ct)](31)\begin{aligned} \mathcal{L}_{N}^{InfoNCE} &=-\mathbb{E}_X\left[\log \frac{f_{k}\left(x_{t+k}, c_{t}\right)}{\sum_{x_{j} \in X} f_{k}\left(x_{j}, c_{t}\right)}\right] \\ \end{aligned} \tag {31} LNInfoNCE​​=−EX​[log∑xj​∈X​fk​(xj​,ct​)fk​(xt+k​,ct​)​]​(31)

后记

最初目的只是因为看到很多地方直接使用了 InfoNCE(实际上就是 CPC),但没有说明详细的原理,网上除了磊爷的文章[6]之外,很多都是浮于表面的解释,远不能解答我的疑惑 ,所以作为一个刚入门的小白,我还是想亲自推导一下 InfoNCE 的以及它的来源 NCE 的原理,没想到这个坑越挖越深,最后花的时间远远超出我的预期,导致一堆其他事情没有做…好在最终还是按照我的理解基本弄清楚了(如果有哪里理解错的地方,请告诉我),也不知道这样做有没有意义。虽然不知道多少人有耐心看到这里,但看在我码了这么多字和公式的分上,都看到这了,点个赞不过分吧~~

附录 1

实际上 NCE 要解决的是归一化参数密度估计问题

假设现在有一组观测样本 X={x1,x2,…,xn}X=\{x_1,x_2,\dots,x_n\}X={x1​,x2​,…,xn​},它遵循一个未知的参数化概率密度函数 pd(.;θ)p_d(.;\theta)pd​(.;θ) ,参数密度估计问题就是根据观测样本 XXX 找到一组最优参数 θ\thetaθ,通常使用极大似然估计的方法。对于这个密度函数 pm(.;θ)p_m(.;\theta)pm​(.;θ) 的估计还需要满足下面两个约束条件:

  • ∫p(x;θ)dx=1\int p(x;\theta)dx=1∫p(x;θ)dx=1
  • pm(.;θ)≥0p_m(.;\theta) ≥ 0pm​(.;θ)≥0

如果同时满足上面两个约束条件,那么称建模的密度函数是归一化的;如果只满足正约束条件,那么称其未归一化。

在语言模型中说的 Z(c)Z(c)Z(c) 在 NCE 实际上就是指,指的是 partition function,这里用 Z(θ)Z(\theta)Z(θ)表示,假设 pm0(.;θ)p_m^0(.;\theta)pm0​(.;θ) 为估计的未归一化模型,则 Z(θ)=∫pm0(x;θ)dxZ(\theta)=\int p_m^0(x;\theta)dxZ(θ)=∫pm0​(x;θ)dx,而将模型归一化的方式就是:pm0(.;θ)Z(θ)\frac{p_m^0(.;\theta)}{Z(\theta)}Z(θ)pm0​(.;θ)​。而对于 Z(θ)Z(\theta)Z(θ) ,除非 pm0(.;θ)p_m^0(.;\theta)pm0​(.;θ) 的形式特别简单,否则是没办法写出积分的解析解形式的,只能通过数值积分的方法来近似。这种数值积分对于低维问题是有较高的精度的,但是对于实际应用中的很多高维问题,在计算上就是非常昂贵甚至不可接受的。

附录 2

附录1中提到可以通过 pm0(.;θ)Z(θ)\frac{p_m^0(.;\theta)}{Z(\theta)}Z(θ)pm0​(.;θ)​ 来对 pm0(.;θ)p_m^0(.;\theta)pm0​(.;θ) 进行归一化,实际上可以看作对 pm0(.;θ)p_m^0(.;\theta)pm0​(.;θ) 进行了一定的缩放,假设归一化后的密度函数为 pm(.;θ)p_m(.;\theta)pm​(.;θ),则:
log⁡pm(.;θ)=log⁡pm0(.;θ)Z(θ)=log⁡pm0(.;θ)−log⁡Z(c)\begin{aligned} \log p_m(.;\theta) &= \log \frac{p_m^0(.;\theta)}{Z(\theta)}\\ &=\log p_m^0(.;\theta)-\log Z(c) \end{aligned} logpm​(.;θ)​=logZ(θ)pm0​(.;θ)​=logpm0​(.;θ)−logZ(c)​
因此我们可以把 log⁡Z(c)\log Z(c)logZ(c) 当成一个参数 ccc,也就是:
log⁡pm(.;θ)=log⁡pm0(.;θ)−c\begin{aligned} \log p_m(.;\theta) &=\log p_m^0(.;\theta)-c \end{aligned} logpm​(.;θ)​=logpm0​(.;θ)−c​
也就是学习一个参数 ccc,来对未归一化的 pm0(.;θ)p_m^0(.;\theta)pm0​(.;θ) 进行大小为 ccc 的缩放,最终达到归一化的效果。

附录 3

按照 Noise-Contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics [Gutmann and Hyvrinen(2012)] 中的解释,估计数据的密度函数 p(x)p(x)p(x) 实际上是确定观测数据 XXX 的属性,而这种属性一般需要相对于另一些参考数据(噪声) YYY 的属性来体现(描述)出来的。如果我们参考(噪声)数据 YYY 是从概率密度函数为 pnp_npn​ 的分布中独立同分布采样出来的 ,XXX 相对于 YYY 的属性用它们的密度比 pd/pnp_d/p_npd​/pn​ 来描述。那么如果相对数据 YYY 的分布 pnp_npn​ 已知,也就能通过 pd/pnp_d/p_npd​/pn​ 来获得 XXX 的密度函数 pdp_dpd​。话句话说,如果我们知道 YYY 的属性,也知道了 XXX 和 YYY 之间的差异,那么我们也就知道了 XXX 的属性。

所以 NCE 中通过训练一个二分类器来对 XXX 和 YYY 中的数据进行比较,为了区分出这两个数据,分类器就会比较它们属性的不同,换句话说,这个二分类也就学到了 XXX 和 YYY 之间的差异,而这个差异根据 (14)(15)(14)(15)(14)(15) 式的推导,也确实符合 pd/pnp_d/p_npd​/pn​ 的形式的,实际上也就是训练了 logistic 分类器。

参考文献

[1] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013.

[2] Michael Gutmann and Aapo Hyvärinen. 2010. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models. In Proc. AISTATS.

[3] Gutmann, M.U. and Hyv¨ arinen, A. Noise-contrastive estimation of unnormalized statistical models, with applications to natural image statistics. Journal of Machine Learning Research, 13:307–361, 2012.

[4] Andriy Mnih and Y ee Whye Teh. 2012. A fast and simple algorithm for training neural probabilistic language models. In Proc. ICML.

[5] Aaron van den Oord, Yazhe Li, and Oriol Vinyals. Representation learning with contrastive predictive coding. arXiv preprint arXiv:1807.03748, 2018.

[6] Leo Mao. 2019. “Noise-Contrastive-Estimation”. [online]. https://leimao.github.io/article/Noise-Contrastive-Estimation/

and Y ee Whye Teh. 2012. A fast and simple algorithm for training neural probabilistic language models. In Proc. ICML.

[5] Aaron van den Oord, Yazhe Li, and Oriol Vinyals. Representation learning with contrastive predictive coding. arXiv preprint arXiv:1807.03748, 2018.

[6] Leo Mao. 2019. “Noise-Contrastive-Estimation”. [online]. https://leimao.github.io/article/Noise-Contrastive-Estimation/

[7] Dyer, C. (2014). Notes on Noise Contrastive Estimation and Negative Sampling. arXiv:1410.8251 [cs]. http://arxiv.org/abs/1410.8251. Accessed 8 December 2020

Noise Contrastive Estimation 前世今生——从 NCE 到 InfoNCE相关推荐

  1. Noise Contrastive Estimation (NCE) 、负采样(NEG)和InfoNCE

    总结一下自己的理解: NCE需要根据频次分布等进行采样,NEG不考虑,InfoNCE是一种通过无监督任务来学习(编码)高维数据的特征表示(representation),而通常采取的无监督策略就是根据 ...

  2. NCE(Noise Contrastive Estimation) 与negative sampling

    NCE Noise Contrastive Estimation与negative sampling负例采样 背景 NCE(Noise Contrastive Estimation) Negative ...

  3. Noise Contrastive Estimation

    熵 统计机器学习中经常遇到熵的概念,在介绍NCE和InfoNCE之前,对熵以及相关的概念做简单的梳理.信息量用于度量不确定性的大小,熵可以看作信息量的期望,香农信息熵的定义:对于随机遍历 X X X, ...

  4. [转] Noise Contrastive Estimation 噪声对比估计 资料

    有个视频讲的不错,mark一下 https://vimeo.com/306156327 转载于:https://www.cnblogs.com/Arborday/p/10903065.html

  5. 我想简单的写写nce和infonce

    从概念上了解区分nce 和info nce 为什么有nce nce 方案: 不算 为什么有infonce 所以infonce 和nce 啥关系 参考文章 我这两天都在看infonce 的推导,我表示很 ...

  6. 对比学习(Contrastive Learning)综述

    A.引入   https://zhuanlan.zhihu.com/p/346686467 A.引入 深度学习的成功往往依赖于海量数据的支持,其中对于数据的标记与否,可以分为监督学习和无监督学习. 1 ...

  7. 2021-ICDM-Hyper Meta-Path Contrastive Learning for Multi-Behavior Recommendation | 精读

    摘要 现有的大多数工作都没有考虑用户不同行为之间的复杂依赖关系.他们利用简单固定的方案,如邻域信息聚合或向量的数学计算,融合不同用户行为的嵌入,以获得统一的嵌入来表示用户的行为模式,这些模式将用于下游 ...

  8. 从NCE loss到InfoNCE loss

    关于NCE loss:知乎上的一些介绍的文字 Noise Contrastive Estimation 学习 - 知乎 github上的介绍文字:Lei Mao's Log Book – Noise ...

  9. 再介绍一篇Contrastive Self-supervised Learning综述论文

    文 | 黄浴 源 | 知乎 之前已经介绍过三篇自监督学习的综述:<怎样缓解灾难性遗忘?持续学习最新综述三篇!>.这是最近2020年10月arXiv上的又一篇论文"A Survey ...

最新文章

  1. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
  2. 74 计算机图形学开源处理库
  3. SwiftUI3优秀文章List 去掉左右间距问题
  4. 基于视觉的烟雾/火焰检测数据集整理(检测、识别、分割)
  5. BitNami-Redmine1.1.0安装和VisualSVN-Server配合使用
  6. SAP License:SAP S/4HANA Cloud介绍
  7. 中科院分区发布2021年期刊重大调整(生信期刊调整为生物学大类)
  8. 【一周头条盘点】中国软件网(2018.9.10~2018.9.14)
  9. 八 Spring Security Oauth2 单点登录 第三方授权(QQ、微信登录)
  10. vue2中监听watch的写法汇总
  11. 梦雨百度网盘机器人好友群组消息自动回复软件(可用于自动发货场景)
  12. js事件坐标大乱斗:screenX、clientX、pageX、offsetX
  13. Spark学习笔记1——第一个Spark程序:单词数统计
  14. linux是实时系统还是分时操作系统
  15. uniform对象及其使用
  16. 如何解决Chrome禁止发送不安全的内网网络请求[origin ‘http://xxx.xxx.com:xxxx‘ has been blocked by CORS policy:...}
  17. 高等教育计算机等级,[高等教育]全国高校计算机等级考试5.doc
  18. 【echarts】中国地图 china.js 在线引用地址
  19. 云原生第4课:Kubernetes 集群管理
  20. c语言课程设计图书销售,C语言程序课程设计报告-图书销售管理系统.doc

热门文章

  1. python短视频自动制作_拒绝降权!教你用 Python 确保制作的短视频独一无二
  2. 计算机本科论文开题ppt,计算机专业开题报告.ppt
  3. cadence安装完怎么打开_allegro安装后如何打开
  4. html历史查看器,网页源代码查看器
  5. 三维家隐藏的如何再出现_三维建模基础知识
  6. 使用AVPlayer获取HTTP live stream audio文件的duration
  7. PVE 天龙八部TLBB服务端搭建(二)--服务端配置运行
  8. 双底形态突破与业绩报表叠加分析!股票量化分析工具QTYX-V2.4.9
  9. unity_blend
  10. 合伙人股权的退出机制