Skip to content

清大 NLP 導讀 8:ELMo、BERT、T5、BART、GPT——預訓練的三條路

2026年9月30日1 分鐘
TL;DR清大高宏宇 NLP(Fall 2025)BERT and its Family 單元導讀。起點是「I record the record」:Word2Vec 和 GloVe 給兩個 record 同一個向量。ELMo 用雙向 LSTM 語言模型解決這件事。換成 Transformer 之後,預訓練分成三條路:encoder(BERT:MLM+NSP,擅長理解、不擅長生成)、encoder-decoder(T5 的 span corruption、BART 的五種雜訊)、decoder(GPT:純粹預測下一個字)。最後一段是 GPT-3 的 in-context learning 和 scaling laws,也說明 decoder 為什麼成了現在最主流的骨幹。

🌏 English version

本文依據清大高宏宇教授「自然語言處理」 Fall 2025(114-1)的公開教材。 這是清大高宏宇 自然語言處理 導讀系列的第 8 篇,上一篇是 Sub-word Tokenization。

這一講的官方材料是 W4_bert_and_its_family.pdf(58 頁),標題是「ELMo, BERT, GPT, and T5 (BERT and its Family)」,錄影是 Week 6 Tue. 和 Week 6 Thu.。2025 課表把它掛在 W6;W9 那一列的 Topics 欄雖然寫著「ELMo, BERT, GPT, and T5」,實際掛的卻是 PEFT 投影片。Topics 欄是課綱模板,本篇以實際掛的檔案為準。

投影片大綱:回顧詞向量與 RNN → 從詞向量走到預訓練語言模型(ELMo)→ 用 Transformer 預訓練(encoder 的 BERT、encoder-decoder 的 T5、decoder 的 GPT)→ GPT-3 的 in-context learning 與大型語言模型。

起點:同一個 record,兩種意思

第 6 頁的例子是「I record the record」:第一個 record 是動詞(錄),第二個是名詞(紀錄)。Word2Vec 或 GloVe 給兩者同一個向量,因為靜態詞向量不看上下文。這一講要解的就是這件事,也接回第 2 篇投影片裡出現過的 contextualized embedding。

第 8 頁用幾個填空題說明「預測下一個字」能學到多少東西:

  • 國立清華大學在 ___(新竹):世界知識
  • I put ___ bag on the table(a):文法
  • The movie was ___(bad):要讀懂前面整段在抱怨
  • 1, 1, 2, 3, 5, 8, 13, 21, ___(34):推理

ELMo:先讀完整句,再給每個字一個向量

ELMo(Embeddings from Language Models,Peters et al., 2018)不給每個字固定的表示,而是先看完整個句子,再為句中每個字產生向量。

第 9–11 頁畫出它的骨幹:字元先經過 CNN 得到 token 表示,上面疊兩層雙向語言模型(biLM),每層都有一個由左到右和一個由右到左的 RNN。

第 12–14 頁說明怎麼從 biLM 組出 ELMo 向量:

  1. 串接:每一層把 forward 和 backward 的 hidden state 接起來(token 層就和自己接)
  2. 加權:每一層乘上一個 softmax 正規化過的權重 stask
  3. 加總:加權後相加,再乘一個純量 γtask,讓下游任務模型調整整個 ELMo 向量的大小。投影片說這一步對最佳化很重要

權重是跟著下游任務學的,所以投影片的定義是:ELMo 是 biLM 中間各層表示的任務專屬組合。

公式:ELMo 的層加權(投影片第 12–14 頁)

$$\mathrm{ELMo}k^{task} = \gamma^{task} \sum{j=0}^{L} s_j^{task}, h_{k,j}^{LM},\qquad h_{k,j}^{LM} = \left[\overrightarrow{h}{k,j}^{LM};\ \overleftarrow{h}{k,j}^{LM}\right]$$

j = 0 是 token 層,j = 1…L 是 biLM 各層;stask 經過 softmax 正規化,γtask 是純量。

換成 Transformer:三種預訓練方式

第 16 頁的時間軸:2013 Word2Vec、2014 GloVe、2018 ELMo/BERT/GPT、2019 T5。Transformer 在機器翻譯上的成績讓研究者把它當成 RNN 更好的替代品。

第 17 頁是整講的主軸,把 Transformer 預訓練分成三條路:

架構投影片的描述代表
Encoder雙向,看得到後面的字;適合下游任務BERT
Encoder-decoder兩邊的優點都想要;投影片留了一個問題:預訓練時兩者都有的代價是什麼?T5、BART
Decoder之前看過的語言模型都是這種;適合生成;不是雙向GPT

第一條路:encoder(BERT)

兩個預訓練任務

第 19–21 頁介紹 BERT(Devlin et al., 2018)的兩個任務:

MLM(Masked Language Model):挑出 15% 的 token 讓模型預測,其中:

  • 80% 換成 [MASK]
  • 10% 換成隨機 token
  • 10% 保持原樣

