对于深度学习中的Negative Sampling的理解
数据集正负不均衡时的Negative Sampling
如果在一个数据集中存在着正负样本的不均衡,比如正样本1个,负样本99个,那么我将全部的结果预测成负样本即可,正确率也非常的高,但显然这是不行的。在这时,我们可以采用Negative Sampling的方法进行训练:每次只取n个(n可以自己来定)负样本,配合1个正样本来进行训练,而不是采用全部的数据集。
skip-gram模型中的Negative Sampling
参考
训练神经网络 意味着输入一个训练样本调整weight,让它预测这个训练样本更准。换句话说,每个训练样本将会影响网络中所有的weight。
像我们之前讨论的一样,我们词典的大小意味着我们有好多weight,所有都要轻微的调整。
Negative sampling 解决了这个问题,每次我们就修改了其中一小部分weight,而不是全部。
如果 vocabulary 大小为10000时, 当输入样本 ( “fox”, “quick”) 到神经网络时, “ fox” 经过 one-hot 编码,在输出层我们期望对应 “quick” 单词的那个神经元结点输出 1,其余 9999 个都应该输出 0。在这里,这9999个我们期望输出为0的神经元结点所对应的单词我们为 negative word. negative sampling 的想法也很直接 ,将随机选择一小部分的 negative words,比如选 10个 negative words 来更新对应的权重参数。
假设原来模型每次运行都需要300×10,000(其实没有减少数量,但是运行过程中,减少了需要载入的数量。) 现在只要300×(1+10)减少了好多。
选择 negative samples
问题来了,如何选择10个negative sample呢。
negative sample也是根据他们出现概率来选的,而这个概率又和他们出现的频率有关。更常出现的词,更容易被选为negative sample。
这个概率用一个公式表示,每个词给了一个和它频率相关的权重。这个概率公式为:
在paper中说0.75这个超参是试出来的,这个函数performance比其他函数好。