Negative Sampling
Negative Sampling 是一种训练优化技巧,将对整个词表的 Softmax 计算简化为少量"负样本"的二分类问题,大幅降低 Word2Vec 等模型的训练成本。
Negative Sampling
直觉理解
假设你在学英语单词。老师给你一个句子 "The cat sat on the ___",正确答案是 "mat"。
传统方法:让你从整本词典(几十万个词)中选出 "mat"——代价极高。
Negative Sampling 的方法:只让你区分 "mat"(正样本)和随机挑出的几个干扰词如 "banana"、"quantum"、"Tuesday"(负样本)。只要你能从这几个选项中选对,就算学到了。
为什么需要它
在 Word2Vec 的原始设计中,预测下一个词需要对整个词表计算 Softmax:
P(wo∣wI)=∑w=1Vexp(vw′⋅vwI)exp(vwo′⋅vwI)分母需要遍历词表中所有 V 个词(通常 V>100,000),每一步训练都要计算十万次以上的点积和指数运算。这在实践中极其缓慢。
核心思想
Negative Sampling 将问题从"V 分类"转化为"几个二分类":
不再问"哪个词是正确的",而是问"这个词对是真实共现的,还是随机凑的?"
对于一个真实的 (context, target) 词对,训练目标变为:
L=logσ(vwo′⋅vwI)+i=1∑kEwi∼Pn(w)[logσ(−vwi′⋅vwI)]其中:
- 第一项:让正样本的得分尽量高
- 第二项:让 k 个随机采样的负样本的得分尽量低
- σ 是 Sigmoid 函数
- k 通常取 5-20
采样策略
负样本不是均匀随机选的。Word2Vec 使用词频的 3/4 次幂分布:
Pn(w)=∑w′f(w′)3/4f(w)3/4为什么是 3/4?
- 如果均匀采样,高频词("the"、"a")和低频词被选中的概率一样,但高频词作为负样本的区分度很低
- 3/4 次幂提升低频词的采样概率,使负样本更具挑战性,训练效果更好
效果对比
| 方案 | 每步计算量 | 训练速度 | 效果 |
|---|---|---|---|
| Full Softmax | O(V) | 极慢 | 精确 |
| Hierarchical Softmax | O(logV) | 较快 | 对低频词好 |
| Negative Sampling | O(k),k≪V | 极快 | 对高频词好 |
当 k=15、V=100,000 时,计算量缩减了约 6600 倍。
更广泛的影响
Negative Sampling 的思想不限于 Word2Vec,它启发了许多后续工作:
- 对比学习(Contrastive Learning):拉近正样本对、推远负样本对
- InfoNCE 损失:CLIP、SimCLR 等模型的核心损失函数
- 检索模型训练:用负样本训练 query-document 匹配
本质上,Negative Sampling 提出了一个通用的工程洞察:当精确计算太贵时,用采样近似往往足够好。