
大模型的似然:模型到底在“相信”什么
大模型的似然:模型到底在“相信”什么
我们经常说一个大模型“更可能生成某个答案”,也会用困惑度、交叉熵来比较两个模型的好坏。这里的“可能”并不是一句模糊的描述,它背后有一套明确的概率计算:给定已经看到的文本,模型为下一个 token 分配一个概率。
这篇文章从似然开始,把大模型训练和推理中经常出现的几个概念串起来:条件概率、最大似然估计、交叉熵、困惑度,以及似然指标为什么不能直接代表事实正确性。
先区分概率与似然
概率和似然使用的是同一个数学表达式,但提问的方向不同。
假设我们有一个模型 $p_\theta$,其中 $\theta$ 表示模型参数。对于一段文本 $x$:
- 概率:参数 $\theta$ 已知,问这段文本出现的概率是多少,即 $p_\theta(x)$。
- 似然:观测到文本 $x$,把 $\theta$ 当作变量,问哪一组参数能让这段文本最容易出现,即 $L(\theta \mid x)$。
因此,似然不是“文本本身的另一种概率”,而是用观测数据来评价参数的一种方式。写成公式就是:
右边的数值相同,左边强调我们正在比较不同的模型参数。
大模型的似然从哪里来?
语言模型使用链式法则,把一整段文本的概率拆成每个 token 的条件概率。假设文本被切分为 $x_1, x_2, \ldots, x_T$,那么:
其中 $x_{<t}$ 表示当前位置之前的所有 token。
例如,输入“今天北京的天气”,模型可能给出下面这样的分布:
| 候选 token | 条件概率 |
|---|---|
| 很好 | 0.35 |
| 晴朗 | 0.25 |
| 不错 | 0.15 |
| 下雨 | 0.10 |
| 其他 token | 0.15 |
模型选出一个 token 后,会把它追加到上下文中,再计算下一个位置的分布。生成“今天北京的天气很好”这一序列的概率,是每一步条件概率的乘积:
这也是自回归大模型的核心:它并不是一次性判断整句话,而是不断估计下一个 token 的条件分布。
为什么训练时使用对数似然?
直接把 token 概率相乘会遇到两个问题。
第一个问题是数值下溢。每个 token 的概率都小于 1,序列稍微长一些,连乘结果就会迅速接近 0。第二个问题是乘法不利于优化,而对数可以把乘法转换成加法:
所以训练语言模型时,通常最大化整个数据集的对数似然:
工程实现中更常见的是最小化负对数似然,也就是 NLL(Negative Log-Likelihood):
如果模型给真实 token 的概率越高,$\log p$ 越接近 0,负对数似然就越小;如果模型几乎不相信真实 token,损失就会变大。
交叉熵和最大似然是什么关系?
训练数据可以看作真实分布 $q(x)$ 的样本,模型提供一个近似分布 $p_\theta(x)$。交叉熵定义为:
在训练集上用样本平均替代期望,就得到平均负对数似然:
因此,在标准的 next-token prediction 训练中,最小化交叉熵就是最大化平均对数似然。两种说法关注点不同:
| 说法 | 关注点 | 直观含义 |
|---|---|---|
| 最大似然 | 统计估计 | 找到更能解释训练数据的参数 |
| 最小化 NLL | 优化目标 | 让真实 token 的概率变高 |
| 最小化交叉熵 | 分布匹配 | 让模型分布接近数据分布 |
对于 one-hot 标签的分类任务,交叉熵还可以写成所有类别概率的加权和。真实类别的标签为 1,其余类别为 0,因此每个位置最终只会惩罚模型对真实 token 分配的概率。
Teacher forcing:训练时模型为什么总能看到正确前文?
训练语言模型时,通常会把真实文本右移一位:输入是“今天 北京 的 天气”,标签是“北京 的 天气 很好”。计算第 $t$ 个位置的损失时,模型看到的是数据集中的真实前缀,而不是自己前一步生成的 token,这种方式叫 teacher forcing。
它有两个好处:
- 一个长度为 $T$ 的样本可以并行计算所有位置,不需要像推理一样逐 token 等待。
- 每个位置的训练目标清晰,梯度可以直接回传到对应的预测结果。
但它也带来训练和推理之间的差异。模型训练时看到的前文通常是正确的,实际生成时却可能把自己的错误继续放进上下文。这种误差累积是自回归模型产生长文本失真的原因之一。
困惑度:把似然变成更直观的指标
一段文本的总似然会随着长度增加而迅速变小,因此不能直接比较不同长度文本。常用做法是先取平均负对数似然,再取指数,得到困惑度(Perplexity,PPL):
如果模型在每个位置都像是在 $K$ 个候选 token 中均匀猜一个,困惑度大约就是 $K$。所以可以把 PPL 粗略理解为模型面对每个位置时的“有效候选数量”。PPL 越低,说明模型在评测文本上分配给真实 token 的平均概率越高。
不过,困惑度只能在相同 tokenizer、相同数据分布和相近评测设置下比较。一个模型把汉字切成单字,另一个模型把词切成更长的 token,直接比较 token 级 PPL 可能会产生误导。
似然高,为什么不等于答案正确?
这是理解大模型时最容易产生的误会。似然描述的是“这段文本在模型分布下有多常见”,并不直接描述“这段文本是否符合现实”。至少有以下几种情况需要区分。
1. 训练语料中的高频表达
新闻标题、模板化的技术解释和常见套话在训练数据中出现频率很高。模型很容易给它们较高概率,但高频表达不代表当前问题下的事实一定正确。
2. 流畅性与事实性是两个目标
“巴黎是法国的首都”在语料中很常见,模型通常会给出较高概率;但对于训练数据稀少、时间敏感或需要计算的问题,模型可能生成一段语法流畅、概率也不低的错误内容。语言模型首先学习的是文本分布,事实核验需要检索、工具调用或外部验证参与。
3. 长度会影响整句似然
两个答案 $A$ 和 $B$ 的序列概率是各自 token 概率的乘积,较长的答案通常更容易得到更小的总概率。因此比较答案时常用平均对数似然,或者对长度进行归一化;否则模型会被不公平地偏向短答案。
4. 生成策略会改变最终文本
模型输出的概率分布只是候选空间。贪心解码、temperature、top-k 和 top-p 会用不同方式从分布中选 token。同一个模型、同一个提示词,在不同采样参数下也可能得到完全不同的文本。
似然在大模型训练链路中的位置
可以把一条典型的大模型训练链路概括为:
1 | 文本数据 |
Transformer 最后一层输出的通常不是概率,而是每个词表 token 对应的 logit。对 logits 做 softmax 后才得到概率:
实际实现中经常使用 log-softmax 和交叉熵的融合算子,以减少数值问题和中间张量开销。训练目标虽然写成“预测下一个词”,但真正被优化的是:在每个位置,把更高的概率分给数据中的真实 token。
最大似然训练的边界
最大似然是一个非常自然的训练目标,但它并不能解决所有问题。
首先,模型会继承训练数据的偏差。数据中某种观点出现得更多,最大似然就会倾向于提高这类表达的概率。其次,训练集上的似然下降不保证模型在新领域上的表现一定提升,这涉及过拟合、数据分布变化和数据泄漏。最后,token 级似然只看到局部预测损失,它不会自动理解“这段话是否有帮助”“是否安全”“是否完成了用户任务”。
因此,预训练阶段通常以最大似然为核心;指令微调、偏好优化、人工评测和工具增强,则是在这个语言分布之上继续加入任务质量、偏好和外部信息约束。
总结
大模型的似然可以从一个简单问题开始理解:在已有上下文下,模型给真实的下一个 token 分配了多大概率?
- 一整段文本的概率可以按链式法则拆成 token 条件概率的乘积。
- 最大化对数似然等价于最小化负对数似然,工程上通常表现为交叉熵损失。
- 困惑度是平均负对数似然的指数形式,适合在一致的评测条件下比较语言模型。
- 高似然说明文本更符合模型学到的语言分布,不等于文本一定真实、正确或有用。
理解这一点之后,很多训练日志里的 loss、PPL,以及推理时的 token 概率,就能放回同一条逻辑链中看待。
参考资料
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, Chapter 5.
- Christopher M. Bishop, Pattern Recognition and Machine Learning, Chapter 1.
- Attention Is All You Need.




