Transformer 中如何实现序列到序列的映射?
- 标签:Transformer、编解码器
🏛 业务架构师
Transformer 实现 Seq2Seq(序列到序列)映射靠 Encoder-Decoder 双塔协作:
Encoder(理解侧):读入完整源序列(如英文句子),通过自注意力+FFN 逐层编码,输出一组上下文相关的表征——每个 token 的向量都融合了全句信息,形成"深度理解的源序列表示"。
Decoder(生成侧):自回归逐 token 生成目标序列,每步做两类注意力:
- 带因果遮蔽的自注意力:生成第 t 个词时只看已生成的前缀(不能偷看未来);
- 交叉注意力(Cross-Attention):Q 来自 Decoder 当前状态,K/V 来自 Encoder 输出——这是"翻译时来回看原文"的机制,每个目标词的生成都会按相关性检索源序列信息。
循环生成:起始符开始 → 预测下一个词 → 拼回输入 → 再预测……直到结束符。训练时用 teacher forcing + causal mask 并行化。
业务视角的理解:这个"理解-生成分离+交叉注意力对接"的架构就是翻译、摘要、对话这些 Seq2Seq 任务的工业标准前身。2026 年的重要演进:主流大模型(GPT 类)已简化为 Decoder-only——理解和生成都在一个塔里完成,靠因果注意力统一处理;但 Encoder-Decoder 在特定场景(机器翻译、语音识别)仍有性价比优势。做架构决策时的启示:模态转换类任务(图→文、语音→文本)的"编码器+解码器"分工思想依然活在各类多模态模型里——形式变了,思想没变。
🏗 系统架构师
Transformer 的 Seq2Seq 映射 = Encoder 编码输入序列为表示,Decoder 自回归地逐步生成输出序列(原始论文的机器翻译架构):
Encoder(理解):双向自注意力——每个源 token 看到全句,逐层聚合成上下文相关的表示("bank"在"river bank"里被编码成河岸语义)。
Decoder(生成):每层两个注意力模块:
- 带因果遮蔽的自注意力:目标序列内部,位置 i 只看 ≤i(自回归约束——训练可并行、推理逐 token);
- 交叉注意力(Cross-Attention,桥梁):Q 来自 Decoder 当前状态("我现在要生成什么"),K/V 来自 Encoder 输出("源句有什么信息")——生成每个目标词时按需检索源句相关信息。Encoder-Decoder 的信息流动全靠这一层。
解码循环(推理时):起始符 → 生成第一个词 → 拼回输入再生成下一个 → 直到结束符——每次前向的 KV Cache 复用历史计算(推理引擎的核心优化)。
训练-推理一致性:训练时 teacher forcing(喂真实前缀并行预测所有位置),因果遮蔽保证每个位置的可见性与推理时严格一致。
架构师视角的谱系演化:三大任务形态由此分叉——Encoder-only(BERT,理解类:分类/抽取/嵌入);Decoder-only(GPT/LLaMA,生成,2026 年 LLM 绝对主流——统一 next-token prediction 框架,生成和理解都塞进自回归);Encoder-Decoder(T5/翻译/摘要,输入输出长度差异大且需要对齐的任务仍有优势)。Transformer 最深的设计智慧:用一个可微分寻址机制(注意力)替代了 RNN 的固定状态传递,序列映射从此可并行、可长程。
💻 全栈开发专家
Transformer 的 Seq2Seq 映射(原版 Encoder-Decoder)分三步:
1. Encoder 压缩源序列:输入 x1...xn 经过 N 层双向自注意力编码,每个位置得到上下文相关的表示——不是压成一个向量(老 RNN seq2seq 的瓶颈),而是保留每个位置的丰富表示供 Decoder 随时查询。
2. Decoder 自回归生成:逐 token 生成 y1, y2...,每步有两类注意力:
- 带因果 mask 的自注意力:只能看已生成的部分(
y<i),防偷看未来; - Cross-Attention(关键设计):Q 来自 Decoder 当前状态,K/V 来自 Encoder 输出——每一步生成都动态「回看」源序列,翻译到哪个词就对齐源句的哪个片段(注意力权重可视化出来就是经典的对齐矩阵)。
3. 训练用 Teacher Forcing:训练时不逐步生成,而是把真实答案整体右移作为输入,并行计算所有位置的预测(配 causal mask 保证不泄题),loss 对齐每个位置的目标词——这正是 Transformer 相比 RNN 的并行训练优势的来源。
Encoder: src → [h1...hn](双向)
Decoder 每步: [已生成y<i] --self-attn--> --cross-attn(h)--> --FFN--> 下一词工程认知:现代 LLM 只保留 Decoder(自回归语言模型),Encoder-Decoder 结构活在翻译(mT5)、语音(Whisper)、代码补全(Fill-in-the-Middle 变体)等「输入输出都是序列且需要对齐」的任务里——选架构先看任务是「理解」还是「生成」还是「转换」。