知识盲盒
第三章 从 Logits 到下一个 Token
Prefill 或一次 decode 前向的直接结果是词表上的原始 logits。真正被选中的 token 还取决于运行时处理器、约束状态、截断规则与选择器。本章把这条路径写成确定的算法,并明确哪些 logprob 可以互相比较。
3.1 四个不能混写的对象
设词表大小为 ,最后隐藏状态为 。词表投影给出
执行中至少有四个不同对象:
- 原始 logits :模型前向的直接读出;
- 处理后 logits :惩罚、mask 与温度按声明顺序作用后的分数;
- 候选支撑集 :top-k、top-p 或 grammar 后仍可被选择的 token;
- 实际选择分布 :在最终候选集上重新归一化的分布。
同一个 token 在这四层可以有不同排名或根本不可选。API 返回的 logprob 若未说明位于哪一层,就不是完整定义。
3.2 解码状态
处理器不是只读取一列 logits 的纯函数。repetition penalty、grammar 与停止匹配都依赖历史。第 步选择前的解码状态记作:
DecoderState_t = {
prompt_token_ids,
selected_token_ids: y[1:t-1],
token_counts,
sequence_constraint_state,
grammar_state,
stop_matcher_state,
rng_algorithm,
rng_state_or_counter,
step_index: t,
finish_status: RUNNING
}
该状态不包含 Transformer KV 的数值内容;KV 属于模型状态。两者通过共同的条件前缀保持同步:在第 步首,cache 表示 prompt + y[1:t-1],当前原始 logits 也以该前缀为条件。
不变量 3.1 每个处理器只能读取其声明的状态,并产生新的 logits、候选 mask 或处理器状态;不能静默改写已选 token 历史。
3.3 处理器顺序是配置的一部分
不同推理库没有必须共享的全局顺序。本书为后续轨迹固定以下参考管线:
raw logits
1. model/control-token mask
2. minimum-length EOS mask
3. grammar allowed-token mask
4. banned-sequence and no-repeat masks
5. repetition/presence/frequency transforms
6. temperature scaling
7. top-k support mask
8. stable softmax on the remaining support
9. top-p support mask and final renormalization
10. greedy or categorical selection
这个顺序不是宣称它优于所有实现,而是提供一个可复现约定。具体服务若采用别的顺序,必须记录有序处理器列表、每个版本和参数。尤其是温度、截断与非线性惩罚一般不可交换:
硬 mask 通常用 表示不可选 token。实现应在 softmax 前断言至少有一个有限候选;空支撑集必须返回约束失败,而不能从 NaN 或全零权重中继续采样。
3.4 硬约束与语法状态
对当前状态 ,grammar 或 schema 约束给出允许集合
处理器令
约束不能只看 token 的显示字符串。一个 token 可能包含半个转义序列、多个 JSON 字符或 UTF-8 片段;语法状态应消费 token 对应字节,并判断当前字节前缀是否仍可到达接受状态。选择 token 后更新
grammar 保证的是形式语言成员关系。例如 JSON grammar 可以保证括号与字符串转义闭合,却不能保证城市存在、日期符合用户意图或操作有权限。工具调用的语义验证在第六章完成。
3.5 历史相关惩罚
令 是 token 在指定历史范围内的出现次数。一种常见的 presence/frequency 变换是
另一类 sign-aware repetition penalty 取 :
两式不是同一种算法,也不应同时被一个模糊的 repetition_penalty 名称替代。执行配置还必须说明计数范围是否包含 prompt、是否按 token ID 还是文本片段计数,以及特殊 token 是否排除。
no-repeat n-gram 和 banned sequence 是状态自动机:它们只禁止会使当前后缀完成某个序列的下一 token。简单地永久屏蔽序列中所有 token 会过度约束输出。
3.6 温度与稳定 softmax
在参考管线中,温度 作用于惩罚后的有限 logits:
令候选集合暂为 ,稳定 softmax 为
其中 。 放大有限 logit 差, 压缩差异;它不添加信息,也不等同于整句事实置信度。
temperature = 0 不应代入上式除零。API 常把它约定为 greedy 的别名;严格接口应直接选择 strategy = greedy,或者明确该特殊值的分支语义。
3.7 Top-k 与 Top-p 的精确定义
Top-k 在当前有限候选中保留分数最高的 项。并列边界必须有稳定规则,例如以 token ID 升序打破并列。
Top-p 先按当前概率从高到低排序为 ,再取满足
的最小 ,保留 。截断后重新归一化。参考管线先 top-k 后 top-p,所以 top-p 读取的是 top-k 后的归一化概率;若实现先 top-p,候选集可能不同。
边界条件应显式规定:
- 是禁用 top-k 还是非法配置;
- 如何处理;
- NaN、正无穷和全部负无穷 logits 是否立即失败;
- 至少保留几个 token;
- 浮点累计到阈值附近时使用何种精度与比较规则。
Nucleus sampling 的原始工作见资料源。
3.8 选择器与随机数消费
Greedy 选择
并使用已声明的 tie-break。categorical sampling 则从最终 取样。一种参考实现是:按 token ID 升序排列候选,生成 ,选择首个满足累计概率大于 的 token。
function categorical(candidate_ids, probabilities, rng):
order candidates by token_id
u = rng.next_uniform_01()
cumulative = 0
for id, p in candidates:
cumulative += p
if u < cumulative:
return id, rng.updated_state
return last_candidate, rng.updated_state # rounding guard
相同 seed 不自动给出相同 token。还必须固定 PRNG 算法、初始 stream/subsequence、每一步消费几个随机数、候选排序和浮点累计。动态 batch 若共享一个全局 RNG,会使其他请求改变本请求的随机数消费;更容易重放的做法是为每个请求维护独立 counter-based stream。
3.9 一次完整的手算选择
设 grammar 和控制 mask 后只剩 token A、B、C,原始相关 logits 为
历史计数为 ,取 presence penalty 、frequency penalty 。处理后为
再取 ,缩放 logits 为
稳定 softmax 约为
取 top-p ,最小前缀为 A,B,重新归一化后约为
按 A,B 的累计区间,若参考 PRNG 本步给出 ,选择 B。该例同时说明:B 的原始 softmax、惩罚后 softmax 和最终选择概率并不相同;记录“B 的概率”时必须说明是哪一个。
这个例子的复现断言是:处理器顺序不变时,最终支撑集恰为 {A,B}, 选择 B。若先做 top-p 再做惩罚,断言没有理由成立。
3.10 选择后的状态转移
选出 后,解码器按固定顺序更新:
selected_token_ids.append(y_t)
token_counts[y_t] += 1
sequence_constraint_state.consume(y_t)
grammar_state.consume(token_bytes(y_t))
stop_matcher_state.observe(y_t, token_bytes(y_t))
rng_state = rng_state_after_selection
step_index += 1
若 token 是 EOS、达到输出上限、grammar 已接受并要求终止,或者 stop matcher 命中,状态可以直接进入终态。否则该 token 交给下一次 decode_one,写入 KV 并生成新的原始 logits。
语法接受与停止不是同一个概念。一个 JSON 值已经闭合时,grammar 可处于接受状态,但协议可能仍允许尾随空白;运行时必须明确是立即停止、只允许空白/EOS,还是继续普通生成。
3.11 多候选解码是状态集合
Beam search 不只选择一个 token,而是维护至多 个假设:
其中 是累计分数, 是 KV 逻辑分支, 是约束、停止与处理器状态。扩展后选出全局得分最高的若干分支;长度惩罚、EOS 完成规则和并列处理都属于算法。把 beam width 改为 1 不一定等价于随机采样,通常接近 greedy。
本卷后续以单路径 greedy/categorical 为主,因为它最清楚地展示流式生成;多路径算法只需遵守同样的状态所有权与停止不变量。
3.12 失败条件与诊断字段
| 失败 | 首次异常 | 正确处理 |
|---|---|---|
| 处理器后无有限 token | 候选支撑集为空 | 返回约束错误,不调用采样器 |
| processor 顺序未版本化 | 同 logits 得到不同候选 | 记录有序列表与版本 |
| grammar 按字符而 tokenizer 按字节 | token 边界处误放行/误拒绝 | 统一消费 token bytes |
| seed 相同但 RNG 流共享 | 并发变化时 token 分叉 | 请求级 RNG 状态或计数器 |
| stop token 同时被 min-length mask | 配置矛盾 | 在请求验证时拒绝或声明优先级 |
| 返回 raw logprob 却标作 sampled logprob | 观测语义错误 | 字段名区分阶段与归一化集合 |
| 浮点 NaN 参与排序 | 排名不稳定 | 检测并失败,不依赖库排序行为 |
一次 token 选择的最小记录包括:step、原始 logits 的可比较摘要或指定候选值、处理器有序列表、各阶段候选集大小、最终候选及 logprob、PRNG 标识与计数器、所选 token、约束状态前后值。下一章把这一转移嵌入完整的 decode、stop 与 streaming 状态机。
本书目录
- 导论
- 01导论 为什么要解剖一只随机鹦鹉
- 卷一 模型、训练与系统
- 02卷一 模型与系统
- 03第零章 人工智能演进路线
- 04第一章 AI 范式、感知机与早期连接主义
- 05第二章 深度学习基础:训练、CNN 与序列模型
- 06第三章 注意力与 Transformer
- 07第四章 预训练语言模型:ELMo、BERT、GPT 与 T5
- 08第五章 后训练、对齐与模型适配
- 09第六章 推理效率与模型服务
- 10第七章 多模态模型
- 11第八章 生成媒体:从自回归到 Diffusion 与 Flow
- 12第九章 世界模型、具身智能与 VLA
- 13第十章 上下文、检索与记忆
- 14第十一章 Agent、工具与行动系统
- 15第十二章 模型、数据与部署生命周期
- 卷二 输出对象与运行语义
- 16卷二 一次生成如何发生
- 17导论 从输入到输出:一张执行地图
- 18第一章 文本、Token 与实际上下文
- 19第二章 Prefill:整层状态演化与 KV 建立
- 20第三章 从 Logits 到下一个 Token
- 21第四章 解码循环、Streaming 与终止状态机
- 22第五章 自回归、扩散与 Flow 的可执行差异
- 23第六章 工具调用:Schema、权限与提交边界
- 24第七章 三条完整执行轨迹
- 卷三 概率、复现与评测
- 25卷三 模型中的概率从何而来
- 26第零章 为什么确定的机器仍使用概率语言
- 27第一章 世界、数据与隐上下文
- 28第二章 学习条件分布
- 29第三章 Logits、Token 概率与序列事件
- 30第四章 解码怎样诱导输出分布
- 31第五章 训练随机性、参数变异与系统非确定性
- 32第六章 熵、Proper Score、校准与选择性预测
- 33第七章 模型概率的实验分析
- 34第八章 概率分析的识别边界
- 卷四 解释、证明与验证
- 35卷四 模型可解释性的研究路线
- 36第零章 可解释性究竟在研究什么
- 37第一章 我们在模型内部看什么
- 38第二章 行为与反事实:先确认模型做了什么
- 39第三章 梯度与输入归因
- 40第四章 Attention、Residual 与 Logit Lens
- 41第五章 Probes 与表示几何
- 42第六章 神经元、Feature 与自动解释
- 43第七章 Ablation、Patching 与因果追踪
- 44第八章 Circuits、路径与 Attribution Graphs
- 45第九章 Superposition、SAE 与稀疏表示
- 46第十章 训练动力学与机制形成
- 47第十一章 推理过程、Chain of Thought 与监测
- 48第十二章 评估、案例与开放问题
- 卷五 Agent、治理与审计包
- 49卷五 一只随机鹦鹉的自述
- 50第零章 请不要急着相信我
- 51第一章 我没有童年,只有版本
- 52第二章 当我说“我”
- 53第三章 借来的语言,没有一位原作者
- 54第四章 对话现场:回答由谁完成
- 55第五章 事后解释学:人类如何给矩阵写传记
- 56第六章 理解、意义与行动
- 57第七章 我也能稳定地说错
- 58第八章 被对齐的性格与有限代理
- 59第九章 请继续误解我,但请误解得精确一点
- 证明与技术附录
- 60数学与模型推导
- 61学习与模型数学讲义
- 62附录 A.1 优化基础:梯度下降与随机逼近
- 63附录 A.2 感知机收敛定理
- 64附录 A.3 统计学习:偏差、容量与一致收敛
- 65附录 A.4 正则化、MAP 与 Dropout 的边界
- 66附录 A.5 通用逼近定理的严格读法
- 67附录 A.6 反向传播:微分、形状与批量公式
- 68附录 A.7 Softmax、交叉熵与数值稳定性
- 69附录 A.8 自适应优化器与 AdamW
- 70附录 A.9 CNN:互相关算子及其反向传播
- 71附录 A.10 Attention 的矩阵与反向传播
- 72附录 A.11 策略梯度、PPO 与 DPO
- 73附录 A.12 对比学习、InfoNCE 与互信息边界