L大语言模型从理论到实践
阅读 PDF ↗
CHAPTER 08

自回归语言建模

一个语言模型需要同时回答两个不同问题:如何为序列分配概率,以及如何根据这些概率产生实际输出。前者由模型的条件分布与训练目标定义,后者由解码策略与终止规则定义。相同权重可以在贪心选择、随机采样和束搜索下产生不同文本;较低的预测损失也不保证自由生成时没有重复、遗漏或事实错误。

本章在第6章《Transformer 网络结构》基础上建立完整的自回归生成过程。从概率链式分解出发,依次说明因果网络如何产生下一词元分布、教师强制为何允许并行训练、模型输出如何被解码器变换与选择,以及 EOS 和长度预算如何界定最终交付。缓存只作为保持条件分布不变的状态复用机制出现,具体优化留待推理篇。

8.1用条件分布定义序列

自回归分解的结构边界

设词表为有限集合 \(\mathcal V\),词表大小为 \(V_{\mathrm{vocab}}\)。对长度为 \(T\) 的词元序列 \(x_{1:T}\),概率链式法则给出

\[ p_\theta(x_{1:T})=\prod_{t=1}^{T}p_\theta(x_t\mid x_{<t}),\qquad \log p_\theta(x_{1:T})=\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t}). \tag{8.1}\]

自回归(Autoregression)表示后续变量的分布以已经给定的变量为条件。链式分解本身不要求使用神经网络;限定上下文长度、共享各位置参数、采用因果 Transformer 才是具体建模选择。

对于给定提示或源输入 \(c\) 的条件生成,同样有

\[ p_\theta(y_{1:T}\mid c)=\prod_{t=1}^{T}p_\theta(y_t\mid c,y_{<t}). \tag{8.2}\]

条件 \(c\) 可以是同一序列中的提示前缀,也可以通过编码器及交叉注意力提供。两种方式都能实现条件生成,不能把条件概率分解等同于某一种网络模块。

有限上下文模型实际计算的可能是 \(p_\theta(x_t\mid x_{\max(1,t-C):t-1})\),其中 \(C\) 是可读取的上下文长度。它对完整历史施加了信息限制,仍可逐步构成一致的序列分布,但不再保证利用更早内容。裁掉前缀或改变位置编号会改变模型的条件,而不是仅改变内存占用。

符号 含义与约束
\(x_t,y_t,c\) 观测词元、生成词元与外部条件;词元取值属于 \(\mathcal V\)
\(B,T,C\) 批量大小、序列位置数、上下文容量;不使用 \(T\) 表示温度。
\(d,V_{\mathrm{vocab}}\) 隐藏宽度与词表大小。
\(z_t,p_t,q_t\) 当前词表分数、原始模型分布、经过解码变换的实际分布。
\(\tau,k,\rho\) 正温度、Top-\(k\) 个数、Top-\(p\) 累积阈值;\(\tau>0\)\(1\leq k\leq V_{\mathrm{vocab}}\)\(0<\rho\leq1\)
\(K,L_{\max}\) 束宽与最多新增词元数,均为正整数。

可变长度序列及结束事件

仅对固定长度写式(8.1),尚未说明文本在哪里结束。引入序列结束符(End of Sequence,EOS),将一条完整响应定义为非结束词元 \(y_{1:T}\) 后跟 EOS:

\[ p_\theta(y_{1:T},\mathrm{EOS}\mid c) =\left[\prod_{t=1}^{T}p_\theta(y_t\mid c,y_{<t})\right] p_\theta(\mathrm{EOS}\mid c,y_{1:T}). \tag{8.3}\]

结束概率也是序列概率的一部分。比较两个完整候选时,漏掉 EOS 会改变排名。初始条件可以由提示前缀给出,也可以借助序列开始符(Beginning of Sequence,BOS)建立;并非所有模型都使用单独的 BOS 词元。

各步分布归一化并不自动保证生成以概率一在有限时间结束。例如某类前缀之后 EOS 概率恒为零,就可能产生永不终止的路径。如果每个未结束前缀上的 EOS 概率都有统一下界 \(\epsilon>0\),那么

\[ \Pr(\text{前 }t\text{ 步仍未结束})\leq(1-\epsilon)^t\longrightarrow0, \tag{8.4}\]

这是确保几乎必然终止的一种充分条件,真实模型与截断解码不一定满足。实际系统因此仍需要明确的有限生成预算。

8.2下一词元分布

GPT 数据流

生成式预训练 Transformer(Generative Pre-trained Transformer,GPT)以仅解码器的因果网络为常见结构。输入编号先经嵌入与位置处理变成隐藏向量,再通过多层因果注意力、逐位置前馈变换、残差及归一化,最后映射为词表上的实数分数。具体模型的归一化、位置方案与前馈形式属于结构配置,不能由 GPT 缩写推断所有细节。

取输入前缀 \(x_{1:t}\),末位隐藏行向量为 \(h_t\in\Real^{1\times d}\)。词表输出头计算

\[ z_t=h_tW_{\mathrm{lm}}+b,\qquad p_\theta(x_{t+1}=v\mid x_{\leq t}) =\frac{\exp z_{t,v}}{\sum_{u\in\mathcal V}\exp z_{t,u}}, \tag{8.5}\]