為什麼不全部換成 [MASK]?投影片的理由是:微調時不會出現 [MASK],如果只有被遮的位置才需要認真表示,模型對沒被遮的字就會偷懶,建不出穩健的表示。

NSP(Next Sentence Prediction):輸入「[CLS] 句子 A [SEP] 句子 B」,用 [CLS] 的輸出判斷 B 是不是 A 的下一句(IsNext/NotNext)。目的是讓模型學會句子之間的關係,而且任何單語語料都能自動生成這種訓練資料。

Pretrain,再 finetune

第 22–24 頁是現在的標準做法:先用大量無標註文字預訓練出通用的語言理解模型,再針對特定任務微調。微調時只在 BERT 上加一層輸出層,例如:

  • 句子對分類:拿 [CLS] 的輸出接分類器
  • 序列標註(如 NER):每個 token 的輸出各自接分類器,輸出 O、B-PER 等標籤

第 25 頁的細節:

BERT-baseBERT-large
參數量110M340M
層數1224
隱藏維度7681024
Attention head1216

訓練資料是 BooksCorpus(8 億字)與英文維基百科(25 億字)。預訓練用了 64 顆 TPU 晶片跑 4 天,單張 GPU 做不來;微調則在單張 GPU 上就很常見。這也是 HW3 用 bert-base-uncased 做多輸出學習的前提。

BERT 的延伸

第 27 頁的對照表:

模型MLM 怎麼改NSP 怎麼改發表
BERT靜態遮罩句子關係2018/10
RoBERTa動態遮罩拿掉 NSP2019/07
SpanBERT遮連續片段拿掉 NSP2019/07
ALBERTN-gram 遮罩改成判斷句子順序2019/09
DistilBERT用知識蒸餾壓縮2019/10
TinyBERT用蒸餾做 NLU2019/09
DeBERTaDisentangled attention 加強版解碼2020/06

第 28 頁補 SpanBERT 的 Span Boundary Objective:被遮的片段裡,每個字除了照常用 MLM 預測,還要只靠片段兩側邊界的字加上位置來預測。投影片的例子是「Generative AI is [MASK] [MASK] [MASK] at NTHU」,要猜回「a NLP course」。

第 29–30 頁整理 RoBERTa 的四個改進:訓練更久、batch 更大、資料更多(超過 160GB);拿掉 NSP;用更長的序列訓練;動態遮罩,每次迭代換一種遮法。投影片的結論是:只要訓練策略對,BERT 的 MLM 目標其實很有競爭力。

第 31 頁列出 2019 年前後的領域專用 BERT:SciBERT、FinBERT、BioBERT、PubMedBERT、BlueBERT、ClinicalBERT、LegalBERT。

Encoder 的限制

第 33 頁:encoder 在各種理解任務上表現很好,但生成任務做不好。如果任務要一個字一個字往後產生,應該改用預訓練的 decoder。

第二條路:encoder-decoder(T5、BART)

T5:所有任務都是「文字進、文字出」

第 34 頁先列出 encoder-decoder 預訓練可以怎麼設計:語言模型式、BERT 式、打亂重排(deshuffling),以及幾種破壞策略(換成 mask、換掉整段、直接刪 token)。

T5(Text-to-Text Transfer Transformer,Raffel et al., Google, 2019)把分類、相似度、序列標註、生成四類任務統一成同一個格式。第 36–38 頁用同一句話比較兩種預訓練方式:

原句:Thank you for inviting me to your party last week.

輸入目標
BERT 式遮罩Thank you <M> <M> me to your party apple week整句原文
Replace spansThank you <X> me to your party <Y> week<X> for inviting <Y> last <Z>

Replace spans 把每一段連續被破壞的 token 換成一個獨特的佔位符,所以輸入和目標都變短。第 39 頁的設定是破壞 15% 的 token、平均片段長度 3;投影片也提到,破壞率在 50% 以下時結果對這兩個參數不太敏感。

第 37 頁有一句容易漏掉的話:原本為 encoder-only 模型設計的 BERT 式目標,在 T5 的比較裡被發現比其他替代做法表現更好。

第 40 頁的模型大小:

版本參數層數隱藏維度Head
T5-small60M65128
T5-base220M1276812
T5-large770M24102416
T5-3B3B24102432
T5-11B11B241024128

訓練資料是 C4(Colossal Clean Crawled Corpus,從 Common Crawl 抽出,投影片寫 340 億字)。第 41 頁示範微調成 closed-book QA:問「羅斯福哪年出生」,不給任何參考文字,T5 只能靠預訓練時學到的知識回答 1882。

BART:先弄壞,再修好

第 42–44 頁介紹 BART(Lewis et al., 2019,投影片標為 Meta)。它是 denoising autoencoder:先用任意雜訊函數把文字弄壞,再學著還原原文。五種雜訊:

雜訊做法要模型學什麼
Token Masking隨機 token 換成 [MASK]預測被遮的 token
Token Deletion隨機刪 token預測被刪的 token 和它的位置
Text Infilling像 SpanBERT,但長度 0 的片段等於插入一個 [MASK]預測一段裡少了幾個 token
Sentence Permutation依句號切句後隨機打亂釐清句子之間的關係
Document Rotation隨機挑一個 token,把文件轉成從它開始找出文件的開頭

微調時,分類任務讓 encoder 和 decoder 吃同一份輸入,取最後輸出的表示;翻譯這類生成任務,則在 BART 前面接一個新訓練的 encoder,可以用和原本不同的詞彙表。

第三條路:decoder(GPT)

第 46 頁是 GPT-1(Radford et al., 2018)的細節:12 層 Transformer decoder、117M 參數、768 維 hidden state、3072 維 feed-forward、BPE 做 40,000 次合併,訓練資料是 BooksCorpus 裡 7000 多本書,長段連續文字適合學長距離依賴。投影片還提到一個小知識:原論文裡從沒出現過「GPT」這個縮寫。

第 48 頁的預訓練任務就是預測下一個字,把整句的機率拆成一連串條件機率相乘。第 49 頁說明怎麼微調:把各種結構化輸入都轉成一串 token,後面接線性分類器。蘊含任務就是「Start 前提 Delim 假設 Extract」;多選題則把每個選項各接一次,分別過 GPT 再比較。

第 50 頁的 GPT 家族表:

模型投影片的描述參數資料發表
GPT-1Transformer decoder 接 linear-softmax117MBooksCorpus 4.5 GB2018/06
GPT-2同 GPT-1,normalization 層位置不同;文字生成時代開始1.5BWebText 40 GB2019/02
GPT-3GPT-2 的放大版175BCommonCrawl 45 TB2020/05
GPT-4用 RLHF 訓練> 1.5T未公開2023/03

GPT-4 那一列的參數量要保留看待:GPT-4 技術報告明寫不公開模型大小等架構細節,投影片的「> 1.5T」不是 OpenAI 公布的數字。

GPT-3、in-context learning 與 scaling laws

第 51–53 頁引 GPT-3 論文(Brown et al., 2020)。在這之前,和預訓練模型互動只有兩種方式:從它定義的分布抽樣,或拿任務資料微調。夠大的模型則出現一種湧現能力:不更新任何梯度,只看上下文裡給的幾個例子就能學會任務,這叫 in-context learning。1750 億參數的 GPT-3 就是例子。

第 55 頁的 scaling laws(Kaplan et al., 2020):模型大小、資料量、訓練計算量一起增加,表現就會平滑地變好,而且可以用簡單規則預測。

第 56–57 頁列出幾個大型模型與開放社群模型:GPT-3(175B)、BLOOM(176B)、Flan-PaLM(540B);Llama 2(7B/13B/70B)、Mistral(7B、8×7B)、Phi 2(2.7B)、Gemma(2B/7B),後四個都是 decoder-only。

第 58 頁的 takeaways 把三條路收成三句:BERT 家族用 MLM 和 NSP 預訓練,不擅長生成;T5 和 BART 用片段破壞強化 MLM,目標是 text-to-text 格式;GPT 家族是純語言模型,也是現在最主流的骨幹。

想深入

  • 用 transformers 的 fill-mask pipeline 載入 bert-base-uncased,輸入「I [MASK] NLP」,看前五名候選字。
  • 把「I record the record」丟進 BERT,取出兩個 record 的最後一層向量算 cosine similarity,再和 GloVe 的同一個向量比較。
  • 手寫一個 span corruption 函式:給一句話、破壞率 15%、平均長度 3,輸出 T5 格式的輸入和目標,對照第 36 頁的例子。
  • 拿任一個 decoder-only 模型,分別用 zero-shot 和 3-shot 的 prompt 做同一個分類任務,體會第 52 頁說的 in-context learning。

延伸閱讀:CS224N 導讀:預訓練、CS224U 上下文表徵 II:GPT、BERT、RoBERTa、ELECTRA、seq2seq 與蒸餾、CS224U 導讀:In-context learning、CME295 導讀:LLM 訓練。

材料缺口

  • 第 53–54 頁(GPT-3 ICL、GPT-3 family)和第 26 頁(為什麼要雙向)在投影片上是論文圖表,抽出的文字只有標題,本文沒有轉述圖中數字。
  • 這一講沒有專屬作業;BERT 的實作在下一篇的 HF BERT 助教課與 HW3,GPT-2/T5 的實作在 GPT-2/T5 中文摘要。
  • GPT-3 之後的發展(InstructGPT、RLHF)留到 GPT-3、InstructGPT 與 RLHF。
  • 解答、測驗與課堂討論在 NTU COOL,校外讀者拿不到。Fall 2026 的這一講還沒公開。

系列導覽:上一篇 Sub-word Tokenization|下一篇 HF BERT 助教課與 HW3:多輸出學習|系列總覽

參考資料