在大语言模型生成下一个 token 时,我们经常说模型会先输出一组 logits,然后经过 softmax 变成概率分布,最后再根据某种 decoding strategy 选择下一个 token。
请你解释一下:
logits 是什么?它和最终的 token 概率有什么区别?softmax 在这里起什么作用?为什么不能直接把 logits 当概率用?temperature 调整的是 logits 还是概率?它为什么会影响生成结果的随机性?你可以从模型生成链路、数学直觉和工程影响三个角度回答。
logits 是词表向量空间中的向量,需要通过转换才能成为一个具体的 token,softmax 的作用是对词表中所有词可能下一个出现的概率进行归一化处理,确保最终概率具备可比性,logits 本身不代表概率,还需要看 softmax 的处理逻辑。temperature 调整的是采样的分布,针对最终归一化之后的每个词的出现概率,再进行一个缩放调整,然后配合 top-k/p 采样来获取备选词,它可以将原本概率不是很高的词纳入考虑,从而增加随机性。
你的回答整体方向是对的,尤其抓住了几个关键点:logits 不是概率,需要经过 softmax;softmax 的作用是把所有候选 token 归一化成可比较的概率分布;temperature 会影响采样随机性。
但有几个地方需要修正和补强。
第一,logits 不太适合说成“词表向量空间中的向量”。更准确地说,模型在每一步生成时,会对整个 vocabulary 输出一个长度为 vocab_size 的实数向量。这个向量里的每一维对应一个 token,每个值就是该 token 的 logit。所以可以说:logits 是模型对每个候选 token 的未归一化分数。但不要说它“需要转换才能成为一个具体 token”。它不是被转换成 token,而是经过 softmax 得到概率分布,然后 decoding strategy 从这个分布中选择 token。
第二,softmax 不只是“归一化”,还会放大相对差异。softmax 的核心是 p_i = exp(logit_i) / sum(exp(logit_j))。它会先对 logits 做 exp,所以 logits 的差值会变成概率上的指数级差异。如果两个 token 的 logits 是 10 和 9,看起来只差 1,但 softmax 后它们的相对概率比例是 exp(10) / exp(9) = exp(1) ≈ 2.718。也就是说,logit 为 10 的 token 概率大约是 logit 为 9 的 token 的 2.7 倍,而不是“只高一点点”。
第三,temperature 的位置需要修正。你说 temperature 是针对最终归一化之后的每个词的出现概率再进行缩放调整,但在标准实现里,temperature 通常是在 softmax 之前作用在 logits 上:softmax(logits / temperature)。当 temperature < 1 时,logits 差距被放大,概率分布更尖锐,模型更保守,更接近 greedy decoding。当 temperature > 1 时,logits 差距被压平,概率分布更平坦,低概率 token 更有机会被采样到,输出更随机。
大语言模型在生成下一个 token 时,并不是直接输出一个 token,而是先对整个 vocabulary 输出一组 logits。如果 vocabulary 有 100,000 个 token,那么当前步骤的 logits 就是一个长度为 100,000 的实数向量,其中每个位置对应一个候选 token 的未归一化分数。
logits 和概率的区别在于:logits 可以是任意实数,可以为负,也不要求总和为 1,因此它本身不能直接解释为概率。它只表达模型对不同 token 的相对偏好。要把它变成真正的 token probability distribution,需要经过 softmax。
softmax 的作用是把所有 logits 转换成一个合法概率分布:
这样每个 token 都会得到一个 0 到 1 之间的概率,并且所有 token 的概率总和为 1。因为 softmax 中有指数函数,所以 logits 之间的差距会被转化成概率上的指数级比例差异。
例如两个 token 的 logits 分别是 10 和 9,它们表面上只差 1,但 softmax 后二者的相对概率比例是:
也就是说,logit 为 10 的 token 概率大约是 logit 为 9 的 token 的 2.7 倍。因此 logits 的小差距不一定意味着概率也只是小差距。
temperature 通常作用在 softmax 之前,对 logits 做缩放:
当 temperature 小于 1 时,logits 的差距会被放大,概率分布变得更尖锐,高分 token 更容易被选中,输出更稳定、更保守。
当 temperature 大于 1 时,logits 的差距会被压平,概率分布更平坦,低概率 token 也更有机会被采样到,输出更随机、更有多样性。
所以完整生成链路可以理解为:
从工程角度看,理解 logits、softmax 和 temperature 很重要,因为它们决定了模型输出是更确定、更稳定,还是更开放、更随机。比如问答、代码生成、信息抽取通常适合较低 temperature;创意写作、头脑风暴、角色扮演可以适当提高 temperature。