模型層 開放閱讀

編碼器-解碼器

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 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型