Skip to content

第 14 章:每生成一个 Token 后,接下来发生什么 ​

返回目录

现在参数怎样训练已经解释完,再回到使用模型。这里只发生新的前向计算与选择,通常不针对这次对话更新参数。

14.1 选出一个Token后,把它放回前缀 ​

比如模型预测出了一个新的 Token t_4。

那么输入序列就由:

(t_1,t_2,t_3)

变成:

(t_1,t_2,t_3,t_4)

模型再计算第四个位置的最终隐藏向量 h_4,预测第五个 Token。

实际推理通常使用 KV Cache(键值缓存),保存前面 Token 在各层已经算出的 K、V,避免每次生成新 Token 时都重复计算整个前缀。

14.2 为什么使用最后一行 ​

每一行 h_i 受训练目标约束,用于预测当前位置之后的 Token。前面各行预测的是已经出现在输入里的后续位置;最后一行对应尚未知的下一位置。因此标准续写取最后一行词表分布。

它能依赖整个允许前缀,不意味着它无损保存了全部原文,也不是把句子压缩成一个独立、永久不变的句子向量。下次生成时,新位置仍可读取历史各层 K/V。

14.3 概率怎样变成选择 ​

贪心解码: 取概率最大编号。它最大化当前一步的概率,不保证整个输出序列的联合概率最大。

采样: 按概率随机选。即使概率较小也可能被选中。Softmax 本身只给分布,不执行抽样。

温度: 对 T>0 使用 \operatorname{softmax}(\ell/T)。较小 T 通常使分布更尖锐,较大 T 更平缓;T=0 不直接代入除法,而可讨论趋零极限。Top-k 或 top-p 还会截断候选并重新归一化。这些是解码规则,不是本次把模型训练了一遍。

14.4 KV Cache为什么能复用旧结果 ​

在因果网络中,追加新 Token 不改变旧位置允许看到的前缀。参数固定、位置定义与计算配置不变时,旧位置各层 K/V 无需重新计算。保存它们,就能让新位置的 Q 读取旧 K/V 加上新位置自己的 K/V。

这依赖第8章的因果归纳性质。缓存要逐层保存,不是只保存最终向量。旧位置的中间表示在多层网络中早已参与构造后续所需的 K/V,并没有“只用最后一行所以前面都没用”。

窗口截断、位置重映射、参数改变等会影响缓存可复用条件。缓存通常以额外内存换取减少重复计算,也不消除新 Token 读取历史内容的代价。

14.5 怎样停止并变回文字 ​

可因选中 EOS、达到长度上限或触发应用停止规则而结束。句号不自动等于结束。输出 Token 序列还要由 tokenizer 的解码规则变回可见文本,Token 与完整汉字、完整词语并非一一对应。

普通生成过程保持参数不变;上下文和缓存改变。把用户信息写进本次上下文,可以改变后续输出,并不等于本次进行了梯度训练。

14.6 训练、上下文适应与应用记忆 ​

参数训练:损失反传后更新参数。上下文适应:参数固定,用本次上下文改变激活与预测。工程记忆:应用存储信息并在未来检索或插入上下文。三者可配合,但不能互相替代为同一个概念。

保留每一次追问,认真走完每一步证明。