NCE与InfoNCE
背景
NCE的背景任务是用一个参数化的分布$P_{\theta}(x)$去估计一个真实的分布$P_{D}(x)$,$P_{\theta}(x)$一般写成Gibbs distribution的形式
$Z_{\theta}$为配分函数,这种形式保证了$P_{\theta}(x) > 0$且对x积分和为1,一般使用目标函数$\log P_{\theta}(x)$,然后用最大似然估计去求解$\theta$,
因为我们不知道真实分布$P_{D}(x)$,所以一般是采用采样N个样本去估计它
但是配分函数$Z_{\theta}$的求解是个问题,不管x是连续的还是离散的,我们都难以对所有的x进行积分或者求和,但我们可以把它变成一个可以训练的参数Z,然后让神经网络去找一个最优的参数,因此最大似然的目标就变成了
上式明显有一个平凡解,就是让$Z\rightarrow 0$,于是$-\log Z$就接近无限大了,但这并不我们想要的结果,NCE就是要解决这个问题,它通过求解一个二分类任务,可以得到原本的目标函数的解的近似。
NCE
NCE构造了一个新的数据分布$P_{mix}(x, class)$,构造的方式是:每从真实的数据分布$P_{D}(x)$中采样一个样本(x, class=1),就从另一个噪声分布$P_N(x)$中采样k个样本(x, class=0),把这些数据混在一起,就得到了新的数据分布$P_{mix}$,然后我们要从$P_{mix}$里面去采样样本,并让模型去分辨采样出来的样本是来自于真实分布还是噪声分布。这个方法的直觉也很好理解,如果采样了非常多的噪声样本,模型还能够分辨出哪个样本是真的,说明模型已经对真实数据分布$P_{D}(x)$是什么样子非常了解了,应该就能做到对它很好的近似。
$P_{mix}(x, class)$的边缘分布$P_{mix}(class)$为p=1/(k+1)的伯努利分布:
来自$P_{mix}(x, class)$中的样本x的概率分布为:
使用贝叶斯公式,可以得到样本的最优分类器
但由于真实的样本分布我们并不知道,所以用最开始的那个参数化分布$P_{\theta,Z}(x)$去替代$P_D(x)$,
这里的参数$\theta, Z$是共享的,也就是说我们把原本用$P_{\theta,Z}(x)$去估计$P_D(x)$的任务转化为了用$P_{\theta,Z}(d|x)$去估计$P_{Mix}(d|x)$的二分类任务,前者因为参数Z的存在,使用最大似然估计时会有平凡解,而后者却没有这个问题。
二者的等价性
在原任务中,我们的最大似然目标函数是
对$\theta$求导,第二行中因为$Z_{\theta}=\int_{x} e^{s_{\theta}(x)} \mathrm{d} x$,对所有x进行了积分,只与$P_{\theta}$有关,而与真实分布$P_D$无关,可以把期望去掉
再对构造的分布$P_{mix}(x, class)$上使用最大似然估计:
则该二分类问题的目标函数为,很明显不再存在原任务中的平凡解$Z \rightarrow0$的问题:
对$\theta$求导:
当$k \rightarrow \infty$时,积分里左侧的分式等于1:
可以发现这和原任务的求导结果是一致的:
因此当从噪声分布中采样了足够大的k个样本,我们就可以用二分类学习任务替代原任务,得到了近似$P_{\theta}$的$P_{\theta,Z}$。
在对比学习里,我们希望模型能够学到一个很好的样本表征,在NCE里x就是这个样本表征,我们不知道它的真实分布是什么样子,但我们希望模型能够学到这个东西,并且能很好的区分正负样本,不过对比学习里用的是InfoNCE,NCE和InfoNCE的关系等过两天再写。。。