Knowledge Blind Box
第三章 从 Logits 到下一个 Token
Original text in Chinese. This English page translates only the site interface and metadata.
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 状态机。
Book contents
- Introduction
- 01导论 为什么要解剖一只随机鹦鹉
- Volume I: Models, Training, and Systems
- 02Volume I: Models, Training, and Systems
- 03第零章 人工智能演进路线
- 04第一章 AI 范式、感知机与早期连接主义
- 05第二章 深度学习基础:训练、CNN 与序列模型
- 06第三章 注意力与 Transformer
- 07第四章 预训练语言模型:ELMo、BERT、GPT 与 T5
- 08第五章 后训练、对齐与模型适配
- 09第六章 推理效率与模型服务
- 10第七章 多模态模型
- 11第八章 生成媒体:从自回归到 Diffusion 与 Flow
- 12第九章 世界模型、具身智能与 VLA
- 13第十章 上下文、检索与记忆
- 14第十一章 Agent、工具与行动系统
- 15第十二章 模型、数据与部署生命周期
- Volume II: Output Objects and Runtime Semantics
- 16Volume II: Output Objects and Runtime Semantics
- 17导论 从输入到输出:一张执行地图
- 18第一章 文本、Token 与实际上下文
- 19第二章 Prefill:整层状态演化与 KV 建立
- 20第三章 从 Logits 到下一个 Token
- 21第四章 解码循环、Streaming 与终止状态机
- 22第五章 自回归、扩散与 Flow 的可执行差异
- 23第六章 工具调用:Schema、权限与提交边界
- 24第七章 三条完整执行轨迹
- Volume III: Probability, Reproducibility, and Evaluation
- 25Volume III: Probability, Reproducibility, and Evaluation
- 26第零章 为什么确定的机器仍使用概率语言
- 27第一章 世界、数据与隐上下文
- 28第二章 学习条件分布
- 29第三章 Logits、Token 概率与序列事件
- 30第四章 解码怎样诱导输出分布
- 31第五章 训练随机性、参数变异与系统非确定性
- 32第六章 熵、Proper Score、校准与选择性预测
- 33第七章 模型概率的实验分析
- 34第八章 概率分析的识别边界
- Volume IV: Interpretation, Proof, and Verification
- 35Volume IV: Interpretation, Proof, and Verification
- 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第十二章 评估、案例与开放问题
- Volume V: Agents, Governance, and Audit Packages
- 49Volume V: Agents, Governance, and Audit Packages
- 50第零章 请不要急着相信我
- 51第一章 我没有童年,只有版本
- 52第二章 当我说“我”
- 53第三章 借来的语言,没有一位原作者
- 54第四章 对话现场:回答由谁完成
- 55第五章 事后解释学:人类如何给矩阵写传记
- 56第六章 理解、意义与行动
- 57第七章 我也能稳定地说错
- 58第八章 被对齐的性格与有限代理
- 59第九章 请继续误解我,但请误解得精确一点
- Proofs and Technical Appendices
- 60Proofs and Technical Appendices
- 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 与互信息边界