先记住这个答案
模型将文本生成拆解为条件概率链:P(t1,t2,...) = ∏ P(t_i | t_<i)。每一步,Transformer 编码当前序列,取最后 token 的隐状态,经线性层得到词表大小的 logits 向量,再通过 softmax 转为和为 1 的概率分布。解码时,通常按该分布做贪心或采样得到下一个 token,并拼接到输入,重复至结束符。概率计算的核心就是 softmax 归一化,它把任意实数的 logits 压缩为有效的概率值。
- 生成是自回归链式条件概率,每次依赖全部已生成 token。
- 最后隐状态经线性层和 softmax 得到词表上的分布。
- 采样参数改变的是选择策略,不是模型预测的本质。
从输入序列到概率分布的全过程
实际运行中,模型以当前已生成的 token 序列(例如 [“你”,“好”])作为输入。Transformer 解码器对每个位置都产生一个向量表示,而只有最后一个位置的向量被当作预测“下一个 token”的全部依据。这个向量形状为 [hidden],随后乘以一个形状为 [hidden, vocab_size] 的线性权重矩阵,得到 vocab_size 个数值,这就是 logits——每个候选 token 的得分,数值可正可负,没有归一化约束。
要变成概率,需对 logits 做 softmax 变换:先对每个值取自然指数(exp),再除以所有指数值的总和。公式为 p_i = exp(z_i) / Σ_j exp(z_j),这样所有概率非负且加和为 1。模型自带的 token 顺序与得分无关,但得分大小会直接决定哪个 token 更可能被选中。贪心解码直接取 argmax,而采样则从该分布中按概率抽取,所以概率是生成决策的基础。
一个迷你词表下的逐步生成示例
假设一个极简环境:输入“人工智能”,词表仅包含 [“是”,“未来”,“,”] 三个 token。模型经编码后,最后隐状态经线性层得到的 logits 是 [2.0, 1.0, 0.5]。取指数得到 [7.39, 2.72, 1.65],总和约 11.76,则概率分别为 [0.628, 0.231, 0.140]。若用贪心,则选“是”;若用温度为 1.5 的采样,需先将 logits 除以 1.5 再 softmax,新分布会拉低高概率与低概率的差距,可能随机抽出“未来”。选中“是”后,新序列变为“人工智能是”,再次作为输入重复上述流程。第二次可能得到 logits 为 [0.3, 1.5, 4.0],经 softmax 后“,”的概率最高,但也有不可忽略的概率抽到“未来”或“是”。每次生成都建立在当前完整上下文的重新编码上,因此前面的选择会约束后续方向。工程中常见温度、top-k 等参数就是在这一步对 logits 或概率调整,但模型“下一个 token 预测”的框架不变。
上述自回归过程会持续,直到模型输出一个指定的结束标记(如 [EOS])或达到预设的最大长度。每一步把新产生的 token 拼接到已有序列,再作为输入计算下一步的分布。值得注意的是,虽然实际推理常使用 KV Cache 缓存历史键值以加速,但概率的数学本质仍是基于完整前缀的条件分布。
哪些情况会偏离理想概率模型
显存或序列长度过大时,实际推理常用 KV Cache 缓存历史键值,但即便如此,最后 token 的概率仍然是在整条前缀上计算,只是使用缓存避免重复编码。不过若上下文超长,注意力漂移会影响对中间信息的利用,导致“最后位置”不一定能有效聚合早期内容,但这属于能力边界而非机制改变。
生成阶段常引入重复惩罚:对已出现 token 的 logits 做惩罚(例如将相同 token 的分数减半),这会直接改变 softmax 输入,使概率分布偏离模型原本的预测。此外,top-p、top-k 采样会截断概率空间后再重新归一化,同样改动分布。因此严格说,API 返回的概率可能已被后处理,并非原始模型的概率。理解这一点可避免将采样参数误解为模型自身的不确定性。
容易答错的地方
- 认为模型直接给出所有 token 的联合概率
- 实际上模型只计算条件概率 P(next | context),不会直接给出整句生成概率。所有 token 的联合概率是逐次条件概率相乘的产物,工程上通常按对数求和避免下溢。训练时用教师强制并行计算,但推理时仍是自回归逐步来。
- 混淆 logits 本身与概率
- logits 是未归一化得分,可正可负且无上下界,不能直接当作概率值。虽然 logit 越高对应概率越高,但概率的取值受所有 logits 的相对差经 softmax 决定,因此不应将 logits 的绝对大小解释为概率。
面试官还会怎么问?
训练时的“下一个 token 预测”和推理时有什么不同?
训练阶段利用教师强制,在真实前缀上同时并行预测每个位置的下一 token,用交叉熵衡量误差。推理时模型自己生成前缀,误差会导致偏差累积,这是曝光偏差(exposure bias)的来源。
温度 t=0 是不是算概率最高的 token?
严格说 t=0 时 softmax 因除以零无效,工程上通常将 logits 乘以一个极大数,使概率分布趋近于 one-hot,效果等于贪心取 argmax。因此 t=0 可视为确定性的贪心策略。
为什么模型有时会重复生成同一个词?
当前已生成词在上下文中大量出现,可能使模型判断“接下来也出现它”概率高。重复惩罚通过降低这些 token 的 logits 来抑制,但过度惩罚可能破坏连贯性。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。