Transformer 中的并行和串行
1. Transformer 的“并行性”到底指什么?
Transformer 相比 RNN/LSTM 的最大优点是:
Encoder 阶段:所有位置的 self-attention 可以 同时计算(并行)。
Decoder 训练阶段:即使有 mask,所有位置的 self-attention 也能 一次性并行计算。
👉 并行性主要体现在 训练时。
2. 那为什么生成时是串行的?
在 推理/生成阶段(inference),自回归的 Decoder 要逐个词生成:
第一步预测第 1 个词
第二步要等到第 1 个词出来了,才能拼接输入再预测第 2 个词
…
所以推理时是 串行的。
⚠️ 这是自回归生成的本质限制 —— 你必须知道前面生成的内容,才能预测下一个。
3. 为什么训练时可以并行?
训练和推理的机制不一样:
训练时(Teacher Forcing):
目标句子(比如 “I love you”)是已知的。
所以在 Decoder 里,我们可以把
<BOS>, I, love, you
全部喂进去,Masked Self-Attention 保证第 ttt 个位置只用到 ≤t\leq t≤t 的词。
这样,所有位置的预测(I, love, you, <EOS>)都能 一次并行算出来。
推理时:
未来的词不可知,只能等模型一步步生成。
所以必须串行。
4. 类比帮助理解
训练就像学生在做“带答案的模拟卷”——所有句子都给了,所以可以一口气学会所有位置该输出什么。
推理就像学生在考场上“现场写作文”——答案没给,只能一边写一边想。
5. 总结
Transformer 的 并行优势:主要体现在 训练阶段,大幅快于 RNN。
Transformer 的 自回归限制:在 推理阶段,仍然是串行生成。
所以实际应用中(比如 GPT 生成文本)会比较慢,需要一些技巧(比如缓存 KV、并行解码、采样优化)来加速。