候选之间互相竞争
softmax 比较相对得分。只抬高正例就能降低这行 loss;所有候选同时加同一常数则概率不变。共享参数更新会耦合多个候选与样本,所以不能保证每项都按独立分数的方向变化。
DEEP 02 / LOSS & BACKPROPAGATION
先看词表交叉熵怎样产生梯度,再追踪监督位置、输入查表和输出投影。 InfoNCE、SGNS、温度与难负样本放在对比学习支线中继续展开。
本页先读:词表交叉熵、有效监督位置和参数梯度。研究检索表示时,再进入 InfoNCE 与 SGNS 的对照。完整整层推导见 反向传播核验。
“embedding 表”未必只有一张。输入表负责查行,输出投影负责把 hidden state 映射到词表;两者可以共享,也可以分开。
[B,T][B,T,V]| 设置 | 输入侧梯度 | 输出侧梯度 | 后果 |
|---|---|---|---|
| E 与 W 分开 | lookup 梯度只散射到输入中出现的非屏蔽行 | 完整 softmax 通常给所有候选行梯度,不仅是 label | 参数更多;输入语义与输出预测可解耦 |
| 权重绑定 Wout = E | scatter 到输入 token 行 | 同一矩阵的各行也得到输出梯度 | 省参数、共享统计,但两类压力互相耦合 |
| 冻结 E | 把梯度停在查表处 | 若 W 独立仍可学习 | 不能靠更新输入行适配新词,但可降低显存与漂移 |
下一词模型在一个有效监督位置预测整个词表的概率。交叉熵使用正确类别的负对数似然;对每个 logit 求导,得到预测概率减去 one-hot 目标。对多个有效位置取平均时,还要包含对应的归一化分母。
只看一个有效位置,真实类别为 k,z 是已经进入 softmax 的 logits。将负对数展开后:
这是单位置、无类别权重的形式。有效位置平均会再除全局分母;soft label 在归一化到和为 1 时仍可写为 p−y。得到 logit 梯度后,还需沿网络反传,并通过优化器计算参数更新。
这些设置会改变有效监督位置,以及梯度进入参数的路径。
attention mask 排除 PAD 键,loss mask 排除 PAD 标签位置,padding_idx 可阻止 lookup 算子累加该行梯度;三者作用不同。ignore_index 不删除有效位置 softmax 中的 PAD 类别,因此绑定输出表仍可能使 PAD 行收到梯度。PAD 与 EOS 共用 ID 时,尤其不能按 ID 把有效 EOS 标签一并屏蔽。
直接除指数和容易溢出。稳定实现先减去最大 logit,再用 logsumexp。InfoNCE 也应在 logits 空间做 cross-entropy;把极小或极大的概率手动乘除会破坏数值稳定性。
前向只取少数行,但优化器状态是否省取决于实现。若使用 Adam,整个 E 的矩状态仍可能驻留;分布式训练还要做 all-reduce。有些系统用稀疏梯度或分片 embedding,但会换来通信和采样复杂度。
完整词表 softmax 的分母含 V 个类别,非目标类的 logit 梯度为 p,目标类为 p−1。输入 lookup 只散射到被访问的行;输出投影通常是稠密梯度,绑定时也会加回 E。sampled softmax 和 SGNS 属于另外的计算或目标设置。
每个其它样本的正文档可能成为当前 query 的负例。batch 越大,噪声候选越多、负样本越丰富,但显存和通信成本也更高;而 in-batch 样本越多,也越可能混入 false negatives。
切场景,观察哪些 token 行拿到了梯度。权重绑定会改变“目标 token 不在输入里”时的结果。
实现上用索引取行;数学上等价于 one-hot 乘矩阵。
同一行在一个 batch 中被访问几次,就累加几次梯度。
AdamW 等优化器再把原始梯度变成逐步更新量。
有梯度、梯度为零、参数不更新是三件事。这里展示当前 batch 的损失梯度来源,忽略 batch 平均系数与偶然抵消。即使某行当前梯度为零,优化器的历史动量或 AdamW 权重衰减仍可能改变它;冻结参数还要确保它不参与优化器更新。
对比学习支线:下面改用 query 与候选构造监督,比较 InfoNCE、SGNS 和负样本梯度;这里的候选数与归一化方式按各节说明。
拖动温度与难负样本分数,看正例概率、loss 和正负例分数的导数一起变化。
InfoNCE 对所有候选分数一起归一化。改变一个负例的分数,也会改变其他候选的概率。
正例当前得分最高。温度降低会让概率更尖锐,但梯度大小还取决于 p−y;把难负例抬到高于正例可观察另一种情况。
softmax 比较相对得分。只抬高正例就能降低这行 loss;所有候选同时加同一常数则概率不变。共享参数更新会耦合多个候选与样本,所以不能保证每项都按独立分数的方向变化。
真实搭配希望 σ(s)→1,采样负例希望 σ(s)→0。K 个负例各有 logistic 损失,不做候选间 softmax 归一化。
τ 小会放大分数差,但梯度同时取决于 p−y。正例已明显胜出时梯度可能饱和到零;负例胜出时则可能被 1/τ 放大。
对一个 query 行,正样本的概率 pi 与负样本概率 pj 共同决定反传梯度。
先归一化再点积时,这就是 cosine / τ;内积训练则不一定归一化。
对角候选是正例,其他列是负例或 in-batch negatives。
这是 softmax + 交叉熵最常用的梯度;y 在正候选位置为 1。
这是对 q 的导数;梯度下降方向与它相反。更新含朝正文档、远离负文档的分量,最终是各项的向量和。若 q 是归一化后的输出,还要继续穿过归一化算子。
难负例与假负例要按任务标注区分。“主题相关但不能回答”可以是合理难负例;真正满足相关性标准、却因漏标被当成负例的才是假负例。两者的分数导数都为 pij/τ ≥ 0,更新会压低分数,后者因此损伤有效证据。可用多正例目标、重复文档屏蔽与标注复核处理。
归一化也在计算图里。若 q 是单位向量,u 是归一化前的非零输出,继续反传时还要穿过归一化的 Jacobian。
输出投影的完整梯度与权重共享可继续核对分块交叉熵实验:逐块重建概率并累计 hidden 与输出权重的贡献。
公式默认单个有效位置/单个 query、单正例、无 label smoothing。batch 平均、归一化算子、冻结及权重绑定都会影响最终参数梯度。