Transformer 训练时如何知道答案对不对:从 Teacher Forcing 到交叉熵损失
围绕目标序列和输出层内容,解释右移目标、Teacher Forcing、逐位置预测与交叉熵损失之间的关系。
相关工具
训练不是把整句话一次性塞进模型
Transformer 的生成任务看起来像是在写完整句子,但训练时真正比较的是每个位置的下一词预测。给定源序列和目标序列,模型需要在目标位置 t 上预测目标词 t,而不能提前使用这个词本身。
文中的解码流程是从起始标记开始,一步一步输出目标序列。训练阶段为了提高效率,可以把多个位置放在同一次计算里,但每个位置仍然遵守从左到右的条件关系。训练目标不是一句笼统的“生成得像不像”,而是许多位置上的词概率是否接近正确答案。

模型根据目标前缀预测下一个词,并在每个位置与真实目标比较。
为什么要把目标序列右移一位
假设目标句子是“我 喜欢 学习”,训练输入不能直接从第一个位置放入完整答案,而是要让解码器看到起始标记后预测“我”,看到“我”后预测“喜欢”,看到“我 喜欢”后预测“学习”。因此,送入解码器的目标序列通常比标签提前一个位置。
右移后,输入和标签形成错位配对:输入位置 0 对应标签位置 1,输入位置 1 对应标签位置 2。模型可以一次处理整段右移后的输入,但每个位置的监督信号仍然是它应该预测的下一个词。这样既保留了自回归生成的逻辑,又利用了矩阵计算的并行能力。
如果不右移,模型可能在输入中直接看到要预测的答案,训练损失会很漂亮,真正生成时却没有同样的信息可用。这种训练与推理之间的差别,往往比模型大小更容易造成输出异常。
Teacher Forcing 到底在帮助什么
Teacher Forcing 指的是:训练某个位置时,使用真实目标前缀作为输入,而不是使用模型前一步自己生成的词。这样,预测“学习”时会给模型真实的“我 喜欢”,而不是先让它根据概率猜出前两个词再继续。
这种方式让训练更容易收敛,因为错误不会在每一步不断累积。模型可以在正确的上下文中学习当前词的条件概率,梯度也更直接地指向当前预测。代价是训练阶段看到的前缀通常比推理阶段更可靠,模型因此可能出现训练时表现很好、连续生成时逐渐偏离的现象。

训练时使用真实目标前缀帮助模型学习当前位置的下一词预测。
交叉熵如何评价一个位置
模型在每个位置都会输出整个词表的概率分布,而正确答案通常是其中一个目标词。交叉熵关注的就是目标词获得了多少概率:目标词概率越高,损失越小;模型把概率放到其他词上,损失就会变大。
对于一段目标序列,训练损失通常是各个有效位置损失的总和或平均值。填充位置不代表真实目标,因此需要配合 Padding Mask 排除,否则模型会被要求预测不存在的词。这样,损失只衡量真实词元的位置,不会把批量对齐产生的空位混入评价。

每个目标位置都有一个词表分布,交叉熵比较真实词在该分布中的概率。
为什么多个位置可以同时训练
解码器自注意力中的 Sequence Mask 会限制每个位置只能看到过去,目标序列右移则保证答案没有提前进入输入。两个条件配合后,位置 1、位置 2、位置 3 可以在一次前向计算中同时得到预测,虽然它们在生成逻辑上仍然代表不同时间步。
并行训练并没有取消顺序,只是把彼此独立的矩阵运算同时完成。每个位置的注意力可见范围不同,监督标签也不同,最终的总损失仍然汇总了整段序列的逐步预测结果。推理时则不能完全照搬这种并行形式,因为下一个位置依赖刚生成的词。
损失如何传回模型内部
输出层先把解码器隐藏状态映射为词表 logits,Softmax 或交叉熵计算得到目标位置的损失。误差信号随后经过输出投影,回到解码器的 FFN、交叉注意力和掩码自注意力,再继续传到编码器和词嵌入等部分。
这条路径说明,损失不只是评价结果,也是在告诉模型哪些表示需要改变。如果当前目标词概率太低,输出层会调整打分方向;如果源句信息没有被正确读取,交叉注意力和编码器相关参数也会通过梯度获得更新。多次训练后,模型逐渐学会把上下文表示和正确词元联系起来。
训练损失低,为什么生成仍可能不理想
Teacher Forcing 让模型训练时经常看到真实前缀,而推理时只能看到自己已经生成的前缀。一旦某一步选错,后面输入的上下文就和训练阶段不同,错误可能继续扩大。这并不意味着交叉熵没有用,而是说明单步预测正确与整段连续生成之间存在差别。
还要注意损失是许多位置的平均结果。平均值下降,不能保证每个位置都同样可靠;高频词可能更容易预测,少见词和长距离依赖可能仍然困难。阅读训练结果时,既要看整体损失,也要结合不同长度、不同类型样本的生成表现。
把训练流程完整串起来
一条完整的训练链路是:源序列进入编码器形成记忆,右移后的目标序列进入解码器,掩码自注意力整理真实目标前缀,交叉注意力读取源记忆,输出层为每个位置生成词表分布,交叉熵再逐位置比较预测和标签,最后通过反向传播更新参数。
这条链路把并行训练和逐词生成连接起来。右移目标和 Teacher Forcing 负责提供稳定的学习上下文,Sequence Mask 保持因果顺序,交叉熵负责给出明确的数值反馈。理解它们各自的职责,就能看出 Transformer 的训练并不是一句话对一句话的粗略评分,而是对整段序列中的每一步做细致判断。
常见问题
Teacher Forcing 会不会让模型依赖真实答案?
它确实让训练前缀比推理前缀更可靠,这是训练与推理之间的差异来源之一。但它也能让模型更稳定地学习每个位置的条件概率,实际训练通常会通过数据规模、正则化和解码策略共同缓解这种差异。
为什么交叉熵只看真实词的概率?
交叉熵通过真实标签评价整组概率分布。真实词概率越高,分布越接近目标,损失越小;其他词的概率也会通过归一化间接影响这个结果。
填充位置需要计算损失吗?
不需要。填充位置只是为了批量对齐,应使用 Padding Mask 从损失统计中排除,否则会把不存在的目标当成训练答案。