深度学习中的负采样
是一种在训练(尤其是在输出类别很多时)中,用来的方法。
·
深度学习中的负采样
负采样(Negative Sampling) 是一种在训练大型分类或概率模型(尤其是在输出类别很多时)中,用来加速训练、降低计算量的方法。
它常用于:
- 词向量训练(如 Word2Vec)
- 推荐系统(从大量候选项中学正例与负例)
- 语言模型、对比学习、信息检索等场景
🧠 本质概念
在许多任务中,我们的模型要从上万个候选中预测正确类别。例如:
给定单词 “cat”,预测它上下文中出现的词(如 Word2Vec 的 Skip-gram)
这时我们本应计算所有词的概率(比如 Softmax over 100,000 words)——这太慢了。
所以:
负采样的核心思想是:
只对少数几个“负例”做对比,而不计算所有类别!
💡 Word2Vec 中的负采样
举个例子:
- 正例:“cat” → “meows”
- 随机采样 5 个负例(如 “banana”, “airport”, “data”, …)
我们用一个二分类器判断:
- “cat” → “meows” 是真实的(打标签 1)
- “cat” → “banana” 是伪造的(打标签 0)
训练目标是:
- 让正例得分高
- 让负例得分低
🔢 数学形式
如果正例是 (w,c)(w, c)(w,c),负采样损失函数为:
logσ(vc⊤vw)+∑i=1kEwi∼Pn(w)[logσ(−vwi⊤vw)] \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)]
- σ\sigmaσ:sigmoid 函数
- vcv_cvc、vwv_wvw:分别是上下文词和目标词的向量
- wi∼Pn(w)w_i \sim P_n(w)wi∼Pn(w):从某个分布中采样负词
- kkk:负采样数量
🧲 负例怎么采?
常用的负例分布是:
Pn(w)∝U(w)3/4 P_n(w) \propto U(w)^{3/4} Pn(w)∝U(w)3/4
- U(w)U(w)U(w):词频
- 把高频词稍微压低(防止频率太高的词总被采到)
✅ 优点
| 优点 | 说明 |
|---|---|
| 🚀 计算快 | 不用对所有词做 softmax |
| 🧠 更有效学习 | 负例对比带来更清晰的学习信号 |
| 💾 占内存少 | 参数只需更新部分词向量 |
📦 应用场景举例
- Word2Vec / FastText:负采样代替softmax
- 对比学习(如SimCLR、CLIP):构造正负对比对
- 推荐系统:用户喜欢的商品为正,其余为负采样项
- 知识图谱链接预测:正三元组 vs 负三元组(伪造的头/尾)
更多推荐


所有评论(0)