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

一个输入句子如何经过 Transformer 变成目标文本:完整数据流

从整体架构到解码输出的内容,串联词嵌入、编码器、解码器、交叉注意力、Softmax 和 EOS 的完整流程。

相关工具

先把 Transformer 看成一条数据流

理解 Transformer 的局部公式之后,最容易遇到的新问题是:这些模块到底怎样首尾相接?从输入句子开始,数据会依次经过词元化、Embedding、位置编码、编码器堆叠、解码器堆叠和输出层,最后形成目标文本。

资料 先把 Transformer 看成一个 Encoder-Decoder 黑盒,再逐步打开内部结构。这个顺序很有帮助:先知道输入和输出,再沿着数据流看每个模块完成了什么,注意力、FFN、掩码和 Softmax 就不再是互相孤立的名词。

Transformer 从输入序列到输出序列的整体架构图
Transformer 的整体数据流

源序列进入编码器形成记忆,目标前缀进入解码器,最后输出目标词元。

第一步:源文本变成带位置的向量

源文本先被切分成词元,每个词元通过词表编号找到对应的 Embedding 向量。位置编码随后加入这些向量,让模型知道每个词元在源序列中的位置。不同长度的句子会在批次中补齐,Padding Mask 负责标记没有真实内容的空位。

这一阶段得到的是一组形状统一的序列表示。它们还没有经过上下文理解,但已经具备了两个基础信息:每个位置是什么词元,以及它在序列中的顺序。后面的编码器会在这组表示上继续建立词与词之间的关系。

第二步:编码器把源句变成上下文记忆

源序列进入底层编码器后,先经过自注意力,再经过位置前馈网络,每个子层外还有残差连接和 LayerNorm。自注意力让当前位置可以查看源句其他位置,FFN 则对已经融合的表示做逐位置加工。

多个编码器层按相同结构堆叠,但每层使用自己的参数。底层接收词嵌入,上一层输出传给下一层,最后得到一组包含源句上下文的表示。这组表示不是一个单独摘要,而是保留了源序列各位置的可查询记忆。

第三步:目标前缀进入解码器

解码器不能直接从完整目标答案开始。训练时,目标序列右移后作为输入;推理时,输入是起始标记和已经生成的目标前缀。目标嵌入加入位置编码后,先进入解码器的掩码自注意力。

掩码自注意力限制每个位置只能看到自己和过去,避免当前位置使用未来答案。经过这一层,目标表示已经知道目标前缀内部的历史关系,但还没有读取源句中的具体内容。

Transformer 编码器和解码器协同完成翻译的完整流程图
从源句到目标句的翻译流程

编码器先形成源记忆,解码器再结合目标前缀逐步产生目标序列。

第四步:交叉注意力连接两套序列

解码器的交叉注意力用当前目标表示生成 Query,再用编码器输出生成 Key 和 Value。目标位置通过 Query 查询源序列记忆,选择与当前生成内容相关的源位置,并把对应信息加权带回。

这一步让解码器不只是续写目标前缀,而是能够根据源句完成翻译、摘要或条件生成。不同目标位置可以关注源句的不同区域,交叉注意力的权重会随着目标前缀和当前层表示变化。

第五步:FFN 和残差继续加工

交叉注意力输出会与残差路径合并,再经过归一化和位置前馈网络。FFN 在每个位置内部扩展并重新组合特征,最终缩回 d_model,供下一层解码器继续使用。

解码器堆叠多层后,目标表示会反复整理历史、读取源记忆和加工特征。每一层的结构相似,但参数不同,因此不同深度可以学习不同阶段的表示变换。

第六步:输出层把隐藏状态变成词元

最后一层解码器输出的仍然是隐藏状态向量。Linear 把它投影到整个词表,得到每个候选词元的 logits;Softmax 把 logits 转成概率分布,解码策略再从中选择一个词元。

如果选中的词元是普通内容,就把它追加到目标前缀,进入下一轮;如果是 EOS,就表示目标序列可以结束。生成过程还需要最大长度等边界,避免模型迟迟不结束。

Transformer 解码器输出经过 Linear Softmax 选择词元的流程图
从隐藏状态到最终词元

解码器隐藏状态经过词表投影和 Softmax 后,选择下一词元或结束标记。

训练和推理只是同一数据流的两种走法

训练时,源序列完整进入编码器,右移目标序列一次性进入解码器;因果掩码保证每个目标位置只看允许的前缀,多个位置可以并行计算,再用交叉熵与真实目标比较。

推理时,源序列通常编码一次,目标端从起始标记开始逐词循环。每次得到一个词元后更新前缀,再进入下一轮。两种阶段使用相同的模块,区别在于目标前缀是完整准备好的,还是随着生成逐步出现。

把整条链路记成八个动作

可以把一次 Transformer 生成任务记成八个动作:切分词元、查表得到 Embedding、加入位置编码、编码器形成源记忆、解码器整理目标前缀、交叉注意力读取源信息、输出层形成词表概率、选择词元并检查 EOS。

这八步并不是每次都完全从头开始重复。推理时源记忆可以复用,目标端的部分注意力状态也可以缓存;但从理解原理的角度,数据始终围绕同一条主线流动。掌握这条主线后,再学习参数、掩码、缓存或不同解码策略,都会有清晰的落点。

常见问题

编码器直接输出目标文本吗?

不会。编码器输出的是源序列的上下文记忆,解码器结合目标前缀和这组源记忆,经过输出层后才逐步生成目标词元。

解码器每一轮都会重新编码源句吗?

通常不会。源句可以先经过编码器形成记忆,后续解码轮次反复通过交叉注意力查询这组记忆。

一次生成任务中哪些部分是循环的?

推理时,目标前缀预测、追加词元、检查停止条件会循环执行;源序列编码通常只做一次,解码器内部每轮仍使用矩阵计算。