交叉熵损失(Cross-Entropy Loss)是衡量“模型给出的概率分布”和“真实答案”差多远的指标。训练语言模型时把它压到最小,就等于让模型在每一步都尽可能把概率给到语料里真正出现的那个词。
一步一道“词表级选择题”
语言模型每预测一个 token,本质是在整个词表上做一次多选:答案只有一个(训练语料里的下一个词),模型交出的却是每个词的概率。交叉熵只看一件事——它给正确答案分了多少概率 p,损失就是 -ln(p)。
- p = 0.9 → 损失约 0.11
- p = 0.5 → 损失约 0.69
- p = 0.1 → 损失约 2.3
- p = 0.01 → 损失约 4.6
给正确答案的概率越低,罚得越狠,而且越接近 0 罚得越陡。这就是它比“猜对几个”更细腻的地方:模型不必全对,但必须诚实地把信心放在对的地方。把整段语料上每个位置的 -ln(p) 求平均,就是训练时看到的 loss。
数学上,最小化交叉熵等价于最大化真实数据的对数似然(maximum likelihood)。所以“训练语言模型”这句话,直白翻译过来就是:不断调整参数,让训练文本在模型眼里显得越来越不意外。
和困惑度什么关系
困惑度(AI 词典:Perplexity">Perplexity)不是另一个损失,而是交叉熵换了个刻度:困惑度 = exp(交叉熵)(用自然对数时)。
它的直觉含义是“模型每一步平均在多少个候选词之间犹豫”。交叉熵为 0,困惑度是 1,说明它完全确定;交叉熵约等于 ln(词表大小),困惑度就约等于词表大小,等于在词表里均匀瞎猜。词表五万时,ln(50000) ≈ 10.8,这就是“毫无信息”时的损失量级。
| 概念 | 一句话 | 与交叉熵的关系 |
|---|---|---|
| 交叉熵 | 正确答案处的 -ln(p) 取平均 | 本体 |
| KL 散度 | 两个分布之间“多余的意外” | 交叉熵减去真实分布的熵;真实分布固定时,优化谁等价 |
| 困惑度 | 平均犹豫的候选词数量 | exp(交叉熵) |
| 均方误差 | 连续数值预测的偏差 | 用于回归;词表概率这类分布问题不适合 |
对从业者的意义
预训练、指令微调、蒸馏,乃至偏好模型打分,目标函数通常是交叉熵的变体。看着 loss 曲线下降,说明模型对这批数据更“熟”了,但它不等于更聪明:困惑度是在特定数据集和特定分词器上算出来的,分词方式不同,同一句话的 token 数就不同,跨模型的困惑度不能直接横比;loss 又是按 token 平均,长文档和短句的贡献并不均等。把它当“内在指标”看趋势可以,当能力评分要谨慎。具体实现细节和默认参数,以官方文档为准。
