Redian新闻
>
Noise Contrastive Estimation 前世今生——从 NCE 到 InfoNCE

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

公众号新闻


MLNLP社区是国内外知名的机器学习与自然语言处理社区,受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。
社区的愿景是促进国内外自然语言处理,机器学习学术界、产业界和广大爱好者之间的交流和进步,特别是初学者同学们的进步。
转载自 | 极市平台
作者丨Lethe@知乎
来源丨https://zhuanlan.zhihu.com/p/334772391


0

『前言』

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


1

『从 NLP 入手』

1.1 背景

NCE,也就是 Noise Contrastive Estimation(噪声对比估计), 在 [2] 这篇论文中被提出,但是这篇论文的阐述的不太便于理解,并且论文中估计的是概率密度函数(pdf, probability density function)。而 NLP 中的 word 或 vision 中的 pixel 都是离散的,且我们感兴趣的是的概率质量函数(pmf, probability mass function),因此我主要参考了 [4] 这篇论文,它就是在使用 NCE 时假设了离散分布,并用 pmf 代替其中 pdf,然后将 NCE 应用到 NLP 领域。(我对 NLP 领域不是很了解,所以部分阐述方式可能会不严谨)。

1.2 n-gram

语言模型 (language model) 就是假设一门语言所有可能的句子服从一个概率分布, 每个句子出现的概率加起来是1, 那么语言模型的任务就是预测每个句子在语言中出现的概率。如果把句子 看成单词 的序列 , 那么语言模型就是建模一个 来计算这个句子 出现的概率, 直观上我们要得到这个语言模型, 基于链式法则可以表示为每个单词出现的条件概率的乘积, 我们将条件概率的条件 称为单词 的上下文, 用 表示。

可以看到, language model 就是条件概率 的集合, 但是直接计算每个 在语料库中的条件概率是需要很大计算量的。因此在统计语言模型中, 引入了马尔可夫假设, 即"一个词出现的概率只与它前面出现的有限的一个或者 个词有关", 将这 个词称为一个 gram, 这就是著名的 gram 模型,因此可以将模型简化为:

1.3 最大似然估计

上面的 n-gram 构建语言模型的方法实际上就是, 将一个训练语料库中的每个 和它的 (也就 是由前面 构成)的条件概率计算出来并储存(实际操作上是统计每个gram出现的次数), 然后下一次计算某个句子的出现的概率时, 即 (2) 式, 就在存储中找到这个句子中出现的 的条件概率,然后乘起来即可。

因此, 我们是否可以不事先计算并存储每个 条件概率, 而是建立一个模型(或者说函数), 给这个模型一组 就能输出它们的条件概率。

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

在建模统计语言模型时,利用最大似然估计,根据 (1) 式目标函数,我们可以写出其对数似然函数如下:

然后最大化对数似然函数 , 实际上这样就是将 看成 的函数, 为待定参数集:

这样一旦最优参数集 可以确定, 函数 就被唯一确定, 那么对于任何概率 都可以用函 数 来计算了。

1.4 神经概率语言模型

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

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

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

具体来看, 它把语言模型的建立当作一个多分类问题, 我们用 表示一个包含所有单词的单词库, 其大小为 , 将 当成一对训练样本 (实际上 会转换成词向量, 这里不做详解), 通过神经网络后和 softmax 后, 输出一个向量 ,其中每一维 表示上下文为 时 第 个单词 是单词库中第 个单词 的概率, 训练过程要求最后单词库中概率最大的单词就是训练样本对中的 。这样训练结束后, 给神经网络一个上下文 , 神经网络就能预测在当前上下文 时, 下一个单词 是单词库中的各个词的概率 , 通过这个我们也就可以构建语言模型。

我们知道, 这种方法本质上就是拟合一个 的函数 , 或者说建立一个参数集为 条件概率分布 , 只要给出当前上下文 , 我们就能够直接计算下一个单词 的概率。

假设输入到 softmax 前的结果用 表示, 实际上 是有含义的, 它是一个 socring function, 输出的分数用来量化 在上下文 中匹配性, 那么 条件概率可以表示为以下形式:

式中, 表示下一个单词是这个 在单词库中的概率; 令 表示当前单词库中所有单词的概率的累和, 通常将这一项叫做"配分函数"或"归一化因子"。一般来说, 单词库 的数量是非常巨大的, 因此计算 是非常 昂贵、耗时的一件事,这也就是 NCE 要解决的问题。(见附录1)