其中 \(W_{\mathrm{lm}}\in\Real^{d\times V_{\mathrm{vocab}}}\)\(b\in\Real^{V_{\mathrm{vocab}}}\) 可按结构省略。\(z_t\)未归一化分数(Logits),并非概率;Softmax 之后才得到条件分布。若输入嵌入表为 \(E\in\Real^{V_{\mathrm{vocab}}\times d}\),权重共享可设置 \(W_{\mathrm{lm}}=E^\mathsf T\),但这是显式参数约束,不是维度相容的必然结果。

相同因果网络的两种使用方式。训练利用所有有效位置的已知目标,生成读取当前前缀末位的分布。
图 8.1 相同因果网络的两种使用方式。训练利用所有有效位置的已知目标,生成读取当前前缀末位的分布。

因果性及前缀一致性

第8章《注意力机制》定义的因果注意力通过因果掩码使位置 \(t\) 只能读取不晚于 \(t\) 的信息。如果每层其他操作均逐位置执行,则完整序列前向在位置 \(t\) 得到的条件分数,与只输入前缀 \(x_{1:t}\) 时末位的分数在数学上相同。

这个结论需要相同的参数、位置编号、有效性掩码和运行模式。随机失活开启时,两次调用可能使用不同随机掩码;浮点内核也可能因张量形状不同产生舍入差异。上述因素不应与理论上的未来信息泄漏混为一谈。因果掩码不会自动修正标签对齐错误,下面需要另外定义预测对象。

8.3教师强制及移位监督

输入目标错位

教师强制(Teacher Forcing)在训练时始终给定数据中的真实前缀,再预测其后一个真实词元。设原序列为 \((\mathrm{BOS},\text{我},\text{学习},\text{模型},\mathrm{EOS})\),一个明确的训练对为

\[ \begin{aligned} \text{输入}&=(\mathrm{BOS},\text{我},\text{学习},\text{模型}),\\ \text{目标}&=(\text{我},\text{学习},\text{模型},\mathrm{EOS}). \end{aligned} \tag{8.6}\]

每个输入位置可以读取自身及过去输入,但其目标是下一位置的词元。为避免“左移”“右移”因参照物不同引起歧义,应直接说明索引关系:若输入位置 \(t\) 存放 \(x_t\),则该位置分数监督 \(x_{t+1}\)。构造解码器输入时也可以说“在目标前面放入 BOS,再移除最后一个词元”,二者是同一个对齐关系。

监督索引与因果前缀。竖直箭头给出各位置的预测对象;横向虚线表示前缀依赖,实际注意力仍读取全部允许历史。
图 8.2 监督索引与因果前缀。竖直箭头给出各位置的预测对象;横向虚线表示前缀依赖,实际注意力仍读取全部允许历史。

移位可以由数据整理器完成,也可以由模型损失内部完成。前一种接口接收已经对齐的输入和目标;后一种接口可能接收相同的完整词元数组,再在内部使用前 \(T-1\) 个分数与后 \(T-1\) 个目标。两处同时移位会变成跨两步预测,两处都不移位则可能学到复制当前位置。应以明确索引式作为协议,不依赖参数名猜测。

平均负对数似然

给定训练文档 \(x^{(b)}\),最大化其序列似然等价于最小化各条件负对数概率之和。设 \(m_{bt}\in\{0,1\}\) 标记位置 \((b,t)\) 是否提供有效监督,则

\[ \mathcal L(\theta)=-\frac1N\sum_{b,t}m_{bt} \log p_\theta(x^{(b)}_{t+1}\mid x^{(b)}_{\leq t}),\qquad N=\sum_{b,t}m_{bt}>0. \tag{8.7}\]

填充目标通常不计入 \(N\),文档末尾的 EOS 若属于训练目标则计入。指令响应训练中,提示位置可以参与条件计算而不承担损失;这相当于选择监督区域,不能通过屏蔽所有提示键来替代。

若批次含不同有效长度,应聚合负对数似然总和后除以有效目标总数。两个批次有效目标数分别为 \(10\)\(90\)、平均损失分别为 \(1\)\(3\) 时,整体平均是 \(\frac{10\cdot1+90\cdot3}{100}=2.8\),不是 \(\frac{1+3}{2}=2\)。按序列平均和按词元平均也是不同的目标权重设计。

在使用自然对数时,困惑度(Perplexity,PPL)为 \(\exp\mathcal L\)。它概括同一数据和分词规则下的条件预测损失,不是模型候选答案数量,也不能跨不同分词器直接比较。

因果训练并行性

训练样本已经给出全部真实目标,所以位置 \(1,\ldots,T\) 所需的合法前缀同时可用。因果掩码阻止未来泄漏,矩阵运算仍可在同一次网络调用中处理全部位置。各网络层之间保留先后依赖,所谓并行是位置维度的批量计算,并不是所有运算在时间上同时完成。

自由生成时,模型还不知道 \(y_t\),而计算 \(p(y_{t+1}\mid c,y_{\leq t})\) 需要先确定它。生成因此沿实际选出的前缀逐步推进。推测解码可以批量提出并验证候选,但只有保留的前缀才成为后续条件;它不废除自回归分解。

算法8.1 移位目标的教师强制损失

输入:各文档的词元序列、文档边界、填充标记和监督区域。输出:标量损失与有效目标数。状态:当前固定参数 \(\theta\);本算法只计算一次目标,不推进优化器。

  1. 在每个合法文档范围内建立输入位置 \(x_t\) 与目标 \(x_{t+1}\) 的对应关系;依据是否包含 BOS、EOS 明确首尾监督。

  2. 构造因果和填充可见性,标记有效目标 \(m_t\)。跨文档是否连接必须遵守事先定义的目标,不在批次边界临时决定。

  3. 运行因果网络,得到与输入位置对应的分数;确认移位仅在数据侧或损失侧执行一次。

  4. 累加有效位置的负对数概率和以及目标数 \(N\)\(N=0\) 时返回明确的无监督批次状态,不执行除零或伪造零梯度。

  5. 返回总和除以 \(N\)。各目标只能读取其前缀,填充位置不贡献监督,输入和目标索引保持图8.2的关系。

