模型层 开放阅读

编码器-解码器

Encoder-Decoder

概念 ID
encoder-decoder
更新时间
2026-05-29
来源数量
待补

编码器-解码器(Encoder-Decoder)

3 秒看懂

编码器-解码器是一种将输入序列”压缩”为中间表示,再”展开”生成输出序列的两阶段神经网络架构范式。编码器负责理解输入,解码器负责生成输出,两者通过一个语义向量(context vector)或注意力机制连接。这是机器翻译、文本摘要、语音识别等”序列到序列”任务的基石架构。

输入序列 → [编码器] → 中间表示 → [解码器] → 输出序列
  "我爱你"    压缩理解     语义向量     展开生成    "I love you"

3 分钟产业解释

为什么它重要?

编码器-解码器是现代生成式AI的底层架构范式之一。理解它,才能理解:

  • T5、BART、mT5 等主流开源大模型为何如此设计
  • Whisper(OpenAI语音模型)、MarianMT(翻译)为何采用此结构
  • Transformer为何能同时支持”编码器-解码器”、“仅编码器”(BERT)、“仅解码器”(GPT)三种变体

产业位置

角色代表模型/产品架构选择
机器翻译Google Translate、DeepL、MarianMT编码器-解码器
文本摘要BART、PEGASUS编码器-解码器
语音识别Whisper(OpenAI)、Wav2Vec2+CTCWhisper:编码器-解码器;Wav2Vec2+CTC:编码器+CTC头部(解码器可选)
多模态生成Flamingo编码器-解码器变体
通用大模型GPT系列、Claude、Llama仅解码器(主流趋势)
理解型任务BERT、RoBERTa仅编码器(主流趋势)

核心洞察

当前大模型产业的主流是仅解码器(Decoder-Only)架构(GPT、Llama、Claude等),但这并不意味着编码器-解码器过时。在输入输出结构不对称的场景(如翻译、摘要、语音),编码器-解码器仍是主流选择。T5论文(Google,2019年)证明了”万物皆可Seq2Seq”的范式力量。

15 分钟专家深入

1. 架构本质:非对称的”理解-生成”范式

编码器-解码器的核心思想是将”理解”和”生成”解耦为两个独立模块,通过一个中间表示桥接:

┌─────────────────────────────────────────────────────────┐
│                    编码器-解码器架构                       │
│                                                         │
│  ┌──────────┐      ┌──────────┐      ┌──────────┐       │
│  │  输入序列  │ ──→  │   编码器  │ ──→  │ 中间表示  │       │
│  │ x₁,x₂,...│      │ Encoder  │      │   c      │       │
│  └──────────┘      └──────────┘      └────┬─────┘       │
│                                           │             │
│                                           ↓             │
│  ┌──────────┐      ┌──────────┐      ┌──────────┐       │
│  │  输出序列  │ ←──  │   解码器  │ ←──  │   c      │       │
│  │ y₁,y₂,...│      │ Decoder  │      │ 中间表示  │       │
│  └──────────┘      └──────────┘      └──────────┘       │
│                                                         │
└─────────────────────────────────────────────────────────┘

为什么需要非对称设计?

  • 翻译任务:源语言和目标语言长度通常不同
  • 摘要任务:输入长文档,输出短摘要
  • 语音识别:输入连续音频帧,输出离散文本
  • 对称架构(如BERT)无法自然处理这种长度变化

2. 三种经典实现范式

范式A:RNN-based Seq2Seq(2014-2017主导)

编码器: 多层LSTM/GRU,逐步处理输入,最终隐藏状态 h_T 作为上下文
解码器: 多层LSTM/GRU,以 h_T 为初始状态,自回归生成输出

h₀ → [RNN] → h₁ → [RNN] → h₂ → ... → h_T(编码器输出)
                                         ↓
                               c = h_T(上下文向量)
                                         ↓
s₀=c → [RNN] → s₁ → [RNN] → s₂ → ... → s_T(解码器生成)

瓶颈:信息压缩到单一向量 h_T,长序列信息丢失严重

范式B:注意力机制增强(2014-2017)

Bahdanau等人(2014年)和Luong等人(2015年)引入注意力,允许解码器动态回看编码器所有隐藏状态

解码器时刻 t 生成时:
1. 计算当前解码状态 s_t 与编码器每个状态 h_i 的相关性(注意力权重 α)
2. 加权求和得到上下文向量 c_t = Σ α_i * h_i
3. 用 c_t + s_t 预测下一个词

