【LLM #2】LLM 跟 Encoder / Decoder 的關係 — 為什麼主流 LLM 都是 decoder-only?

整理 Transformer 的三種變形(encoder-only / decoder-only / encoder-decoder),以及為什麼主流 LLM 都選 decoder-only。

前言

寫完上一篇 【LLM #1】什麼是 LLM 後,
我腦中其實冒出一個蠢問題:

欸,Transformer 原本不是有 encoder 跟 decoder 嗎?
那現在 LLM 都去哪了?為什麼大家講 GPT 都說它是「decoder-only」?
那 encoder 是不是失業了? 🫠

查了一下發現這題其實滿多人搞不清楚的,
於是就順手整理成筆記給自己 XD。
(我還是菜,如果有地方寫錯歡迎糾正!)

Transformer 的原始長相(2017 版)

先來個老派的回憶。2017 年那篇著名的「Attention is All You Need」,
原始 Transformer 架構其實不是為了 chatbot 設計的,它是為了機器翻譯

所以它天然長成這樣:

[輸入句子]  →  Encoder  →  (壓縮後的語意表示)  →  Decoder  →  [輸出句子]

「I love cats」  →  Encoder  →  [...向量...]  →  Decoder  →  「我愛貓」
  • Encoder:把輸入句吃進去、理解它、壓成一堆向量
  • Decoder:參考 encoder 給的向量,一個字一個字生出來

用白話比喻:

  • Encoder 像是「閱讀理解」的人:讀完整段,抓到意思
  • Decoder 像是「寫作」的人:參考理解好的結果,一邊寫一邊看自己已經寫了什麼

Encoder 跟 Decoder 的關鍵差異

兩邊都用 attention 機制,但注意力的「看法」不同:

特性EncoderDecoder
注意力方向雙向(可看前後所有字)單向(只能看已生成的前文)
典型任務理解、分類、embedding生成、續寫
訓練目標填空題(mask 掉某個字讓它猜)接龍(預測下一個字)
輸出結果一堆向量(高維語意表示)一連串 token(看得懂的文字)

Decoder 只能看「過去」這件事非常重要
因為它要模擬「一邊寫一邊決定下一個字」的過程,
不能作弊偷看答案(未來的字),才不會在真的 inference 時失靈。

後來 Transformer 被拆成三個家族

慢慢地,大家發現「不一定要 encoder + decoder 一起用」,
不同任務適合不同變形:

家族代表模型擅長的事
Encoder-onlyBERT理解類任務:分類、情感分析、命名實體辨識 (NER;從句子抓出人名、地名、公司名)、語意搜尋
Decoder-onlyGPT 系列、Claude、Llama、Qwen、Gemini生成類任務:寫作、對話、程式碼
Encoder-DecoderT5、BART、原始 Transformer明確的「輸入→輸出」轉換:翻譯、摘要

順帶一提(知道會更好,這篇不展開):

  • BERT 後來有 RoBERTa、DeBERTa 等變形,訓練策略微調後效果通常更好
  • T5 / BART 則是 encoder-decoder 在 LLM 時代的代表作,聊三大家族時常被一起提

Encoder-only:閱讀理解專家

BERT 就是代表,2018 出來那時超有名。
這類模型不會自己生東西,你丟一段文字進去,它還你一組向量,
你再接一個小小的 classifier 去做分類。

  • 適合:句子分類、情感分析、命名實體辨識 (NER)、語意搜尋
  • 不適合:要生成一段話(要逼它做會很痛苦)

Decoder-only:一直接龍的模型

這是 GPT、Claude、Llama 的家族。
它的訓練方式很「暴力美學」:看到 N 個字,猜第 N+1 個字

就這樣用全世界的文字練上幾千億次後,它就學會了語言。

  • 適合:幾乎所有語言任務(只要會轉成「給我接下去寫」的形式)
  • 不適合:(好像沒什麼不適合的?這就是它贏的原因 XD)

Encoder-Decoder:原汁原味派

T5、BART 這類。明確區分「輸入」和「輸出」。

  • 適合:有明確 source → target 的任務,例如翻譯、摘要、文法糾正
  • 不適合:開放式對話(因為它習慣「轉換」而不是「延續」)

為什麼現在主流 LLM 都是 decoder-only?

這是我一開始最想不通的點。既然 encoder 這麼擅長理解,
為什麼不用 encoder-decoder 來做 LLM?答案大概有三層:

1. 一把刀切所有東西:prompt 就能扮演 encoder

Decoder-only 的 prompt 前半段,其實就在做 encoder 的工作。

舉個例子:

請把下面這段英文翻成中文:
I love cats.

模型在讀「請把下面這段英文翻成中文」+「I love cats」的時候,
就等於在做理解(等同 encoder 的工作);
讀完後開始輸出「我愛貓」,這才是生成(decoder 的工作)。

換句話說,decoder-only 是把 encoder 跟 decoder 合併成同一個東西。
一個模型就能做「理解 + 生成」,不用養兩套。

2. Scaling 友善:參數集中在一邊

Encoder-decoder 要維持兩邊的連結(cross-attention),
架構比較複雜,也不太好擴展到超大規模。

Decoder-only 架構單純:一個 stack 堆到底
scaling law 的實驗也更好做,這在「大就是好」的 LLM 時代是硬優勢。

3. In-context learning 是意外大禮

OpenAI 在 GPT-3 發現一件超威的事:

只要在 prompt 裡塞幾個範例,
decoder-only 模型就能「臨時學會」新任務,
不用重新訓練 — 這就是 few-shot / in-context learning。

這個能力基本上只有 decoder-only 做得到,
而這個能力又徹底改變了 LLM 的使用方式(prompt engineering 就是從這時開始熱門的)。

那 encoder 是不是就失業了?

並沒有 XD。Encoder 在 2026 年依然活得好好的,只是分工變了:

  • Search / RAG 系統裡的 embedding:用 encoder 把文件變向量做語意搜尋,這塊 encoder 還是主力(生產環境常見的 embedding 模型如 OpenAI 的 「text-embedding-3-large」、開源的 「bge-m3」,底層都是 encoder)。
  • 輕量的分類任務:BERT 家族在生產環境依然很常見,因為便宜、快、夠用。
  • 專門的翻譯 / 摘要系統:encoder-decoder 架構(T5、BART)依然有優勢。

只是在「通用對話 AI」這個最吸睛的戰場,decoder-only 勝出了。
就像內燃機跟電動車 — 不是內燃機不會動,是電動車在主流乘用市場贏了。

小結

整理完這題,我自己的一點小心得:

  • Encoder 跟 decoder 是「工具差別」不是「好壞差別」
  • Decoder-only 贏了是因為它「夠泛用」,不是因為它「最強」

這讓我想起寫程式時的老話:

能用少的組件解決的問題,就不要硬加架構。

Decoder-only 用一個 stack 解決「理解 + 生成」兩件事,
架構簡單、scaling 容易、prompt 就能切換任務 —
在「什麼都要做」的大語言模型時代,這組特性真的太加分。

Reference

使用 Hugo 建立
主題 StackJimmy 設計