负采样(Negative Sampling)是一种“不算全量,只挑一小撮反例来近似”的训练技巧:它把原本要在几十万个候选里做归一化的多分类问题,简化成若干个“是 / 不是”的二分类问题,让每步计算量压到常数级。
它解决什么问题
以 Word2Vec 训练词向量为例。任务是:给一个中心词(如“咖啡”),预测它周围会出现哪些词(如“喝”“浓郁”)。标准做法是 AI 词典:Softmax">Softmax:模型给词表里每个词都打分,再做指数归一化成概率。可词表动辄几十万词,每更新一个样本就要遍历全表,训练成本高得离谱。
负采样换了思路:不要概率分布,只要“判断力”。把真实出现过的搭配(“咖啡—喝”)当正例,标签为 1;再从词表里随机抽 k 个不相关的词(“螺丝刀”“赤道”)当负例,标签为 0。模型只学“能不能把正例和这些随机反例区分开”。k 很小,通常是个位数到几十,于是每次更新只算 k+1 个二分类,而不是几十万次。
打个比方:判断某人是不是你的好朋友,不必把全国十四亿人排个名次看他排第几;拿他跟身边随机拉来的几个陌生人比一比,能明显区分开,结论就八九不离十了。负采样就是这种“局部比较”的思路。
和相邻概念的区别
| 方案 | 每次更新算多少项 | 本质 |
|---|---|---|
| 全量 Softmax | 全部 V 个词 | 多分类概率分布 |
| 层次 Softmax | O(log V) | 沿树路径的二分类 |
| 负采样 | 1 + k 个 | 若干独立二分类 |
层次 Softmax 靠树结构把 log 因子降下来,仍是归一化思路;负采样干脆不归一化,只做判别。它和“难负例挖掘(Hard Negative Mining)”也不是一回事:负采样强调“少”,难负例强调“挑得刁”,两者常配合使用——先用采样省算力,再靠挑选提升效果。
对从业者的实际意义
负采样不只属于 Word2Vec。对比学习(Contrastive Learning)里,一个批次内每个样本的其他样本就是天然负例,即 in-batch negatives:批次越大,负例越多,这也解释了为什么对比学习偏爱大批次或负例队列。推荐系统的双塔召回同样靠它把训练跑起来;知识图谱嵌入、句向量训练也都在用。
几条经验规律:负例越多通常效果越好,但存在边际递减;负例怎么抽很关键,Word2Vec 常用按词频的 3/4 次方加权采样,避免高频词淹没一切(具体实现以官方论文和代码为准)。
一句话总结:凡是候选集巨大、又只需要判断“像不像”的场景,负采样都能帮你省下绝大部分算力。