注意力权重计算:
  e_i = score(s_t, h_i)     # 对齐分数
  α_i = softmax(e_i)        # 归一化权重
  c_t = Σ α_i * h_i         # 上下文向量

核心改进:每个解码步骤都有独立的上下文视图,不再被单一向量瓶颈限制

范式C:Transformer Encoder-Decoder(2017-至今)

Vaswani等人(2017年)提出的Transformer完全抛弃RNN,用自注意力+交叉注意力重构编码器-解码器:

┌─────────────────────────────────────────────────────────┐
│              Transformer 编码器-解码器结构                 │
│                                                         │
│  ┌─────────────────────────────────────────────┐        │
│  │              编码器堆叠(N层)                │        │
│  │  ┌─────────────────────────────────────┐    │        │
│  │  │  自注意力(Self-Attention)           │    │        │
│  │  │  → 每个token看输入序列所有其他token   │    │        │
│  │  └─────────────────────────────────────┘    │        │
│  │  ┌─────────────────────────────────────┐    │        │
│  │  │  前馈网络(FFN)                      │    │        │
│  │  └─────────────────────────────────────┘    │        │
│  │  + 残差连接 + 层归一化                       │        │
│  └─────────────────────────────────────────────┘        │
│                         ↓                               │
│                    编码器输出 K,V                         │
│                         ↓                               │
│  ┌─────────────────────────────────────────────┐        │
│  │              解码器堆叠(N层)                │        │
│  │  ┌─────────────────────────────────────┐    │        │
│  │  │  掩码自注意力(Masked Self-Attention) │    │        │
│  │  │  → 每个token只能看已生成的token(因果)│    │        │
│  │  └─────────────────────────────────────┘    │        │
│  │  ┌─────────────────────────────────────┐    │        │
│  │  │  交叉注意力(Cross-Attention)        │    │        │
│  │  │  → Q来自解码器,K,V来自编码器输出      │    │        │
│  │  │  → 解码器"查询"编码器理解的输入信息    │    │        │
│  │  └─────────────────────────────────────┘    │        │
│  │  ┌─────────────────────────────────────┐    │        │
│  │  │  前馈网络(FFN)                      │    │        │
│  │  └─────────────────────────────────────┘    │        │
│  │  + 残差连接 + 层归一化                       │        │
│  └─────────────────────────────────────────────┘        │
│                         ↓                               │
│                     输出logits → softmax → 生成词         │
└─────────────────────────────────────────────────────────┘

关键创新点

  1. 交叉注意力(Cross-Attention) 是编码器-解码器的核心连接机制
  2. 编码器可并行处理所有输入token(相比RNN的顺序处理)
  3. 解码器虽然仍需自回归生成,但注意力机制使长程依赖建模能力显著增强

3. 与”仅解码器”架构的核心区别

维度编码器-解码器仅解码器(GPT/Llama)
输入处理独立编码器双向理解输入输入和输出拼接,单向处理
注意力类型自注意力 + 交叉注意力仅因果自注意力
参数效率输入输出参数可独立优化输入处理与生成共享参数
预训练任务去噪(T5)、span遮蔽下一token预测(NTP)
典型任务翻译、摘要、结构化生成开放式对话、代码生成
推理效率编码器一次前向,解码器自回归全程自回归(但可用KV缓存)

技术原理(最深)

核心机制详解

1. 编码器的双向注意力

编码器中每个token可以同时看到输入序列的所有位置(双向注意力),这使得模型能理解完整上下文:

输入: "The cat sat on the mat"
编码器注意力矩阵(简化示意):

          The  cat  sat  on  the  mat
    The  [ ✓    ✓    ✓   ✓   ✓    ✓  ]
    cat  [ ✓    ✓    ✓   ✓   ✓    ✓  ]
    sat  [ ✓    ✓    ✓   ✓   ✓    ✓  ]
    on   [ ✓    ✓    ✓   ✓   ✓    ✓  ]
    the  [ ✓    ✓    ✓   ✓   ✓    ✓  ]
    mat  [ ✓    ✓    ✓   ✓   ✓    ✓  ]

每个token都能聚合所有其他token的信息 → 完整语义理解

2. 解码器的因果掩码

解码器使用因果掩码(causal mask) 确保生成时只能看到已生成的token:

生成序列: ["I", "love", "you"]