如果我们不考虑 的具体形式, 那么 式实际上就可以当作我们在 式中所构造的函 数 的表达式, 既然如此, 那我们接着用 中提到的最大似然估计的方式来试着求解 的参数 。我们将从句子 中取样的 看成经验分布(数据分布) 式中的 可以写成(最大期望算法_百度百科 (baidu.com)):

现在要最大化 , 那么将其关于 求导:

这里解释一下上面到最后一步的转换, 因为 , 其中 为单词库 中所有的单词, 而单词库其中每个单词的概率由 产生, 因此 , 与经验分布 不相关, 所以可以把期望 去掉。

(7) 式结果中的 计算如下:

将 (8)式结果带回 (7) 式中得:

最大似然好像很容易,但是实际上还是绕不开对“归一化常数”的计算,所以就需要 NCE 登场了。


2

『什么是 NCE』

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

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

现在假设一个特定上下文 的数据分布为 , 我们称从它里面取出的样本为正样本,令类别 ; 而另一个与 无关的噪声分布为 , 我们称从里面取出的样本为负样本,令类别为 。遵循 Gutmann and Hyvrinen (2012) [3] 中的设置, 假设现在取出了 个正样本和 个负样本, 将这些正负样本混合形成一个混合分布

我们得到下面这些概率:

所以可以计算后验概率:

我们令负样本和正样本的比例为: ,则有:

现在我们观察 (12) 式, NCE 所做的事情就是将式中的经验分布 替换成概率模型 , 使后验概率成为参数为 的函数。但问题是这样现在这样的形式还是需要计算 , 我们只是将原来问题进行了一定的转换从而引入了噪声分布。为了解决这个问题, NCE 做了两个设定:

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

第二个设定, 即减少了参数的数量, 又使模型的输出符合"归一化"的性质(即 ), 是很 合理的, 如果 , 由 式可以得到 ,那么 (12) 式可以写成如下 形式, 即具有参数 的后验概率:

现在我们有了参数为 的二元分类问题, 假设标签 为伯努利分布, 那么很容易写出他的条件对数似然 如下, 实际上在它前面加上负号后, 也就等价于 logistics 分类里的 log loss,或者说交叉嫡损失函数:

NCE 的目标函数还需要在 (14)(14)(14) 式的基础上除以正样本的数量 ,即

当数据数量很大时,根据大数定律,上式也可以写成:

要最大化上述对数似然函数,也就是最大化如下目标函数:

NCE 目标函数中的 实际上就是在设置“二分类问题”时,选取的负样本与正样本的比例,通常的做法会默认正样本数量为 1 ,然后将负样本的数量 作为一个手动输入的参数,从而确定这个比例 。在 TensorFlow 的相关源码 中,正样本的数量 num_true 默认值为1,如果设置大于 1,那么会进行一个 1/num_ture 的归一化。

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

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

另外,如果我们希望目标函数不是只针对一个特定的上下文 ,而是使不同的上下文可以共享参数,也就是设置一批上下文的全局目标函数:

到这,NCE 的构建就完成了,总结一下就是:从上下文 c 中取出单词作为正样本,从噪声分布中取出单词作为负样本,正负样本数量比为 1:k ,然后训练一个二分类器,通过一个类似于交叉熵损失函数的目标函数进行训练(如果取正样本数量为 1,那么 (14) 式与 (15) 式等价,NCE 目标函数就等价于交叉熵损失函数)。


3

『NCE 的原理』

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

我们再看回 (17) 式,我们对它关于 进行求导:

分布对上面的两项进行求导:

将上面两个结果再带回 (19) 式中,并根据前面 的设定, 也就是

上一节中我们设定了 , 也就是 , 因此:

这里的参数 依然指的是负样本与正样本数量的比例, 如果我们令 的话, 那么:

可以看到,当 趋于无穷时, (24) 式中 NCE 目标函数的梯度和 (9)式中 MLE 对数似然函数梯度是等价的,也就是说我们通过 NCE 转换后的优化目标,本质上就是对极大似然估计方法的一种近似,并且随着负样本和正样本数量比 的增大,这种近似越精确,这也解释了为什么作者建议我们将 设置的越大越好。


4

『从 NCE 到 InfoNCE』

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

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

