编程与 AI13 分钟阅读更新于 2026-08-03

为什么解码器输入和训练标签要错开一位

围绕解码阶段、目标序列和下一词预测的描述,解释右移目标、Teacher Forcing、并行训练与未来信息隔离。

相关工具

训练的目标是预测下一个词

Transformer 解码器不是把一整句目标文本一次性复制出来,而是在每个位置预测下一个词元。资料 对解码阶段的描述是:每个时间步输出一个元素,输出结果再作为下一个时间步的输入。

为了让训练和推理遵循同一个任务定义,训练时每个位置的输入应该是当前位置之前已经知道的前缀,标签则是紧接着的下一个词。输入和标签因此需要错开一位。

Transformer 解码器输入和训练标签错开一位的示意图
输入与标签错开一位

右移后的目标序列作为解码器输入,原目标序列作为每个位置的下一词标签。

起始标记填补输入序列的第一格

假设目标文本依次包含词一、词二和词三,解码器输入可以写成 BOS、词一、词二,训练标签则是词一、词二、词三。BOS 让第一个输入位置拥有明确起点,模型要在这个位置预测词一。

最后一个标签之后还可以继续放 EOS,让模型学习在目标内容结束后输出结束标记。这样,起始和结束都被纳入同一条下一词预测链路,而不是额外写一套独立规则。

如果输入和标签不移位会发生什么

如果把完整目标序列同时作为输入和标签,当前位置就可能直接看到自己要预测的词。模型不需要根据前缀推断答案,而可以利用标签本身或对应位置的内容。这样的训练目标和推理时的条件不一致。

即使使用了因果掩码,输入位置本身仍可能包含不该提前出现的目标词。因此,右移不是形式上的排列,而是把“已知前缀”和“待预测答案”放到不同位置,确保每个训练位置执行真正的下一词预测。

Teacher Forcing 为什么依赖这个错位关系

Teacher Forcing 的意思是,在训练下一步时使用真实目标前缀,而不是使用模型自己上一轮生成的结果。右移后的目标序列正好提供了这组真实前缀:每个输入位置都来自目标答案中已经出现的部分。

这让训练过程稳定且高效,但也意味着模型训练时看到的前缀比推理时更可靠。因果掩码和输入标签错位共同保证了:模型可以使用真实历史,却不能直接读取当前位置之后的答案。

Transformer Teacher Forcing 使用右移目标序列进行下一词预测的示意图
Teacher Forcing 下的真实前缀

训练输入使用真实目标前缀,标签是对应的下一词,掩码阻止读取更右侧答案。

为什么多个位置可以同时训练

右移后的目标输入在训练开始前已经准备好,所有位置的标签也已知。解码器可以一次接收整段输入,掩码自注意力为每个位置划定可见前缀,输出层同时得到多行词表分布。

这就是训练阶段能够并行预测多个位置的原因。并行不代表位置之间没有顺序,而是把所有符合因果约束的计算组织成矩阵。每一行仍然只负责自己的下一词目标。

掩码和右移各自解决什么问题

右移解决的是输入和标签的时间对齐:当前位置输入历史前缀,标签是下一个词。因果掩码解决的是可见范围:当前位置不能读取目标输入中更右侧的未来部分。两者缺一不可。

如果只右移但没有掩码,当前位置仍可能读取更后面的目标输入;如果只有掩码但不右移,当前位置输入中仍可能包含本来要预测的词。训练安全边界来自这两项设计共同作用。

Transformer 目标右移和因果掩码共同防止未来答案泄露的示意图
右移与因果掩码的配合

右移安排输入和标签的位置关系,因果掩码限制每个位置只能使用目标前缀。

推理时没有真实标签可以右移

推理阶段只知道源序列和当前目标前缀,不知道完整目标答案。系统从 BOS 开始,模型预测第一个词元,再把它追加到前缀,下一轮继续预测。此时目标输入不是一次准备好的完整右移序列,而是逐步增长的历史。

训练和推理的外在形态不同,但任务定义保持一致:当前位置根据已有前缀预测下一个词。训练用真实前缀提高效率,推理用模型自己生成的前缀完成循环。

错位关系也决定损失如何统计

每个有效目标位置都有一个下一词标签,交叉熵损失比较该位置的词表分布和对应真实词元。Padding 位置需要在损失统计中忽略,EOS 可以作为有效目标的一部分参与学习。

因此,阅读训练代码时可以重点检查三件事:输入是否去掉最后一个位置并在开头加入 BOS,标签是否去掉开头并保留后续目标,损失是否对每个位置与正确标签对齐。

用一张表检查右移是否正确

输入位置 1 是 BOS,标签位置 1 是词一;输入位置 2 是词一,标签位置 2 是词二;输入位置 3 是词二,标签位置 3 是词三。每一行都是“已知内容预测下一词”。

这张对齐关系比死记术语更有用。只要能回答每个位置看到了什么、要预测什么、能不能看到未来,就能判断解码器训练输入和标签是否构造正确。

常见问题

为什么训练标签不能直接作为解码器输入?

标签是当前位置需要预测的答案,直接放入输入会让模型提前看到目标词,破坏下一词预测任务。右移后,输入提供前缀,标签提供下一词。

Teacher Forcing 会不会让训练和推理不一致?

会产生一定差异。训练时使用真实前缀,推理时使用模型生成的前缀;但右移和因果掩码保证两者执行的基本任务仍是根据历史预测下一词。

因果掩码可以替代右移吗?

不能。因果掩码限制可见范围,右移负责安排输入和标签的对齐关系,两者解决不同问题。