解码器自注意力掩码(1=可见,0=遮蔽):

          I    love  you
    I    [ 1     0     0  ]
    love [ 1     1     0  ]
    you  [ 1     1     1  ]

第1步只看"I",第2步看"I,love",第3步看"I,love,you"
→ 保证自回归生成的因果性

3. 交叉注意力:核心连接机制

这是编码器-解码器区别于其他架构的最关键组件

交叉注意力计算:
  Q = 解码器当前层输出 × W_Q    # 查询来自解码器
  K = 编码器最终输出 × W_K      # 键来自编码器
  V = 编码器最终输出 × W_V      # 值来自编码器

  注意力权重 = softmax(Q × K^T / √d_k)
  输出 = 注意力权重 × V

物理含义:
  解码器在生成每个词时,"查询"编码器理解的输入信息
  → 生成"I"时,可能重点关注"Ich"
  → 生成"love"时,可能重点关注"liebe"
  → 生成"you"时,可能重点关注"dich"

4. Transformer编码器-解码器的完整前向计算

┌─────────────────────────────────────────────────────────────┐
│              Transformer Encoder-Decoder 前向传播             │
│                                                             │
│  输入: src_tokens = ["Ich", "liebe", "dich"]                │
│       tgt_tokens = ["", "I", "love"](训练时用teacher forcing)│
│                                                             │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ 步骤1: 输入嵌入                                      │    │
│  │   src_emb = Embedding(src_tokens) + PositionalEncoding│    │
│  │   tgt_emb = Embedding(tgt_tokens) + PositionalEncoding│    │
│  └─────────────────────────────────────────────────────┘    │
│                         ↓                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ 步骤2: 编码器处理(N层)                              │    │
│  │   for i in 1..N:                                     │    │
│  │     src_emb = MultiHeadSelfAttention(src_emb)        │    │
│  │     src_emb = LayerNorm(src_emb + residual)          │    │
│  │     src_emb = FFN(src_emb)                           │    │
│  │     src_emb = LayerNorm(src_emb + residual)          │    │
│  │   encoder_output = src_emb                           │    │
│  └─────────────────────────────────────────────────────┘    │
│                         ↓                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ 步骤3: 解码器处理(N层)                              │    │
│  │   for i in 1..N:                                     │    │
│  │     # 3a. 掩码自注意力(只看已生成token)              │    │
│  │     tgt_emb = MaskedMultiHeadSelfAttn(tgt_emb)       │    │
│  │     tgt_emb = LayerNorm(tgt_emb + residual)          │    │
│  │                                                      │    │
│  │     # 3b. 交叉注意力(查询编码器输出)← 核心!         │    │
│  │     Q = tgt_emb × W_Q                                │    │
│  │     K = encoder_output × W_K                         │    │
│  │     V = encoder_output × W_V                         │    │
│  │     cross_out = MultiHeadAttention(Q, K, V)          │    │
│  │     tgt_emb = LayerNorm(tgt_emb + cross_out)         │    │
│  │                                                      │    │
│  │     # 3c. 前馈网络                                    │    │
│  │     tgt_emb = FFN(tgt_emb)                           │    │
│  │     tgt_emb = LayerNorm(tgt_emb + residual)          │    │
│  │   decoder_output = tgt_emb                           │    │
│  └─────────────────────────────────────────────────────┘    │
│                         ↓                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ 步骤4: 输出投影                                      │    │
│  │   logits = decoder_output × W_vocab + b              │    │
│  │   next_token = argmax(softmax(logits))               │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  输出: "you"(然后拼接到tgt_tokens,重复直到生成)       │
└─────────────────────────────────────────────────────────────┘

关键参数量分析(以T5-Base为例估算)

T5-Base 配置估算:
  - 编码器层数: 12层
  - 解码器层数: 12层
  - 隐藏维度: 768
  - 注意力头数: 12
  - FFN中间维度: 3072 (4×隐藏维度)

参数量分布估算:
  - 词嵌入: V × d = 32128 × 768 ≈ 25M
  - 每层编码器:
      自注意力 Q/K/V/O: 4 × 768 × 768 ≈ 2.4M
      FFN: 2 × 768 × 3072 ≈ 4.7M
      层归一化等: ≈ 0.003M
      小计: ≈ 7.1M/层
  - 每层解码器:
      掩码自注意力: ≈ 2.4M
      交叉注意力: ≈ 2.4M  ← 额外参数
      FFN: ≈ 4.7M
      层归一化等: ≈ 0.003M
      小计: ≈ 9.5M/层(比编码器多~2.4M)

  - 编码器总计: 12 × 7.1M + 25M ≈ 110M
  - 解码器总计: 12 × 9.5M + 25M ≈ 139M
  - 总参数量: ≈ 249M(官方标称220M,含共享嵌入等因素)

