Candidate sampling:NCE loss和negative sample

在工作中用到了类似于negative sample的方法,才发现我其实并不了解candidate sampling。于是看了一些相关资料,在此简单总结一些相关内容。

主要内容来自tensorflow的candidate_sampling和卡耐基梅隆大学一个学生写的一份notesNotes on Noise Contrastive Estimation and Negative Sampling,还有一部分参考了tensorflow的nce_loss和sampled_softmax_loss的文档。

What is Candidate Sampling

首先,什么是candidate sampling呢?假设我们有这样一个问题,给定一个样本集,其中每个样本由 ( x i , T i ) (x_i, T_i) (xi,Ti),其中 x i x_i xi是输入特征, T i T_i Ti是一个target小集合,满足 T ⊂ L , ∣ T ∣ &lt; &lt; ∣ L ∣ T \subset L, |T| &lt;&lt; |L| TL,T<<L。我们的目标是学习一个 F ( x , y ) F(x, y) F(x,y),使得给定一个 x x x,我们可以预测出类别 y y y为正的可能性。

如果我们使用正常的softmax方法,那么在计算每一个sample时,我们都需要遍历整个集合 ∣ L ∣ |L| L,对每一个可能的 y y y计算一次 F ( x , y ) F(x, y) F(x,y),这是非常昂贵的操作。尤其是在NLP的相关预测中,这一操作代价更加高昂。所以candidate sampling的方法被提了出来:在计算每一个sample时,我们从整个标签集合或者负标签集合中随机采样出一个小的candidate集合 S S S,将 S S S T T T一起组成当前的candidate集合 C = S ∪ T C = S \cup T C=ST,并在 C C C上计算 F ( x , y ) F(x, y) F(x,y)

常见的candidate sampling方法的特性可以见下表:

在这个表中, K ( x ) K(x) K(x)是一个不依赖于候选类的任意函数。 由于Softmax涉及归一化,因此添加这样的函数不会影响计算的概率。 Q ( y ∣ x ) Q(y|x) Q(yx) S i S_i Si中类y的期望概率或者期望个数。

NCE和nagetive sample可以适应于 T i T_i Ti是multiset的情况,在这种情况下, P ( y ∣ x ) P(y|x) P(yx)等于 T i T_i Ti中类y的期望个数。NCE,negative sampling和sampled logistic可以适应于 S i S_i Si是multiset的情况,在这种情况下, Q ( y ∣ x ) Q(y|x) Q(yx)等于 S i S_i Si中类y的期望个数。

Noise Contrastive Estimation (NCE)

我们考虑一种简单的也是最常用的情况, ∣ T ∣ = 1 |T| = 1 T=1。以经典的word预测为例,此时 T = t i T= {t_i} T=ti。我们给定经验分布 P ~ ( x ) \widetilde{P}(x) P (x) P ~ ( t ∣ x ) \widetilde{P}(t|x) P (tx),则每一个训练集中的正样本都相当于从 P ~ ( x ) \widetilde{P}(x) P (x)采样出一个 x i x_i xi,并在这个 x x x的基础上在 P ~ ( t ∣ x ) \widetilde{P}(t|x) P (tx)上采样出 t i t_i ti,并标定label d = 1 d = 1 d=1。同时我们从分布 Q ( x ) Q(x) Q(x)中采样出 k k k个noise samples,则
P ( d , t ∣ x ) = { k 1 + k Q ( x ) d=0 1 1 + k P ~ ( t ∣ x ) d=1 P(d, t|x)= \begin{cases} \frac{k}{1 + k}Q(x) &amp; \text{d=0}\\ \frac{1}{1 + k}\widetilde{P}(t|x)&amp; \text{d=1} \end{cases} P(d,tx)={1+kkQ(x)1+k1P (tx)d=0d=1
那么使用条件概率公式,我们就可以写出:

P ( d = 0 ∣ t , x ) = k ∗ Q ( x ) P ~ ( t ∣ x ) + k ∗ Q ( x ) P(d = 0| t, x) = \frac{k * Q(x)}{\widetilde{P}(t|x) + k * Q(x)} P(d=0t,x)=P (tx)+kQ(x)kQ(x)

P ( d = 1 ∣ t , x ) = P ~ ( t ∣ x ) P ~ ( t ∣ x ) + k ∗ Q ( x ) P(d = 1| t, x) = \frac{\widetilde{P}(t|x)}{\widetilde{P}(t|x) + k * Q(x)} P(d=1t,x)=P (tx)+kQ(x)P (tx)

在神经网络算法中,我们使用 P θ ( t , x ) P_\theta(t,x) Pθ(t,x)来代替 P ~ ( t ∣ x ) \widetilde{P}(t|x) P (tx),并试图用梯度下降法来训练 θ \theta θ

Negative Sampling

Negative Sampling是NCE的一种近似,比较值得注意的是,negative sampling对于分布Q有强依赖,NCE则没有这个问题。

tensorflow实现

NCE loss在tensorflow中的文档可以参考tf.nn.nce_loss。要注意的是,使用这种方法时,标签必须按照frequency的降序排序,因为默认的采样方法是tf.nn.log_uniform_candidate_sampler。当然我们也可以实现自己的采样方法。

Negative sampling则用sampled_softmax_loss来实现,注意sampled_softmax_loss只能处理一个正label的情况。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值