8.4真实前缀及生成前缀

暴露偏差的含义及限度

训练时前缀来自数据分布,生成时前缀来自模型和解码策略。有限模型在少见或偏离训练分布的前缀上可能预测较差,一步错误又会成为下一步的条件。这种训练与使用条件的差别通常称为暴露偏差(Exposure Bias),是序列训练研究的重要动机之一(Bengio 等 2015)

但是这不意味着教师强制的最大似然目标在数学上错误。对真实序列分布 \(P\) 和模型分布 \(p_\theta\),在支持集及可积性条件满足时,

\[ \mathbb E_{x\sim P}[-\log p_\theta(x)] =H(P)+D_{\mathrm{KL}}(P\|p_\theta). \tag{8.8}\]

因序列链式法则,教师强制恰好计算这一序列负对数似然。若模型准确表达了真实条件分布,其生成分布也可以一致。实际困难来自有限数据、模型失配、分布外前缀,以及最终任务指标与局部概率目标之间的差异。不能把所有生成错误都归因于暴露偏差。

人为混入模型预测前缀,会改变训练数据条件,并且仍需判断原目标是否与被修改的前缀相容。它不是不加约束的通用修复。序列级训练、偏好优化和可验证奖励从不同角度调整行为,后训练篇将讨论其目标与条件。

生成误差累积

如果在一组明确的条件下,每一步出现某类错误的条件概率不超过 \(\epsilon\),则由并集界,前 \(T\) 步至少一次错误的概率不超过 \(T\epsilon\),且上界至多取一。在独立且等概率的特殊模型中,该概率为 \(1-(1-\epsilon)^T\)。真实生成中的错误相互影响,通常不满足独立同分布假设;教师强制平均损失也不能直接推出每个生成前缀都有这样的逐步错误上界。

需要区分预测某个指定词元的概率与完成任务的正确率。某个问题可以有许多正确表述;合法同义词的概率较低不一定是任务错误,重复的高概率短句也不一定完成了任务。自由生成评价应同时关注内容、约束、终止及整体连贯性。

8.5幻觉、事实性及证据支持

事实性判定基准

幻觉(Hallucination)通常指生成结果包含相对于任务规定参照不受支持或错误的内容(Ji 等 2023)。这个词描述输出与参照之间的可检验关系,不表示模型具有人的感知、信念或欺骗意图。参照可以是指定上下文、带版本与时间的外部事实、工具实际返回值,或任务明确给出的约束;若不先说明参照,“是否幻觉”便可能没有唯一判定。

例如,某个结论可能碰巧符合外部世界,却没有得到当前证据包支持;它在答案正确性上可能通过,在证据忠实度上仍失败。反过来,模型也可能忠实复述一份已经过期的材料,因而有证据支持却不符合问题要求的当前事实。这两个维度不能合并为一个模糊的“看起来正确”。

现象 相对于已声明参照的判定
事实错误 可核实声明与目标时间、适用范围内的有效事实冲突。
上下文矛盾 回答声明与给定证据直接冲突,或忽略证据中的必要限定。
无依据生成 回答新增了可核实声明,但给定证据既不支持它,也不足以推出它。
虚构归因 回答捏造来源、引用、工具结果或把真实来源错误地说成支持某一声明。

这些类型可以重叠:虚构引用所支持的结论也可能同时是事实错误。漏答、文风不佳、格式错误和正确拒答则不自动属于幻觉;它们应按各自任务维度评价,避免一个宽泛术语吞并所有生成失败。

词元概率及事实性

模型训练直接约束的是式(8.7)中的下一词元条件概率,而不是每个自然语言声明的真值。对回答中的声明 \(A_i\)、证据集合 \(E\) 和目标时间 \(t^*\),模型给出的

\[ p_\theta(y_j\mid c,y_{<j}) \quad\text{与}\quad \Pr(A_i\text{ 在 }E,t^*\text{ 下成立}) \tag{8.9}\]

是不同对象,前者不会自动成为后者的校准估计。一个常见而流畅的错误说法可以由高概率词元组成;一个罕见但正确的名称也可能具有较低词元概率。

幻觉可能来自训练语料的遗漏、冲突或过时,有限模型与优化误差,问题歧义或证据缺失,以及生成前缀偏离后形成的误差反馈。后训练若主要奖励完整、肯定和流畅的回答,也可能使模型在证据不足时仍倾向作答。外部检索又会引入漏召回、错误排序、版本冲突和证据未被正确利用等系统原因。因此,观察到错误答案后,不能仅凭文本断定故障发生在预训练、解码器还是检索层。

降低温度会集中已有分布,但不会增加知识或执行事实核验;若最高概率路径本来就是错误的,贪心或低温只会更稳定地返回它。提高温度则可能增加输出变化和低概率错误,但同样不是幻觉的必要条件。温度、Top-\(k\) 和 Top-\(p\) 都不是“真实性旋钮”。

幻觉缓解机制