简单来说,CPC(对比预测编码) 就是一种通过无监督任务来学习(编码)高维数据的特征表示(representation),而通常采取的无监督策略就是根据上下文预测未来或者缺失的信息,NLP 中已经利用这种思想来学习 word 的 representation [1]。

要构建这样的预测任务, 一个方法是直接建模条件生成模型 根据当前上下文 预测 个时刻后的数据 (假设是像文本、语音中那样的序列数据);但作者觉得这样的方法过于针对细节进行重建, 并不是很好, 于是引入了互信息的思想, 认为我们可以通过最大化当前上下文 和要末来的数据 之间的互信息来构建预测任务, 互信息的表示如下:

我们没办法知道 之间的联合分布 , 因此要最大化 , 就需要从 入手, 即最大化

那么如何训练 呢? 我们可以把这个比例定义为密度比, 那么根据附录3中的思想, 分子 就相当于 , 是我们想得到的目标函数; 分母 就相当于 , 是用来进行对比的参考分布(噪声)。因此, 我们就可以根据 NCE 中提供的思路, 将问题转换为一个二分类的问题, 更具体来解释:

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

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

根据 NCE 中的设置, 现在假设给出一组大小为 , 其中包含 1 个从 中取样正样本和 从一个指定分布(用于对比的噪声分布) , 假设第 是正样本, 且 , 上下文 表示 之前的数据, 那么能够正确的同时找到那一个正样本 个负样本的情况可以写成如下形式:

我们最大化上面这个式子, 即最大化模型“成功分辨出每个正负样本的能力”, 也就是最大化我们定 义的密度比, 也就是最大化 的互信息。

参考 式, 可以写出根据 预测 的形式:

在上式中, 我们知道 是一个 socring function, 输出的分数用来量化 在上下文 中匹 配性; 放在这里 也就是量化对 预测的结果和真实结果的相似程度, CPC 文章中用余弦相似度来量化, 并且将 定义为 , 也就是:

现在对比 两个式子, 这两个式子的目标是一致的, 也就意味着 实际上就 可以作为密度比 的一种表示形式, 它们之间虽不直接等价, 但是含义上是正相关的, 即:

现在我们的优化目标就是使 (26) 或 (28)式的结果最大,所以可以写出对应形式的交叉熵损失如下:

上式就是最终得到的 InfoNCE 损失函数了, 并且最小化 InfoNCE, 也就等价于最大化 之间互信息的下限, 从而做到了我们所要求的最大化 , 证明如下,

到底为止,如何从由 NCE 结合互信息的思想构建 (29) 式中的 InfoNCE 也清楚了,现在 InfoNCE 主要用在自监督学习中作为一个对比损失函数,实际上 InfoNCE 的这个思想也是可以作为互信息的一个估计器,在论文中也有证明它和另一个互信息估计器 MINE 之间的关系,这里就不再详细说明了。

在使用 InfoNCE 时把它当作一个对比损失, 那么分子上的 表示正样本对, 分母上的 表示负样本对, 我们只要构建好正负样本对, 然后利用 InfoNCE 的优化过程, 就可以做到 使正样本对之间的互信息最大, 使负样本对之间的互信息最小这件事情了:


5

『后记』

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


6

『附录 1——NCE 要解决的问题』

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

假设现在有一组观测样本 , 它遵循一个末知的参数化概率密度函数 , 参数密度估计问题就是根据观测样本 找到一组最优参数 , 通常使用极大似然估计的方法。对于这个密度函数 的估计还需要满足下面两个约束条件:

如果同时满足上面两个约束条件, 那么称建模的密度函数是归一化的; 如果只满足第 2 个正约束条件, 那么称其末归一化。语言模型中说的 在 NCE 实际上指的就是 partition function, 这里用 表示, 假设 为估计的末归一化模型, 则 , 而将模型归一化的方式就是:

而对于 , 除非 的形式特别简单, 否则是没办法写出积分的解析解形式 的, 只能通过数值积分的方法来近似。这种数值积分对于低维问题是有较高的精度的, 但是对于实 际应用中的很多高维问题, 在计算上就是非常昂贵甚至不可接受的。


7

『附录 2——将归一化常数作为参数』

这里解释一下为什么可以将归一化常数作为一个附加的参数。

附录1中提到可以通过 来对 进行归一化, 实际上可以看作对 进行了一定的缩放, 假设归一化后的密度函数为 , 则:

因此我们可以把 当成一个参数 , 也就是:

