Transformer 训练时可以并行,但生成时为什么仍然要按顺序
围绕并行计算、解码时间步和自回归输出的描述,解释训练阶段为什么能同时处理多个位置,而推理阶段仍需逐词生成。
相关工具
并行和顺序分别发生在哪一层
Transformer 相比传统 RNN 的重要特点之一,是可以把同一序列的多个位置组织成矩阵,利用并行计算处理注意力和前馈网络。但在生成任务中,输出词元之间又存在从左到右的依赖:后一个词的输入包含前一个词的结果。
所以,“Transformer 能并行”与“生成必须逐步进行”并不矛盾。前者主要描述训练和已知序列上的矩阵计算方式,后者描述推理时目标前缀如何逐步产生。

训练时多个目标位置可同时计算,推理时每个新词元要等待前一步结果。
训练时完整目标序列已经存在
训练数据中包含完整的目标答案。通过右移目标序列,解码器输入可以一次准备好,标签也可以一次准备好。因果掩码保证第 t 个位置只使用合法前缀,但多个位置的计算仍然可以在同一轮矩阵运算中完成。
这里的并行不是让第 t 个位置看到第 t+1 个位置,而是让所有位置同时计算各自允许看到的范围。掩码把信息边界编码进矩阵,硬件则可以并行执行这些相互独立的行计算。
因果掩码保留顺序约束
如果训练时直接让所有目标位置互相可见,模型会读取未来标签,下一词预测就失去意义。因果掩码把注意力矩阵右上方的未来区域屏蔽掉,让每一行只访问自己和左侧前缀。
因此,训练阶段的并行建立在一个带约束的矩阵上。多个位置可以同时计算,不代表它们之间没有顺序;顺序依赖被掩码保留下来,只是没有被实现成逐位置等待。
推理时下一个词还没有提前准备好
推理开始时,目标端通常只有 BOS 或用户提供的前缀。模型生成第一个词后,才能把它追加到目标输入;生成第二个词时,第二轮输入才包含第一个生成结果。后续词元依次依赖前面已经确定的内容。
这就是自回归生成的顺序来源。模型不是因为某个计算公式不能并行,而是因为当前轮的输入在上一轮结束前并不存在。若强行同时生成所有位置,就无法知道每个位置应该依据哪些前面生成的词。

每一轮新词元都要追加到目标前缀,下一轮才能使用更新后的历史。
编码器可以一次处理完整源序列
在 Encoder-Decoder 结构中,源序列在推理开始时通常已经完整给出。编码器可以一次对源序列进行 Embedding、位置编码、Self-Attention 和 FFN,形成源记忆。真正逐步变化的是解码器的目标前缀。
这也是为什么生成过程中可以复用编码器输出的 Key 和 Value。源端信息已经准备好,解码器每轮只需要根据新的目标状态查询它,同时处理目标历史。
缓存减少重复计算,但不消除顺序依赖
推理时可以缓存过去目标位置的 Key 和 Value,避免每一轮从头重新计算完整目标前缀。交叉注意力还可以复用编码器源记忆。这样能够减少重复工作,提升生成效率。
但缓存只优化了每轮计算,并没有让未来词元提前出现。当前轮仍然要先选择一个词元,下一轮才能使用它。计算量可以降低,生成的因果顺序仍然存在。

缓存复用历史状态和源记忆,但每一轮的新 Query 仍需等待上一轮词元。
训练并行和推理串行的代价不同
训练可以把多个位置放进一个批次和矩阵中处理,吞吐量较高,但需要保存大量中间激活用于反向传播。推理每轮只新增一个或少量位置,计算组织不同,响应时间往往受生成长度影响。
这也是评估模型效率时不能只看一次前向计算的原因。训练关注每个批次能处理多少位置,推理关注首词延迟、每秒生成词元数、缓存占用和总生成轮数。并行和串行是两个阶段的不同性能问题。
什么时候可以减少逐词等待
如果任务允许一次生成多个连续词元、使用非自回归模型,或者采用草稿模型和验证模型协同的策略,就可能减少严格逐词等待。但这需要改变模型结构、解码方法或接受额外的候选验证过程。
经典 Transformer 的 Encoder-Decoder 生成仍然遵循自回归路径:目标前缀产生 Query,输出一个词元,再进入下一轮。理解基础路径后,才能看懂各种并行解码或推理加速方法究竟改变了哪一部分。
用四个问题判断能不能并行
第一,当前位置的输入是否已经全部已知;第二,其他位置是否会依赖当前位置刚刚生成的结果;第三,掩码是否规定了可见范围;第四,缓存是在减少重复计算,还是改变了生成依赖。
训练时,目标输入和标签已经准备好,多个位置可以在因果约束下并行。推理时,未来目标还没有生成,新的位置必须等待历史结果。只要围绕“输入是否已知”和“是否存在前缀依赖”判断,就能分清并行计算与串行生成。
常见问题
Transformer 训练并行是否意味着它没有顺序信息?
不是。顺序信息由位置编码和因果掩码保留,训练只是把符合这些约束的多个位置组织成矩阵同时计算。
缓存能让推理一次生成整句话吗?
不能。缓存主要减少历史状态的重复计算,当前词元仍然要先生成,后续位置才能使用它。
编码器和解码器谁更容易并行?
源序列已知时,编码器可以一次处理完整输入;解码器的目标序列在推理时逐步产生,因此输出端存在自回归顺序依赖。