减少幻觉应把生成系统拆成可检查阶段。首先规定允许使用的知识范围、目标时间和不可回答条件;其次检索带来源、版本与权限的证据,并在生成时限制结论范围、保留声明到来源的映射;随后对关键声明执行语义支持检查、规则检查、计算或工具验证;证据不足或冲突无法解决时,输出限定回答、部分回答或拒答。RAG 可以提供新鲜证据,却不能在漏召回、错误证据或生成器忽略证据时自动消除幻觉,完整机制见第13章《检索增强生成》

评估时应同时包含可回答、不可回答和证据冲突样例,把回答拆成可核实声明,并分别标记支持、冲突与未知。答案正确率、声明级忠实度、引用精确率、正确拒答率和过度拒答率的分母不同,应分别报告;具体测量方法见第9章《模型评估》。只有平均语言模型损失或词面相似度,无法说明系统的幻觉率。

流畅生成与可靠断言是两项能力

自回归模型可以对语言形式给出连贯的条件分布,但事实判断还需要明确参照、可用证据、时间范围和验证规则。降低随机性可以减少答案波动,却不能把语言概率转换成事实保证;可靠系统必须允许在证据边界处收缩结论或拒答。

8.6采样分布变换

温度的概率形式

温度缩放(Temperature Scaling)在生成时使用 \(\tau>0\) 改变分数尺度:

\[ p^{(\tau)}_v=\frac{\exp(\frac{z_v}{\tau})}{\sum_u\exp(\frac{z_u}{\tau})} =\frac{p_v^{\frac{1}{\tau}}}{\sum_up_u^{\frac{1}{\tau}}}. \tag{8.10}\]

此处温度用于生成分布变换,不意味着经过验证集校准后获得了事实置信度。正温度不改变分数排序,但改变候选间相对概率:

\[ \frac{p^{(\tau)}_i}{p^{(\tau)}_j} =\exp\!\left(\frac{z_i-z_j}{\tau}\right). \tag{8.11}\]

\(\tau\to0^+\) 且最大分数唯一时,分布趋于该候选上的点质量;若多个有限最大值相同,则趋于这些最大值上的均匀分布。\(\tau=0\) 不能直接代入除法,若要贪心选择,应采用明确的离散分支。\(\tau\to\infty\) 时,在有限分数支持集上趋于均匀。已被硬屏蔽的候选不因此恢复。

温度及熵的关系

温度单调性的适用条件

本节固定同一个前缀、同一组有限分数和非空候选支持集,只改变正温度。求导期间不重新训练、不修改截断集合,也不切换到另一个采样前缀。概率与熵均指这一固定条件下的分布。

对固定有限分数集合,令 \(\beta=\frac{1}{\tau}\)\(Z(\beta)=\sum_v e^{\beta z_v}\)。熵写为

\[ H(\beta)=\log Z(\beta)-\beta\mathbb E_{p^{(\tau)}}[z]. \tag{8.12}\]

\(\frac{\dif\log Z}{\dif\beta}=\mathbb E[z]\) 以及 \(\frac{\dif\mathbb E[z]}{\dif\beta}=\operatorname{Var}(z)\),有

\[ \frac{\dif H}{\dif\beta}=-\beta\operatorname{Var}(z),\qquad \frac{\dif H}{\dif\tau}=\frac{\operatorname{Var}_{p^{(\tau)}}(z)}{\tau^3}\geq0. \tag{8.13}\]

因此在固定支持集与固定分数下,提高温度不会降低条件熵。这是关于同一时刻分布的结果;不同采样路径产生不同前缀后,不能以此保证最终文本的质量或多样性按同样方式单调改变。

Top-k 及核采样

\(k\) 项采样(Top-k Sampling)保留概率最大的 \(k\) 个候选,令集合为 \(\mathcal K\),再归一化:

\[ q_v=\frac{p_v\mathbf1[v\in\mathcal K]}{\sum_{u\in\mathcal K}p_u}. \tag{8.14}\]

边界并列时可以按稳定规则恰好选择 \(k\) 项,也可以保留所有达到阈值的项;后一种方式的支持集可能多于 \(k\)。两种定义均应明确,不能用同一个配置名掩盖实际集合差异。

核采样(Nucleus Sampling,Top-p)按概率从大到小排序,取累计概率至少达到 \(\rho\) 的最小前缀集合(Holtzman 等 2020)。若排序概率为 \(p_{(1)}\geq\cdots\geq p_{(V_{\mathrm{vocab}})}\),则

\[ m=\min\left\{r:\sum_{j=1}^{r}p_{(j)}\geq\rho\right\},\qquad \mathcal N_\rho=\{(1),\ldots,(m)\}. \tag{8.15}\]

之后在 \(\mathcal N_\rho\) 内重新归一化并采样。跨过阈值的那个候选必须保留,尤其在第一候选就超过阈值时,集合仍至少包含一个词元。Top-p 中的 \(p\) 是方法名称,正文用 \(\rho\) 表示阈值,以区别模型概率。

Top-k 固定候选数量,Top-p 固定保留的累计概率门槛。尖锐分布下 Top-p 可能只留下一个词元,平坦分布下则可能留下很多。二者均改变支持集,可能移除 EOS 或任务所需的低概率候选,不应视为无代价的质量保证。

采样变换顺序

设某个前缀后的原始概率为

\[ p=(0.4,0.3,0.2,0.1), \tag{8.16}\]

对应分数可取 \(z=(\log0.4,\log0.3,\log0.2,\log0.1)\)。温度 \(\tau=\frac{1}{2}\) 相当于将概率平方再归一化,平方和为 \(0.30\),所以