也就是学习一个参数 , 来对末归一化的 进行大小为 的缩放, 最终达到归一化的效果。


8

『附录 3——用噪声进行对比的直觉』

这里解释一下用噪声的分布进行对比的直觉。

按照 Gutmann and Hyvrinen(2012) [3] 中的解释(如果真的想弄懂 NCE,强烈推荐阅读一下这篇 论文), 估计数据的密度函数 实际上是确定观测数据 的属性, 而这种属性一般需要相对于另一些参考数据(噪声) 的属性来体现(描述)出来的。如果我们参考(噪声)数据 是从概率密度函数为 的分布中独立同分布采样出来的, 相对于 的属性用它们的密度比 来描述。那么如果相对数据 的分布 已知, 也就能通过 获得 的密度函数 。话句话说, 如果我们知道 的属性, 也知道了 之间的差异, 那么我们也就知道了 的属性。

所以 NCE 中通过训练一个二分类器来对 中的数据进行比较, 为了区分出这两个数据, 分类器就会比较它们属性的不同, 换句话说, 这个二分类也就学到了 之间的差异, 而这个差异根据 式的推导, 也确实符合 的形式的, 实际上也就是训练了 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/

[7] Dyer, C. (2014). Notes on Noise Contrastive Estimation and Negative Sampling. arXiv:1410.8251 [cs].

[8] Y. Bengio, R. Ducharme, P. Vincent, and C. Jauvin, “A Neural Probabilistic Language Model,” p. 19.



技术交流群邀请函

△长按添加小助手

扫描二维码添加小助手微信

请备注:姓名-学校/公司-研究方向
(如:小张-哈工大-对话系统)
即可申请加入自然语言处理/Pytorch等技术交流群

关于我们

MLNLP 社区是由国内外机器学习与自然语言处理学者联合构建的民间学术社区,目前已经发展为国内外知名的机器学习与自然语言处理社区,旨在促进机器学习,自然语言处理学术界、产业界和广大爱好者之间的进步。
社区可以为相关从业者的深造、就业及研究等方面提供开放交流平台。欢迎大家关注和加入我们。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
小白入门必看!带你走进影像组学的前世今生美国西南部美墨边境的沙漠国家公园行(3)德州海拔最高处—-瓜达卢普山国家公园从“压缩面包”到“鱼香肉丝”,趣谈航天食品的前世今生FastTrack Universität 2023莱比锡大学公立语言项目招生简章凯恩斯主义的前世今生(中)起底AI制药的前世今生春节译名引发新争议?“Chinese New Year”的前世今生,一文说明白中美关系的前世今生透视华为云云原生数据库的前世今生及未来演进,能给行业带来哪些启发?越来越不喜欢这个世界,世界终于变成了我不喜欢的样子。。。,“怪胎”ChatGPT的前世今生,以及未来最高108分的顶刊综述已翻译!2小时1篇了解最热科研方向的前世今生!5分钟看懂XBB的前世今生ChatGPT的前世今生,以及未来从爆火的 ChatGPT 讲起:它的前世今生和你想了解的一切元宇宙的前世今生,业内大佬带你一遍过!ChatGPT的前世今生,以及未来 |【经纬低调分享】制服颜值巅峰 !深度了解警礼服的前世今生ChatGPT:前世今生与路在何方被打败意志力的退休老人大话 HTTP 协议前世今生微软整合ChatGPT推出新版Bing,细数微软和OpenAI的前世今生|焦点分析【NLP修炼系列之Bert(一)】Bert的前世今生-理论篇关注丨5分钟看懂XBB毒株的前世今生2023哪些热点最香?CNS级大佬带你深度剖析6大热点的前世今生!且行且珍惜肠道菌群、m6A、铁死亡……这6个轻松发5分+SCI 的前沿热点,2小时了解前世今生!月光黯淡(二十三)User Sues Chinese Streaming Giant iQiyi for Curbing Access美国历史系列191:亚联董的前世今生亚洲基督教高等教育联合董事会会标布洛芬的前世今生:发明者一生救人无数,却没赚一分钱!怎么发热点弯道超车?这33篇顶刊综述带你了解6大热点的前世今生!那些Mckinsey和BCG前世今生的恩怨情仇……哈佛计算机图形学实验室的前世今生这篇发表在Cell正刊上的66分重磅综述,详细为你讲述经典热门通路的前世今生
logo
联系我们隐私协议©2023 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。