注: 解码器每层比编码器多一个交叉注意力模块

推理时的KV缓存优化

┌─────────────────────────────────────────────────────────────┐
│                    KV缓存优化示意                             │
│                                                             │
│  问题: 解码器每生成一个token,都要重新计算所有token的K,V      │
│        → 计算量随生成长度平方增长                             │
│                                                             │
│  解决: KV缓存(Key-Value Cache)                             │
│                                                             │
│  第1步生成 "I":                                              │
│    计算 , "I" 的 K,V,存入缓存                            │
│                                                             │
│  第2步生成 "love":                                           │
│    只计算 "love" 的 Q(新token)                             │
│    从缓存读取 , "I" 的 K,V(不重新计算)                  │
│    注意力计算: Q_love × [K_, K_I]^T                       │
│    更新缓存: 添加 K_love, V_love                             │
│                                                             │
│  第3步生成 "you":                                            │
│    只计算 "you" 的 Q                                         │
│    从缓存读取 , "I", "love" 的 K,V                       │
│    更新缓存...                                              │
│                                                             │
│  效果: 每步计算量从O(t)降到O(1),推理速度显著提升            │
│                                                             │
│  注意: 编码器侧的KV只需计算一次,全程复用                     │
└─────────────────────────────────────────────────────────────┘

技术演进史

时间线

2014.09  Sutskever等: Seq2Seq(LSTM编码器+LSTM解码器)
         → 首次证明端到端神经机器翻译可行性
         → 瓶颈: 单一向量信息压缩

2014.09  Bahdanau等: 注意力机制(Attention)
         → 解码器动态回看编码器所有状态
         → 解决长序列信息丢失问题

2015.06  Luong等: 简化注意力变体(Global/Local Attention)
         → 工程化优化,更易实现

2017.06  Vaswani等: Transformer ("Attention is All You Need")
         → 完全抛弃RNN,纯注意力架构
         → 引入多头注意力、交叉注意力
         → 成为现代NLP基石

2018.10  BERT(仅编码器)、GPT-1(仅解码器)
         → 架构分裂:编码器-解码器 vs 仅解码器 vs 仅编码器
         → 预训练范式兴起

2019.10  T5(Google): "Text-to-Text Transfer Transformer"
         → 万物皆可Seq2Seq,统一为文本到文本
         → 编码器-解码器的巅峰代表

2019.10  BART(Facebook): 去噪自编码器
         → 结合BERT的双向编码和GPT的自回归解码

2020.05  GPT-3: 仅解码器架构在大规模下展现涌现能力
         → 产业重心开始转向仅解码器

2022.09  Whisper(OpenAI): 编码器-解码器用于语音识别
         → 证明该架构在多模态领域仍有生命力

2022.11  ChatGPT: 仅解码器成为大模型主流
         → 编码器-解码器退居特定任务

2023-24  混合架构探索(如Jamba: Mamba+Transformer混合)
         → 编码器-解码器与新架构的融合仍在演进

演进主线

RNN Seq2Seq → +注意力 → Transformer Encoder-Decoder → 分化为三大范式
                                                        │
                          ┌─────────────────────────────┼─────────────────┐
                          ↓                             ↓                 ↓
                     仅编码器                       编码器-解码器      仅解码器
                     (BERT)                          (T5/BART)        (GPT)
                          ↓                             ↓                 ↓
                    理解型任务                    翻译/摘要等        大模型主流
                    分类/NER/问答                 不对称任务          对话/生成

技术路线对比

三大架构范式量化对比

维度仅编码器 (BERT)编码器-解码器 (T5)仅解码器 (GPT/Llama)
注意力类型双向自注意力双向(编码)+因果(解码)+交叉因果自注意力
输入处理双向理解双向理解(编码器)单向(与输出拼接)
生成能力❌ 无✅ 自回归生成✅ 自回归生成
预训练目标MLM(遮蔽语言模型)去噪/span预测NTP(下一token预测)
参数效率仅编码器参数编码+解码参数(约2倍)单组参数
推理效率一次前向(无生成)编码一次+解码自回归全程自回归
source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型