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

Transformer 解码器为什么要从起始标记开始

围绕解码阶段、目标序列和逐步输出的描述,解释起始标记如何启动第一步预测,以及它与目标前缀、EOS 和 Teacher Forcing 的关系。

相关工具

生成第一词时模型手里还没有答案

Transformer 的解码阶段是从空白状态逐步开始的。资料 描述解码过程时指出,解码器在每个时间步输出一个元素,然后把结果作为下一个时间步的输入,直到输出结束符。

但第一步没有前面已经生成的普通词元可供使用。系统需要一个明确的起点,让解码器知道目标序列从这里开始,并让第一轮计算拥有至少一个输入位置。起始标记就是这个启动信号。

Transformer 解码器从起始标记开始预测第一个词元的流程图
起始标记启动第一步解码

目标端从起始标记开始,结合源序列记忆预测第一个普通词元。

起始标记也是目标前缀的一部分

解码器的自注意力需要处理一个目标端序列。第一轮时,这个序列可能只有一个起始标记;第二轮时,它变成起始标记加上第一个生成词元;之后继续逐步变长。起始标记因此不是站在序列之外的控制按钮,而是目标前缀中的第一个特殊位置。

这个位置有自己的 Embedding,也会加入位置编码。经过掩码自注意力后,它形成当前目标状态,再通过交叉注意力读取编码器的源序列记忆,最后由输出层预测下一个词元。

第一步没有目标历史,仍然可以读取源序列

起始标记只提供目标端的开始状态,不包含目标正文内容。第一步预测并不是凭空完成的:编码器已经把源序列处理成一组 Key 和 Value,解码器可以用起始位置形成的 Query 查询这些源记忆。

因此,第一词的预测主要由三部分共同决定:起始标记表示、源序列上下文,以及模型在训练中学到的目标语言规律。随着后续词元加入,目标端的历史前缀会越来越丰富,Query 也会随之变化。

Transformer 起始标记通过交叉注意力读取编码器源记忆的示意图
第一步通过交叉注意力读取源记忆

目标端起始位置形成 Query,编码器源记忆提供 Key 和 Value,支持第一个词元预测。

训练时的起始标记和右移目标一起出现

训练数据中已经有完整目标句子。为了让模型学习下一词预测,通常把目标序列右移后作为解码器输入:起始标记放在输入开头,目标正文依次向后移动;原始目标序列作为标签。这样,输入位置和需要预测的下一个词能够错开对齐。

例如,解码器输入可以是 BOS、词一、词二,标签则是词一、词二、词三。起始标记让第一个输入位置有了对应的预测任务,也让整段目标序列可以在训练时一次准备好。

推理时起始标记是唯一已知的目标输入

推理阶段没有完整目标答案可供右移,系统通常只把起始标记送入解码器。模型输出第一个候选词元后,程序把它追加到目标前缀,再进行下一轮计算。

这就是训练和推理的一个重要差别:训练时目标前缀来自真实目标序列,可以并行计算多个位置;推理时目标前缀从起始标记开始逐步增长,每一轮新得到的词元都会影响下一轮。起始标记把两种流程连接在同一个目标序列接口上。

Transformer 训练和推理阶段从起始标记开始形成目标输入的对比图
训练与推理中的目标起点

训练时起始标记配合右移目标形成输入,推理时从起始标记开始逐词扩展前缀。

起始标记和 EOS 负责相反的边界

起始标记表示目标序列从哪里开始,EOS 表示目标序列可以在哪里结束。两者都属于特殊词元,但处在生成过程的两端:BOS 启动第一轮输入,EOS 触发停止判断。

没有起始标记,第一轮目标端缺少统一入口;没有 EOS,模型和生成程序缺少自然结束信号。实际系统还可以增加最大长度保护,但它不能替代起始和结束标记在目标序列结构中的作用。

起始标记不是源序列的一部分

在 Encoder-Decoder 结构中,源序列进入编码器,目标前缀进入解码器。起始标记属于目标端,不应该被误认为源句中的第一个词,也不负责改变编码器的源记忆。

它的作用是给解码器一个初始目标状态。交叉注意力随后把这个状态和源序列联系起来。把 BOS 放在哪一侧、是否使用单独编号和如何处理它,取决于具体词表与模型实现,但基本角色仍是目标生成的起点。

第一步预测可以按四个动作理解

第一,取出 BOS 的 Embedding 并加入位置编码;第二,通过解码器的掩码自注意力整理当前目标前缀;第三,用当前 Query 查询编码器源记忆;第四,经过 FFN、Linear 和 Softmax 选择第一个输出词元。

选择结果如果是普通词元,就追加到目标前缀;如果直接是 EOS,说明模型认为目标可以为空或立即结束。之后每一轮都重复相似流程,只是目标前缀越来越长,缓存和停止条件也会参与计算。

常见问题

起始标记会出现在最终展示文本里吗?

通常不会。它是解码器使用的特殊输入标记,主要用于启动目标序列,展示层一般会将其从正文中排除。

没有 BOS 能不能生成第一个词?

某些模型可以使用其他固定提示或特殊初始状态,但经典 Encoder-Decoder 解码流程需要一个明确的目标端起点,BOS 承担的就是这个作用。

BOS 和 EOS 的区别是什么?

BOS 标记目标序列开始并启动第一步预测,EOS 标记目标序列结束并触发停止判断。