大模型「按概率输出」到底是怎么回事?
从"今天天气真___"到一个完整的回答——把"按概率输出"拆开讲透:模型到底在算什么、怎么算、又怎么把概率变成你看到的字。
概率输出
自回归生成
Softmax
解码策略
温度采样
一、一句话结论:先纠正直觉
「大模型按概率输出」的准确意思是:
模型不会"想好一句话再写出来",而是每次只干一件事——给定已经写出来的所有字,算出"下一个字应该是哪个"的概率分布,然后按某种策略从分布里挑一个字,接在后面,再重复这个过程。
所以:
- "概率" = 下一个词的可能性大小(不是"随机瞎说")。
- "输出" = 一次次"算分布 → 选一个字"的循环,直到生成结束符。
- 整个过程本质是数学上的条件概率:
P(下一个词 | 前面所有词)。
一个生活类比:手机输入法的"联想词"。
你打"今天天气真",输入法会在候选栏列出"好 / 棒 / 差 / 热…"。它背后就是一个小概率模型——它并没"理解"你的心情,只是根据海量聊天记录,统计出"真"后面最常接"好"。大模型干的也是同一件事,只是规模大了十万倍、准了十万倍,并且能"续写"而不是只补一个词。
二、先搞懂:模型操作的是「token」,不是字
在你看到的"文字"和模型算的"概率"之间,隔着一道"分词(Tokenization)"。模型既不读汉字也不读字母,它读的是 token(词元)——一串数字编号。
关键认知:模型算的"下一个词的概率",其实是P(下一个 token | 前面的 token 序列)。概率分布的"候选名单",就是整个词表——一个可能有 5 万到 20 万个 token 的巨大清单。每次生成,都要对这十几万个候选各算一个数。
三、完整流程:一图看全「从一句话到一个概率分布」
把"今天天气真"变成"好"这一个字,中间要经过下面这条流水线。注意最后一步才得到"概率",而"选字"是另一步(下一节讲)。
记住这个循环:第 ⑨ 步把选出来的字又塞回第 ① 步,模型对"更长的上文"再算一次分布、再选一个字……如此反复,直到吐出"结束符"。这就是"自回归(Auto-Regressive)"——自己之前生成的字,是下一步生成的输入。所以大模型"写文章"和"接龙"是同一回事。
四、核心:每一步都在算「下一个词的概率分布」
第 ⑥ 步的"Logits"是一个长度等于词表大小的数组(比如 15 万个数),每个数表示"对应 token 有多匹配"。第 ⑦ 步用 Softmax 把这个数组压成"加起来等于 100% 的概率分布"。
P(tokenᵢ) = exp(zᵢ) / Σⱼ exp(zⱼ) // zᵢ 是第 i 个 token 的 logit;Softmax 把任意实数变成 0~1 且总和为 1 的概率
词表极大,所以绝大多数 token 的概率都接近 0,只有少数几个"像样"。下面画的是"今天天气真"之后,词表里的真实形状——一条长尾,极少数候选吃掉了几乎全部概率。
读到这里你其实已经懂了 80%:"按概率输出"= 每写一个字,都对全词表算一遍概率、挑一个。模型"说的话"完全由这条分布 + 挑选规则决定。下面两个交互,让你亲手感受分布和高低温度的区别。
五、交互①:温度如何重塑概率分布
同一个上文,模型算出的 logits 是固定的。但我们可以先用一个叫 温度(Temperature) 的数"加工"一下,再算 Softmax——这直接决定了生成是"死板"还是"发散"。
P(tokenᵢ) = exp(zᵢ / T) / Σⱼ exp(zⱼ / T)
// T 越小→分布越尖(几乎只选最大的);T 越大→分布越平(大家都有机会)
温度 T:
T = 1.0
本次选中:—
采样历史(点"按概率采样"会看到:同样的分布,每次结果可能不同):
看懂了什么?
- 把 T 拖到 0.2:分布被"压尖",最高那个词几乎独占 90%+,每次都选它 → 输出稳定、重复、保守。
- 把 T 拖到 2.0:分布被"摊平","好/棒/热"差距缩小 → 选哪个都更随机 → 输出发散、有创意、但可能跑题。
- "贪心"永远选最高,是确定性的;"采样"按概率抽签,是随机性的。这就是为什么同一句话你问两遍,温度>0 时答案会不一样。
六、怎么从分布里"挑"出那个词:解码策略
第 ⑧ 步的"选词"有多种玩法(统称解码 / Decoding)。它们都不改变分布本身,只改变"怎么从分布里取一个":
| 策略 | 做法 | 特点 | 适用 |
| 贪心 Greedy | 永远选概率最高的那个 | 确定、单调,易重复啰嗦 | 需要稳定的场景 |
| 温度采样 | 用温度缩放后按概率抽 | 可调创意度,最常见 | 聊天/写作 |
| Top-K | 只在概率最高的 K 个里抽 | 砍掉离谱长尾,避免胡说 | 通用 |
| Top-P(核采样) | 只在区间内累计概率≥P 的最小候选集里抽 | 自适应候选数,比 Top-K 更稳 | 当前主流 |
| Beam Search | 同时保留几条候选路径,选整体概率最高 | 偏"标准答案",翻译/摘要常用 | 翻译、摘要 |
一句话区分:概率分布是"算"出来的(由模型参数和上文唯一决定);选哪个词是"策略"决定的(由你设的温度/Top-K/Top-P 决定)。模型永远在输出概率,只是"取数方式"不同——这正是"按概率输出"这句话的精确含义。
七、交互②:自回归是怎么一步步"吐字"的
点"下一步",看模型如何把"概率 → 选词 → 拼回输入"循环起来,一点点把句子接出来。每步下方都列出当时的候选分布(取自该步的上文)。
█
第 0 / 6 步
本步从分布中选中:—
这就是"生成"的真相:没有"先想好整句再写",只有"每走一步,看眼前,猜下一个"。翻译、写代码、写诗,全都是这个接龙循环——区别只在模型见过的语料让它"猜"得更准。
八、三个常见误解(看你是否真懂了)
✗"模型是按概率随机乱说。" —— 错。分布是从海量数据里学出来的规律,通常高度集中在合理的词上(看图四那条长尾:绝大多数概率都给了"好/棒/热")。"随机"只出现在采样这一步,且温度越高越随机。
✗"模型像人一样'理解'了再回答。" —— 目前更准确的描述是:它在做极复杂的"下一个词预测"。它不"懂"语义,但预测准到表现出"懂"的样子(学界对此仍有争论,但不影响"它按概率输出"这一事实)。
✗"同一句话每次答案应该一样。" —— 只有在温度=0 且贪心时才(近似)确定。只要开启采样,同样的输入也会因"按概率抽签"而给出不同结果——这恰恰是"概率输出"的直接证据。
✓正确理解:大模型 = 一个被训练得极好的"下一个词概率函数" f(上文) → 分布,再用解码策略从分布里取字,循环接龙。
九、为什么"概率"能 work?——它是训练目标的必然结果
你可能会问:凭什么"下一个词的概率最高"就等于"人想看到的答案"?答案是模型就是这么被训练出来的:
- 训练目标:给定一段文本,让模型预测"下一个 token"。用交叉熵损失衡量"模型给正确答案的概率"有多低,再用梯度下降调参数,使正确答案的概率越来越高。
- 结果:训练充分后,
P(合理续写) 天然就高,P(胡说) 天然就低。所以"采样时抽到好答案"不是巧合,是目标函数塑造的。
- 推论:推理时"按概率输出",正是训练时"学的是概率"的直接延续——训练与推理用的是同一套"概率语言"。
十、总结:一张图串起全过程 + 口诀
记忆口诀:
分 token → 过网络 → 算分布 → 按策略取 → 拼回去 → 再来一遍。
模型从不"决定"说什么,它只"打分":给全词表里每个候选的下一个词打分(概率),再让你选的"解码策略"从中挑一个。所谓"按概率输出",就是这句话。