INFO-NCE远离

Reading time ~1 minute

到底什么是NCE?

从KL散度到交叉熵

Loss 函数的目的:

假设真实分布为P, 模型训练的到的分布是Q, 训练的目的就是为了是Q分布更接近P分布。

为了计算P分布和Q分布的距离,有什么办法呢?

\[D(P||Q)=\sum_{i=1}^n P(x) log\frac{P(x)}{Q(x)} \ = \sum_{i=1}^n P(x)log P(x) - \sum_{i=1}^n P(x)log Q(x)\]

对于模型训练过程来说,真实分布是固定的,对于上面的公式只得到了一个:

\[D(P||Q)= - \sum_{i=1}^n P(x)log\;Q(x)\]

如果需要最小化损失的话,只需要最小化上面这个公式即可。

从交叉熵和softmax结合

对于某条离散样本计算交叉熵的过程如下:

  • 二分类的情况

我们用$\hat y$ 为正样本的预测概率, $y$ 为样本的真实标签值。在二分类问题中$\sum_{i=1}^2P(x)log\;Q(x)$只有两种情况。最终得到的结果:

\[D(P||Q)= -(y\;log(1-\hat y) + (1-y)\;log\;(1-\hat{y}))\]

对手训练集上的样本, 对整体的交叉熵求平均。

  • 多分类的情况

多分类情况下使用softmax计算每个样本的预测概率,每个样本计算出来的概率值我们表示为$E$

\[D(P||Q)= - \sum_{i=1}^n P(x)log\;Q(x)\]

公式可以描述为:

\[D(P||Q)= - \sum_{i=1}^n P(x)log\;\frac{E_i}{\sum_{j=1}^n E_j}\]

在假的类上P(x)=0最后得到的概率只是真类上的概率和,假类在softmax的分母中起作用,对上面的公式简化为:

\[D(P||Q)= - \sum_{i=1}^n log\;\frac{E^{pos}_j}{\sum_{j=1}^n E_j}\]

最小化上述公式等价于最小化:

\[D(P||Q)= - log\;\frac{E^{pos}_j}{\sum_{j=1}^n E_j}\]

所以在这里要搞清楚一个问题, 负采样是采样一次分类里面的正例和负例, 而不是正样本和负样本。在二分类问题中,我们预测点击的概率, 但是在多分类问题中, 我们预测的是每个类别上的概率。

我们的结果是:[1, 0, 0, 0, 0, 0, 0, 0]。

每条样本下都有一个真类和假类。也就是一条样本中包含真, 也包含假;不像二分类的情况以数据行来区分正样本和负样本。这篇文章《候选采样(candidate sampling)》也是值得一看。

从多分类到NCE

在上面的代码中, 有一个很困难的问题。计算softmax的loss的时候需要计算归一化的常数 $Z = \sum_{j=1}^n E_j$。对于超分类问题来说$n$的数目非常大,这里带来的计算量是致命的。在NCE中就是将原来的多分类问题转成了二分类问题。具体NCE为什么对真实分布的模拟是有效的我们后面再说。 在nce-loss采用中使用log-uniform分布来采样噪声分布的节点结果。nce-loss采样的函数如下:

\[P(class)=\frac{log(class + 2)-log(class + 1)}{log}\]

从representation到CPC

在Auto Encoder里面对于item或者词汇的embedding表示是基于label进行的。 以item2vec为例, 例如只有两个物品:

  1. 物品A是美妆类型的视频, 嵌入得到了一个Embedding A1.

这个时候,在AutoEncoder的Encoder和Decoder只是拟合了一种特定的关系,这种特定的关系无法被其他模型学习到。也就是Embedding A不能代表A的特性。 或者换一种说法Embedding A即使能够代表A的特性,但是这种特性只适合在AutoEncoder的场景下使用。这种情况下的representation是not predictive的。

为了解决这个问题,有一种方式就是将物品A和Embedding A1以及组成一个pair对,将物品B和Embedding B1组成pair对,将物品A和Embedding B1组成pair对。再将物品B和embedding A1组成pair对, 去预测embedding和item是否匹配。

这种情况下实际上是有两个任务: 一个任务用来约束两个变量是否匹配, 一个任务用来训练模型。另外一个任务用来约束输入和embedding的关系,确保向量是predictive的。

从NCE到INFO NCE

在INFO NCE中采用一个log-uniform分布来模拟噪声分布。在真实环境当中, 怎么样试图通过负样本的构建来还原真实分布是至关重要的事情。 相关INFO-NCE的代码可以参考: 腾讯iwiki

接下来到我们的重头戏: INFO-NCE 首先:INFO-NCE需要面对的问题是,高纬稀疏数据有些数据不能出现在label中的情况,这个时候没有label的那部分数据是浪费掉的。在label较少的时候怎么样把这部分数据利用起来。

这篇《理解Contrastive Predictive Coding和NCE Loss》很不。

在原始的INFO-NCE论文中, 考虑到INFO-NCE主要是用在Auto Encoder的情况。在了是的表征能力更强,我们引入一个predictive任务来预测当前的representation对物品的表示。

对于输入item A我们引入一个任务来学习item A的Embedding接下来序列的预测任务并且计算loss。一个单纯就是用来学习representation的任务和一个可以用来做预测的任务。 在NCE中,从分类转成二分类用来表示representation的结果。这种情况下是不native的。

在NCE中,将负样本的分布服从Zipfian分布。

从INFO NCE到Fcoal Loss

在目标检测当中,什么是two-stage detector和one-stage detector.

flocal loss这个函数可以减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。 关注Focal loss对Loss的修改, 我们可以看一下

腾讯广告MVKE实现多目标的用户画像建模

以House Price为例快速构建一个Base Line模型 Continue reading

召回部分代码重构

Published on September 29, 2022

Mind多兴趣召回

Published on September 26, 2022