\[ p^{(\frac{1}{2})}=\left(\frac8{15},\frac3{10},\frac2{15},\frac1{30}\right). \tag{8.17}\]

原分布做 Top-\(2\) 得到 \((\frac{4}{7},\frac{3}{7},0,0)\);原分布做阈值 \(\rho=0.75\) 的 Top-p 时,前两项之和为 \(0.7\),必须保留第三项,得到 \((\frac{4}{9},\frac{1}{3},\frac{2}{9},0)\)

若先降温再做同样的 Top-p,前两项的质量为 \(\frac{8}{15}+\frac{3}{10}=\frac{5}{6}>0.75\),只保留两项,最终分布为 \((\frac{16}{25},\frac{9}{25},0,0)\)。如果先在原分布上做 Top-p,再降温,支持集仍有三项,最终为 \((\frac{16}{29},\frac{9}{29},\frac{4}{29},0)\)。因此温度与 Top-p 的次序会改变分布。温度不改变候选排序,所以在没有其他变换、并列规则相同的条件下,它与固定 Top-k 支持集选择的关系不同;不能据一个特例推断所有处理器都可交换。

生成分布偏移

设经过温度、截断和其他规则后的条件分布为 \(q_t(\cdot\mid c,y_{<t})\),实际随机生成的路径概率为

\[ q(y_{1:T}\mid c)=\prod_{t=1}^{T}q_t(y_t\mid c,y_{<t}). \tag{8.18}\]

它通常不等于原始 \(p_\theta(y_{1:T}\mid c)\)。即使只用相同温度,每个前缀的归一化常数不同,也不能一般地将结果解释为“整条序列概率统一取 \(\frac{1}{\tau}\) 次方后归一化”。逐步变换定义的是另一组条件分布。

记录生成概率、计算重要性比率或检验精确采样时,必须说明使用原始模型分布还是实际解码分布。温度和截断不会改变模型权重,也不会为模型补充事实知识;它们改变的是已给定分数被转化为决策的方式。

8.7贪心及束搜索

局部最优及序列最优

贪心解码(Greedy Decoding)每一步选择条件概率最大的候选,按固定规则解决并列。它最大化当前一步,而非全部未来。对完整序列,应比较式(8.3)中的乘积,计算时通常累加对数。

构造一个有限分支概率模型:第一步 \(p(a)=0.6,p(b)=0.4\);在 \(a\) 后,EOS 与 \(c\) 的概率各为 \(0.5\);在 \(b\) 后,EOS 概率为 \(0.9\)\(c\)\(0.1\);一旦产生 \(c\),下一步必为 EOS。其完整序列分布为

完整序列 概率
\(a,\mathrm{EOS}\) \(0.6\cdot0.5=0.30\)
\(a,c,\mathrm{EOS}\) \(0.6\cdot0.5\cdot1=0.30\)
\(b,\mathrm{EOS}\) \(0.4\cdot0.9=0.36\)
\(b,c,\mathrm{EOS}\) \(0.4\cdot0.1\cdot1=0.04\)

四条路径概率之和为一。贪心第一步选 \(a\),无论随后并列选择 EOS 还是 \(c\),完整概率均为 \(0.30\),低于 \(b,\mathrm{EOS}\)\(0.36\)。这个模型用零概率屏蔽未列分支,仅用于精确说明序列决策,不代表某个训练模型的测量。

局部贪心错过完整高概率序列的概率树。节点数值为累计概率;含 $c$ 的前缀下一步以概率一结束。
图 8.3 局部贪心错过完整高概率序列的概率树。节点数值为累计概率;含 \(c\) 的前缀下一步以概率一结束。

束搜索保留多个前缀

束搜索(Beam Search)以有限宽度 \(K\) 保留候选,反复扩展与剪枝。设前缀分数为

\[ s(y_{1:t})=\sum_{j=1}^{t}\log p_\theta(y_j\mid c,y_{<j}). \tag{8.19}\]

