负采样(Negative Sampling) 是一种在训练大型分类或概率模型(尤其是在输出类别很多时)中,用来加速训练、降低计算量的方法。
它常用于:
在许多任务中,我们的模型要从上万个候选中预测正确类别。例如:
给定单词 “cat”,预测它上下文中出现的词(如 Word2Vec 的 Skip-gram)
这时我们本应计算所有词的概率(比如 Softmax over 100,000 words)——这太慢了。
所以:
负采样的核心思想是:
只对少数几个“负例”做对比,而不计算所有类别!
举个例子:
我们用一个二分类器判断:
训练目标是:
如果正例是 ( w , c ) (w, c) (w,c),负采样损失函数为:
log σ ( v c ⊤ v w ) + ∑ i = 1 k E w i ∼ P n ( w ) [ log σ ( − v w i ⊤ v w ) ] \log \sigma(v_c^\top v_w) + \sum_{i=1}^k \mathbb{E}_{w_i \sim P_n(w)} [\log \sigma(-v_{w_i}^\top v_w)] logσ(vc⊤vw)+i=1∑kEwi∼Pn(w)[logσ(−vwi⊤vw)]
常用的负例分布是:
P n ( w ) ∝ U ( w ) 3 / 4 P_n(w) \propto U(w)^{3/4} Pn(w)∝U(w)3/4
优点 | 说明 |
---|---|
计算快 | 不用对所有词做 softmax |
更有效学习 | 负例对比带来更清晰的学习信号 |
占内存少 | 参数只需更新部分词向量 |