negative sampling负采样和nce loss
一、Noise contrastive estimation(NCE)
语言模型中,在最后一层往往需要:根据上下文c,在整个语料库V中预测某个单词w的概率,一般采用softmax形式其中partition function Z(c)的目的是normalize,使得p为一个概率分布。一般根据最大似然法估计上述参数,但是这个公式的计算量是巨大的,因为要遍历V中的所有单词。
此时NCE就闪亮登场了,为了避免巨大的计算量,NCE的思路是将softmax的参数估计问题 转化成 二分类。二分类两类样本分别是真实样本和噪声样本:正样本是由经验分布
生成的(即真实分布)标签D=0,负样本则是噪声由q(w)生成 对应标签D=1。假设c代表上下文context,从噪声分布中提取k个噪声样本,在总样本(真实样本+噪声样本)中w代表预测的目标词。
那么(d,w)的联合概率分布如下:
由上面公式不难得出:在总样本中 P(w/c) = p(d=0,w/c) + p(d=1,w/c)
Tips:P指的是正负样本的整体分布,这与之前的正样本的经验分布不同
继续根据条件联合概率公式 可以得出:p(d=0/w,c) = p(d=0,w/c) / p(w/c)
p(d=1/w,c)类似
即下面公式:
其实这个公式直接根据条件概率理解。
NCE利用模型分布
来代替经验分布 ,到此就与最开始讲的softmax联系起来了,通过最大化likelihood来得到最优的参数theta。但是此处还是没有解决问题,因为
和最开始的公式一样,需要遍历所有V计算partition function Z©。
- NCE接下来提出了两个假设:
- partition function Z(c)不需要遍历V得到,而是通过参数Zc来进行估计
- 由于神经网络具有很多参数,因此可以将Zc设定为一个固定值Zc=1,这种设定对于所有的c都是有效的([Mnih and Teh2012])
根据上述假设,公式可以进一步写成:
之后根据最大化log-likelihood来训练参数,其中选定k个负样本,那么loss函数为:
其中第二项依旧很难计算,因为涉及到k期望expectation(E),因此此处采用蒙特卡洛估计Monte Carlo approximation,根据采样k个样本来代替k期望:
二、Negative Sampling
负采样Negative Sampling是NCE的一个变种,概率的定义有所区别:
对于NCE的概率公式:如果k=|V|并且q是均匀分布uniform,那么k*q=1,此时两个概率公式就是一致的。
但是,除了上述情况以外