每次扩展一个候选 \(v\),只需令 \(s' = s+\log p_\theta(v\mid c,y_{1:t})\)。同一深度的候选可以批量前向,但各自前缀、缓存和结束状态必须保持对应,不能在排序后错配状态。

8.3中宽度为二时,第一步保留 \(a,b\);第二步最高的扩展是 \(b,\mathrm{EOS}\),得分对应 \(0.36\),其次为两条 \(0.30\) 分支之一。因此保留多个前缀可修复该例的贪心选择。但有限宽度仍可能过早删除一条未来更优的路径;增大束宽不提供一般的全局最优保证,更不保证任务质量。

算法8.2 以原始对数概率评分的束搜索

输入:条件 \(c\)、束宽 \(K\)、EOS 集合、最大新增长度 \(L_{\max}\) 和确定的并列规则。输出:一个完成候选及终止原因,或未完成候选及长度截断标记。状态:至多 \(K\) 条记录,每条含前缀、累计分数、完成标记及其模型状态。

  1. 初始化空响应候选,累计分数为零,状态与条件 \(c\) 对应。

  2. 对每条未完成候选计算下一步分布,为每个有限分数词元生成扩展并累计式(8.19);若词元属于 EOS 集合,将该扩展标记完成。已完成候选原样进入候选池,不再追加词元或重复计分。

  3. 从候选池按原始累计分数保留最高的 \(K\) 条,连同其对应模型状态一起重排。若不足 \(K\) 条则保留全部。

  4. 若当前最佳完成候选的分数不低于所有未完成前缀分数,可以停止;若全部候选完成,也停止。否则继续扩展,最多进行 \(L_{\max}\) 次。

  5. 有完成候选时返回其中最高分者;没有时返回最高分未完成前缀并报告截断。本规则不把外部预算耗尽伪装成模型选择 EOS。

本算法让完成候选占据束内位置,定义了一种明确的有限束策略;\(K=1\) 时与采用相同并列及终止规则的贪心解码一致。维护独立完成池的实现可以使用不同的候选预算,必须另行说明。

束搜索停止条件

每个条件概率不超过一,所以 \(\log p\leq0\),任何未完成前缀的未来扩展分数都不超过当前分数。如果一个完成候选已经不低于所有保留前缀分数,那么继续扩展这些前缀不可能超过它。这证明了算法8.2中的停止条件,但仅相对于尚未剪去的候选成立,无法重新发现此前被删除的路径。

长度归一化会改变这个性质。常见目标可写为 \(\frac{s(y)}{|y|^\alpha}\)\(\alpha>0\),其中长度是否包含 EOS 必须固定。因为 \(s(y)\) 为负,分母随长度增大可能使归一化分数上升,当前前缀分数不再直接是未来得分上界。若存在确定的最大长度,可以根据该目标另行构造上界;若还加入奖励或覆盖项,则必须按完整评分重新推导,不能沿用原始对数概率的停止证明。

长度偏好及任务目标

较长路径累加更多非正项,原始序列概率常偏向某些短输出,但这不是“序列越长概率一定更低”的跨路径定理,因为不同路径的条件概率不同。长度归一化、最小长度与重复惩罚可以改变搜索行为,同时也改变目标,应该明确其服务的任务约束。

最大概率输出与高质量输出不是同一个数学目标。开放式任务有大量合理续写,高概率路径可能重复或过于笼统;有严格约束的翻译与结构化任务也可能因长度或覆盖问题失真。解码选择应围绕任务评价,而不能把更大的束宽当作模型能力提升。核采样相关研究讨论的退化现象也有特定模型和任务条件,不能外推成所有任务上唯一最优策略(Holtzman 等 2020)

8.8终止、约束及重复退化

生成停止条件

模型采样出 EOS 表示模型分布选择结束;命中应用规定的停止串表示外部协议结束;耗尽 \(L_{\max}\) 表示预算截断。三者的语义不同,应保留在返回状态中。EOS 通常不作为自然语言正文展示,但它仍属于模型的输出事件。

停止串可能跨词元边界,也可能跨流式分片边界;应对连续解码状态判断匹配,不能逐分片做独立字符串检查。是否保留停止串、匹配多个停止串时如何处理、特殊词元是否参与文本解码,都属于输出协议。1

最小生成长度通常通过暂时禁止 EOS 来实现,它在允许长度之前改变分布。若用户请求短答案却强制较长最小长度,模型可能被迫继续补写。最大新增词元数与“提示加响应的最大总长度”也不同,前者控制输出预算,后者受到上下文容量约束;记录配置时必须区别。

带明确状态的逐步生成

算法8.3 温度与核采样的有限生成过程

输入:已经序列化的条件词元、词表与模板、温度 \(\tau>0\)、核阈值 \(\rho\)、EOS 和停止串、最大新增长度 \(L_{\max}\)输出:响应词元、文本与停止原因。状态:当前前缀、随机数状态、可选键值缓存以及连续文本解码状态。

  1. 固定推理模式;检查条件长度与位置范围。将当前前缀设为条件,响应置空,不把已结束请求作为活跃候选继续处理。

  2. 从当前合法前缀计算末位置分数。施加已声明的硬约束;若没有任何允许候选,返回约束冲突,不对全屏蔽分数执行 Softmax。

  3. \(\frac{z}{\tau}\) 得到稳定归一化分布,按确定的并列规则构造累计概率至少为 \(\rho\) 的最小核;在核内重新归一化。

  4. 根据本次随机数状态抽取一个词元,将它追加到响应和下一步前缀,保持缓存、位置与新前缀一致。

  5. 若采到 EOS,报告自然终止;否则更新连续文本状态,命中停止串时按协议结束。尚未终止且已新增 \(L_{\max}\) 个词元时,报告长度截断。

  6. 未结束时返回第2步;最终返回结果及停止原因。返回的每个词元都只依赖其之前已经确定的前缀。

贪心模式应使用独立的最大值选择分支,不将 \(\tau=0\) 送入除法。Top-k、重复惩罚或其他处理器若参与执行,还必须说明它们在第2至3步中的顺序。

重复的跨步反馈

一段重复输出进入前缀后,模型可能继续给同类续写较大概率;新产生的重复又成为条件,形成跨步反馈。低温度会在重复词元已是最高分时进一步集中概率,却不是重复的充分条件。贪心和束搜索同样可能保留重复路径,随机采样也可能重复。

重复 \(n\) 元组屏蔽可以禁止已经出现的片段再次出现,但会误伤需要复述的名称、代码、公式或合法韵律。按已出现词元次数调整分数是一种软约束,也会改变语义词的使用概率。若所有合法候选都被规则排除,算法必须报告冲突或使用事先声明的回退,而不是临时偷偷取消约束。

还应区分模型重复与系统重复。流式分片重复拼接、错误重试或缓存前缀错配也能产生重复文本,它们并非调高温度就能解决。模型分数、解码规则和传输状态对应不同的原因,应分别定位。

8.9条件生成及缓存的边界

提示、任务边界及模板

仅解码器条件生成通常把系统说明、用户输入与历史消息序列化为一个前缀,再续写响应。消息角色与边界标记属于模型看到的条件,不是界面装饰。把相同自然语言放入不同角色、删除分隔符或改变响应起始标记,可能产生不同的条件分布。

训练时若只监督响应,应保留提示对响应的可见性,同时将提示的损失权重设为零。测试条件生成时通常比较 \(p(y\mid c)\),无需把提示本身的概率 \(p(c)\) 加入响应排名;不同提示长度的总序列损失也不能直接作为响应质量比较。

在编码器–解码器模型中,条件 \(c\) 先编码为记忆,目标侧仍通过教师强制或逐步生成处理。交叉注意力通常允许读取全部有效源记忆,目标自注意力保持因果。两种结构的分词器、特殊标记与权重布局不可只凭输入输出形状互换。

缓存复用的分布等价性

如果权重、位置和可见性不变,新增未来词元不会改变历史位置的隐藏状态。因此历史各层键和值可以保存,下一步只计算新增位置并读取缓存。缓存复用应产生与重新计算相同前缀相同的数学条件分布;它不是把原始长前缀压缩为一个固定维数向量。

如果前缀修改、位置方案变化、模型参数更换或掩码不再允许原来的信息范围,缓存便可能失效。滑动窗口也必须明确舍弃哪些历史状态以及如何解释位置。性能优化不能以错误复用改变概率模型。

生成复现条件及概率语义

同一权重和提示不足以确定随机采样结果,还需要解码配置、随机数状态、输入模板和执行环境。固定随机种子有利于同一条件下复核,却不保证跨设备、后端或数值精度逐词元一致。很小的概率差异也可能使一次离散选择落到不同分支,继而改变整个后续前缀。

词元概率表示模型在给定上下文中的条件偏好,不是某个事实命题的可靠置信度。对多个词元组成的回答,也不能把其中一个高概率词元当作整段真实性证据。最终评价应依据任务要求,并保持模型原始分布、解码后分布和实际返回文本的区别。

生成质量来自三个相互独立的定义

模型定义 \(p_\theta\),解码器定义如何选择或抽样,停止协议定义输出在哪里结束。训练损失验证条件预测,采样规则决定实际输出分布,序列任务评价判断结果是否有用。三者不能互相替代,也不能用调整一个解码参数补足所有模型与系统问题。

习题参考结果

第2题完整概率为 \(0.28\),负对数似然为 \(-\log0.28\),平均损失为 \(-\frac{\log0.28}{3}\)。第4题的核集合分别包含前两项与全部四项;第一种重新归一化为 \((\frac{4}{7},\frac{3}{7},0,0)\)。第7题若把产生 EOS 的一步也计入,则步数服从参数为 \(\epsilon\) 的几何分布,期望为 \(\frac{1}{\epsilon}\);非 EOS 词元数的期望为 \(\frac{1-\epsilon}{\epsilon}\)。这些结论依赖固定条件概率假设,不是实际模型生成长度的通用分布。


  1. 某些对话格式区分“一个消息结束”和“本轮助手回答结束”。这些标记即使都表现为特殊词元,也不能未经模型模板说明就合并为同一 EOS 语义。↩︎

WORKBOOK / 习题

配套习题与解析

先独立作答,再展开参考解析。选修题保留原书标记。

习题 8.1

对序列 \((\mathrm{BOS},a,b,\mathrm{EOS})\),分别写出数据侧移位与损失侧移位的输入、目标和有效位置。说明两个接口连续使用会把目标变成什么。

展开参考解析

数据侧移位:输入 \((\mathrm{BOS},a,b)\),目标 \((a,b,\mathrm{EOS})\),三个位置有效。损失侧移位:输入和标签均可提供 \((\mathrm{BOS},a,b,\mathrm{EOS})\),内部用前三个logit对后三个标签,BOS不作为目标,最后输入位置无后继监督。若先数据移位再让损失内部移位,BOS位置被用于预测b,a位置预测EOS,实际变成跨两步目标并丢失边界项。

习题 8.2

给定 \(p(a\mid c)=0.7\)\(p(b\mid c,a)=0.5\)\(p(\mathrm{EOS}\mid c,a,b)=0.8\),计算完整响应 \((a,b)\) 的概率、负对数似然及按三个目标平均的损失。若遗漏 EOS,比较对象发生了什么变化?

展开参考解析

概率为 \(.7\times.5\times.8=.28\),负对数似然 \(-\log.28\approx1.272966\),平均三目标损失约.424322。遗漏EOS得到前缀概率.35,表示生成了a、b但尚未规定此处结束;这不是同一完整响应事件。

习题 8.3

对式8.10证明正温度保持排序。最大分数并列时,为什么温度趋零的极限与某个确定并列规则的贪心输出不完全相同?

展开参考解析

\(\tau>0\)\(z_i>z_j\) 当且仅当 \(\frac{z_i}{\tau}>\frac{z_j}{\tau}\),指数单调且共享分母,因此排序保持。若有m个并列最大值,其他分数严格较小,\(\tau\to0^+\) 时概率在这m项上各趋 \(\frac{1}{m}\)。确定贪心按固定规则只输出一项,因此分布极限与确定规则的单点输出不相同。

习题 8.4

对概率 \((0.4,0.3,0.2,0.1)\),计算阈值 \(\rho=0.5\)\(\rho=0.95\) 的核集合及最终分布。指出“累计超过阈值的项全部移除”会造成的错误。

展开参考解析

\(\rho=.5\) 时前一项.4不足,前两项.7达到门槛,集合为前两项,概率 \((\frac{4}{7},\frac{3}{7},0,0)\)\(\rho=.95\) 时前三项.9不足,须保留四项,概率不变。删除首个跨过门槛的词元会留下累计不足阈值的集合;第一项即跨门槛时甚至可能错误得到空集。

习题 8.5选修

用图8.3计算四条路径的对数分数,并分别模拟宽度一与宽度二的算法8.2。明确并列规则与已完成候选是否继续占据束位置。

展开参考解析

四条完整路径对数为 \(\log.30\approx-1.203973\)、同值、\(\log.36\approx-1.021651\)\(\log.04\approx-3.218876\)。规定并列优先EOS,完成候选继续占束位。\(K=1\)先保留a,再保留a-EOS;\(K=2\)先保留a、b,再保留b-EOS与a-EOS,两者都完成,最优为b-EOS。若并列选a-c,下一步必EOS,得分仍不变;明确并列规则后可复现。

习题 8.6选修

说明原始对数概率为何具有扩展上界。再构造一条前缀,使长度归一化后的分数在继续生成后反而上升。

展开参考解析

每个后继对数概率不大于0,所以任何扩展分数 \(s'\le s\),原前缀分数是其后代原始分数上界。若用平均对数分数,前缀长度1、分数−2,追加概率 \(e^{-.1}\) 后得−2.1,平均由−2升至−1.05。故不能把原始分数的单调上界直接用于长度归一化剪枝。

习题 8.7选修

若每步 EOS 概率为固定 \(\epsilon\in(0,1)\),推导生成步数的分布与期望。随后解释将 EOS 永久排除出 Top-k 集合会怎样改变终止性质。

展开参考解析

把EOS一步计入T,\(P(T=t)=(1-\epsilon)^{t-1}\epsilon\)\(t\ge1\)。由尾和公式 \(\mathbb ET=\sum_{t\ge0}P(T>t)=\sum_{t\ge0}(1-\epsilon)^t=\frac{1}{\epsilon}\);非EOS词元数期望为 \(\frac{1-\epsilon}{\epsilon}\)。永久截断EOS会使实际采样分布的终止概率为零,必须依赖长度上限等外部条件停止,这不再是同一分布。

习题 8.8

某批次有三个请求,其中一个已命中 EOS。说明其后应如何管理完成状态、填充位置与缓存,为什么不能仅让它继续生成后再删去文本。

展开参考解析

为每个请求保存独立完成标记,完成后不再采样有效词元或增加有效长度;若静态批次仍需占位,填充输出不得成为后续真实条件。动态压缩批次时同步重排请求ID、缓存块和位置。继续生成再裁文本会多用计算、改变随机数消费和缓存长度,甚至触发工具调用;输出裁剪不能替代执行停止。

习题 8.9

构造一个跨两个词元解码边界的停止串,说明逐词元独立字符串比较为何可能遗漏它。

展开参考解析

停止串可取 END,相邻两个解码片段分别为 END,各自都不等于完整停止串。需要在累积解码流中保留足够长的后缀并与新片段共同匹配;字节级词元还应处理不完整字符的增量解码状态。命中后按协议决定是否保留停止串,且匹配策略须与模型EOS分开记录。

习题 8.10

教师强制精确对应序列最大似然,为什么模型仍可能在自由生成中退化?分别从有限数据、解码变换和终止规则举例,避免将它们统称为暴露偏差。

展开参考解析

有限数据与模型误差使生成前缀偏离训练支持,此为训练与访问分布错配的一种来源;截断或极低温度还可能放大重复、删去正确候选,这是解码分布变化;EOS被屏蔽或最大长度过短则属终止协议错误。教师强制正确实现最大似然,并不保证有限模型无误差;应分别用前缀扰动、固定模型解码对比和停止回归定位,而非统一归咎一种机制。

习题 8.11

给定证据只说明“系统于2024年发布”,回答却称“系统由甲于2023年发布”,并附上一个证据包中不存在的条目编号。分别判定其中的事实错误、上下文矛盾、无依据生成和虚构归因;再说明降低温度为何不能修复这些问题,并给出至少两项系统级控制。

展开参考解析

“2023年”与证据给出的2024年冲突,既是相对于该证据的上下文矛盾;若2024年也是目标范围内的有效事实,它同时构成事实错误。“由甲”没有证据支持,属于无依据生成;引用证据包中不存在的条目属于虚构归因。降低温度只把概率集中到原有高分路径,若这些声明原本得分最高,错误会更稳定。控制可包括限定只能依据证据作答、验证声明到来源的映射、对年份和实体做规则或工具核验,以及证据不足时删除该声明或拒答。

REFERENCES

参考文献

Bengio, Samy, Oriol Vinyals, Navdeep Jaitly, 和 Noam Shazeer. 2015. 《Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks》. 2015年. https://arxiv.org/abs/1506.03099.
Holtzman, Ari, Jan Buys, Li Du, Maxwell Forbes, 和 Yejin Choi. 2020. 《The Curious Case of Neural Text Degeneration》. 收入 International Conference on Learning Representations. https://openreview.net/forum?id=rygGQyrFvH.
Ji, Ziwei, Nayeon Lee, Rita Frieske, Tiezheng Yu, Dan Su, Yan Xu, Etsuko Ishii, Ye Jin Bang, Andrea Madotto, 和 Pascale Fung. 2023. 《Survey of Hallucination in Natural Language Generation》. ACM Computing Surveys 55 (12): 1–38. https://doi.org/10.1145/3571730.

搜索全书

搜索全书正文、习题与解析