前言
寫完上一篇 【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 機制,但注意力的「看法」不同:
| 特性 | Encoder | Decoder |
|---|---|---|
| 注意力方向 | 雙向(可看前後所有字) | 單向(只能看已生成的前文) |
| 典型任務 | 理解、分類、embedding | 生成、續寫 |
| 訓練目標 | 填空題(mask 掉某個字讓它猜) | 接龍(預測下一個字) |
| 輸出結果 | 一堆向量(高維語意表示) | 一連串 token(看得懂的文字) |
Decoder 只能看「過去」這件事非常重要,
因為它要模擬「一邊寫一邊決定下一個字」的過程,
不能作弊偷看答案(未來的字),才不會在真的 inference 時失靈。
後來 Transformer 被拆成三個家族
慢慢地,大家發現「不一定要 encoder + decoder 一起用」,
不同任務適合不同變形:
| 家族 | 代表模型 | 擅長的事 |
|---|---|---|
| Encoder-only | BERT | 理解類任務:分類、情感分析、命名實體辨識 (NER;從句子抓出人名、地名、公司名)、語意搜尋 |
| Decoder-only | GPT 系列、Claude、Llama、Qwen、Gemini | 生成類任務:寫作、對話、程式碼 |
| Encoder-Decoder | T5、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 就能切換任務 —
在「什麼都要做」的大語言模型時代,這組特性真的太加分。