第十二次周报

内容:

  • 毕设内容

  • NCE & InfoNCE

下周内容:

  • cs224n 生成模型

NCE

多分类问题

nlp中常常将语言模型当做一个多分类问题,经过softmax后的概率可以被看做给出上下文c,下一个单词w的条件概率分布[公式]

这里进入softmax以前的结果用[公式]表示,那么

[公式]

\(Z(C)\)常被看做”配分函数“或”归一化因子“,单词库大小[公式]常常是很大的,因此该项往往很难直接计算。(如果把配分项看做参数学习,会趋向于零完全失效)

回顾极大似然估计:

[公式]

\(\theta\)求导:

[公式]
NCE对于采样的建模

Noise Contrastive Estimation(噪声对比估计)的核心思想就是通过学习数据分布样本和噪声分布样本之间的区别,从而发现数据中的一些特性,将问题转换成了一个二分类问题,分类器能够对数据样本和噪声样本进行二分类。

假设一个特定上下文 [公式] 的数据分布为 [公式],从该分布采样的样本为正样本,记[公式],另一个与上下文无关的噪声分布为[公式]

,从该分布取出的是负样本,记为 [公式]假设现在取出了若干正负样本组成一个混合分布 [公式]负样本与正样本之比为k(正样本[公式]个,负样本[公式]个),那么有:

[公式]

假设标签 [公式] (属于哪一个分布)为伯努利分布,那么它的对数似然函数(取负值为交叉熵损失):

[公式]

目标函数需要除以正样本数目(利用大数定律可以看做是期望):

[公式]
NCE原理

将目标函数对\(\theta\) 求导:

[公式]

对于上面两项继续求导:

  1. [公式]
  2. [公式]

将上述式子带回目标函数求导结果:

[公式]

此处存在两个细节:

  1. 假设配分项[公式](对于参数很多的神经网络来说,配分项每次求梯度时可看做固定的,我们将 [公式] 固定为 1 对每个 [公式] 仍是有效的)。

    $

    \[\begin{aligned} p_{\theta}(w \mid c) &=\frac{\exp \left(s_{\theta}(w, c)\right)}{\sum_{w^{\prime} \in V} \exp \left(s_{\theta}(w, c)\right)} \\ &=\exp \left(s_{\theta}(w, c)\right)\times \exp \left(\theta_{0}\right)\\ \end{aligned}\]

    $

    上述式子对\(\theta\) 求导只有第一项的内容,因此后面部分看做是1在梯度更新时是有利的。

    如此一来:[公式]

  2. \(k\to \infty\)时,\(\frac{k \times q(w)}{p_{\theta}(w, c)+k \times q(w)}\)的极限为1。

    [公式]
实现

实现时:一般正例采样一次,负例采样k次。

InfoNce  CPC

https://arxiv.org/abs/1807.03748

任务和目的

CPC(对比预测编码) 就是一种通过无监督任务来学习(编码)高维数据的特征表示(representation),而通常采取的无监督策略就是根据上下文预测未来或者缺失的信息(nlp中早有分布式表示的概念)。 [公式] 表示根据当前上下文 [公式] 预测 [公式] 个时刻后的数据 [公式] (假设是像文本、语音中那样的序列数据),可以通过最大化当前上下文 [公式] 和要未来的数据 [公式] 之间的互信息来构建预测任务。

[公式]

其中联合分布本身是intractable的,但是我们可以从[公式]入手,这个比例可以被看做密度比(即贝叶斯中的似然比,给定上下文c第k个单词为\(x_{t+k}\)的概率,比一般群体多了多少),分子 [公式] 就相当于 [公式] ,是我们想得到的目标函数;分母 [公式] 就相当于 [公式] ,是用来进行对比的参考分布(噪声)。因此类似NCE,将问题转化为二分类问题:

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

同样可以按照NCE中的写法:

[公式]

[公式] 是一个 socring function ,输出的分数用来量化 [公式] 在上下文 [公式] 中匹配性(NCE例子中是神经网络), CPC 文章中用余弦相似度来量化,并且将 [公式] 定义为 [公式]

[公式]

写为交叉熵损失,得到:

[公式]
与互信息的关系

对于互信息的利用一般分为两类:

  1. 优化互信息上界(upper bound),一般作为正则项在pretrain使用,优化下游任务(较少)。

    Cheng P, Hao W, Dai S, et al. Club: A contrastive log-ratio upper bound of mutual information[C]//International conference on machine learning. PMLR, 2020: 1779-1788.

  2. 优化lower bound, 互信息本身是intractable,因此转化为优化lower bound

    Poole B, Ozair S, Van Den Oord A, et al. On variational bounds of mutual information[C]//International Conference on Machine Learning. PMLR, 2019: 5171-5180.

InfoNCE是第二种互信息估计,最小化 InfoNCE,也就等价于最大化 [公式][公式] 之间互信息的下限:

[公式]
与MINE关系

这篇论文中作者还将infoNCE与MINE(另一个互信息估计)做了比较,infoNCE比MINE多了个常数。对于复杂任务,两者效果都很好,但对于简单任务MINE会不稳定。