✦ Lecture 2 · NLP Fundamentals
2024 · WEEK 02
從序列模型到 Transformer

From Sequence
Models to Transformers

RNN · LSTM · ELMo · Self-Attention · BERT · GPT · Multimodal
Prof. Lecture Notes
Deep Learning for NLP · 90 min
Lec.02 / 14
Why · 為什麼

為什麼
語言這麼難?

① 記住
人讀一句話的時候,會把前面看過的字放在腦袋裡。
② 預測
然後依靠這些記憶,猜下一個字最有可能是什麼。
這堂課,就是在講機器怎麼學會做這兩件事 — 而且花了我們十年。
02
Lec.2 — Sequence to Transformers
Agenda · 大綱

今天的路線圖

PART 01
RNN
序列怎麼建模、為什麼會忘記。
PART 02
LSTM
GRU
用「門」控制記憶與遺忘。
PART 03
ELMo
同一個字,不同情境,不同意思。
PART 04
Transformer
+ Attention
不再 sequential — 一次看全部。
PART 05
BERT/GPT
Multimodal
理解 vs 生成,跨模態的延伸。
✦ 中間穿插數學 + code,但每一段都會講人話。
03
Foundations · 基礎

什麼是序列?

簡單講就是 — 順序有意義的資料。換個位子,意思就變了。
一句話的字
一段語音波形
一首歌的音符
$
一段股價的走勢
EXAMPLE · 例子
狗咬人

人咬狗
字一模一樣,順序不同,新聞價值差一萬倍。
04
Foundations · Tokenization

第一步:把文字切成 token

模型不吃文字,吃數字。所以要先把句子拆成小單元 — token,再對應到 ID。
unbelievable
↓ BPE
un
believ
able
↓ vocab lookup
2473 8910 1042
三種主流策略
Word
每個字一個 token。簡單,但 vocab 爆炸,OOV 嚴重。
Character
每個字元一個 token。沒有 OOV,但序列超長。
Subword (BPE / WordPiece)
折衷方案,GPT、BERT 都用。常見字保留,罕見字拆解。
04b
Foundations · Embedding

Token ID → 向量空間

每個 token ID 對應一個高維向量。意思相近的字,在空間中也會靠近。
king
man
queen
woman
cat
dog
king − man + woman ≈ queen
這就是著名的 Word2Vec 例子 — 向量加減反映語意關係。
高維空間 (300 ~ 4096 維) 才是模型「理解」的真正載體。
04c
Part 01 · RNN
MODEL · 模型 #01

RNN
Recurrent Neural Network

想像你在讀一本書 — 每讀一個字,腦袋裡的「理解」就更新一次。
RNN 做的事一模一樣:
新的字舊的記憶混起來,得到新的記憶。
CORE LOOP · 核心迴圈
h memory · 記憶 x new word y prediction loop · 自己接自己
ht = tanh( Wx·xt + Wh·ht-1 )
05
Part 01 · RNN

把它展開來看

同一組參數 W,在每個 timestep 重複用一次。句子多長,模型多大都不變。
x₁ x₂ x₃ x₄ x₅ h₁ h₂ h₃ h₄ h₅ W W W W y₁ y₂ y₃ y₄ y₅
✦ 注意每一格的 W 是同一個 — 這叫 weight sharing
06
Part 01 · RNN · In Motion

動畫:看 RNN 一個字一個字

每個 timestep:讀一個 token,更新 hidden state。下方長條代表 hidden state 在 8 個維度上的「能量分布」。
INPUT TOKENS · 依序讀入
HIDDEN STATE h_t
06b
Part 01 · RNN · Problem

但 RNN 有個致命傷

梯度反向傳播時,要連續乘很多次小於 1 的數。
VANISHING 0.9 × 0.9 × 0.9 × ... × 0.9 ≈ 0
句子越長,前面的字對結果的影響就趨近於零。模型根本學不到長距離依賴。
✦ 一句話講到尾,RNN 已經忘了開頭。
GRADIENT MAGNITUDE
t=10
t=8
t=6
t=4
t=2
t=0
越往前梯度越小 — 前面學不到
07
Part 01 · RNN · Why It Forgets

訊號從尾端傳回去,越走越弱

Backprop Through Time (BPTT):梯度要逆著時間傳。每經過一格,乘一次 W,如果 ‖W‖ < 1 → 指數衰減。
x₁
x₂
x₃
x₄
x₅
L
← gradient travels backwards · 強度 ∝ Wⁿ
VANISHING
‖W‖ < 1 → 0.9¹⁰⁰ ≈ 10⁻⁵
梯度趨近 0,前面的層學不到任何東西。
EXPLODING
‖W‖ > 1 → 1.1¹⁰⁰ ≈ 14000
梯度爆炸,參數狂飆,訓練炸裂 (NaN)。
07b
Part 02 · LSTM
MODEL · 模型 #02

LSTM.

Long Short-Term Memory · 長短期記憶
f
Forget Gate
決定忘掉什麼。
i
Input Gate
決定記住什麼。
o
Output Gate
決定輸出什麼。
三個門就像水龍頭,開大開小都是模型自己學的。
08
Part 02 · LSTM · Math

公式長相 — 看就好,不用背

ft = σ(Wf·[ht-1, xt] + bf)
it = σ(Wi·[ht-1, xt] + bi)
t = tanh(WC·[ht-1, xt] + bC)
Ct = ft ⊙ Ct-1 + it ⊙ C̃t
ot = σ(Wo·[ht-1, xt] + bo)
ht = ot ⊙ tanh(Ct)
KEY INSIGHT · 關鍵
看到中間那條黃色高亮的式子嗎?

Cell state 用「+」更新,不是「×」。
加法 → 梯度可以一路傳回去
記得遠的東西
✦ 這個「加法 highway」是 LSTM 全部的精神。
09
Part 02 · LSTM · Gates In Motion

三道水龍頭 — 模型自己學要開多大

Sigmoid 輸出 0~1 之間的值,就像水閥。0 = 完全關掉,1 = 全開。每個 timestep 動態調整。
FORGET GATE
ft = σ(Wf · [h, x])
「舊記憶要保留多少?」
INPUT GATE
it = σ(Wi · [h, x])
「新訊息要寫入多少?」
OUTPUT GATE
ot = σ(Wo · [h, x])
「要對外輸出多少?」
09b
Part 02 · GRU

GRU — LSTM 的瘦身版

LSTM
forget input output
3 個門 · 參數多 · 表達力強
大資料、追求效能 → 用 LSTM
GRU
reset update
2 個門 · 參數少 · 訓練快
資料不大、想跑快 → 用 GRU
實務上,效能差不多。2017 之後 → 兩個都被 Transformer 取代。
10
Part 03 · ELMo
CONTEXT · 情境的崛起

ELMo.

Embeddings from Language Models · 2018
BEFORE · 以前
Word2Vec / GloVe — 一個字 = 固定一個向量
"river bank" → [0.3, ...]
"bank account" → [0.3, ...]
↑ 兩個 bank 一模一樣 ❌
ELMo · 之後
雙向 LSTM 同時看前文 + 後文
"river bank" → [0.7, ...]
"bank account" → [-0.2, ...]
↑ context-dependent ✓
11
Bridge · 2014 · Seq2Seq

在 Attention 之前 — Seq2Seq

Sutskever 2014:用兩個 RNN 串起來做翻譯。Encoder 把整句壓縮成一個向量,Decoder 從這個向量解出目標語言。
ENCODER → CONTEXT VECTOR → DECODER
<eos> Encoder · 編碼器 c context vector I love you <eos> Decoder · 解碼器 ⚠ 整句壓進一個固定向量 → 長句訊息流失
✦ 這個 bottleneck 就是 Bahdanau 在 2015 年用 Attention 解掉的問題。
11b
Bridge · 2015 · Bahdanau

Attention 最早的形式

Bahdanau 2015:Decoder 每生一個字,都「重新看一次」整個 source。不再依賴單一 context 向量。
三步驟思路
  1. Score — Decoder 當前狀態與每個 encoder hidden state 算相似度
  2. Softmax — 把分數歸一化成 attention weights α
  3. Weighted sum — α 加權的 context 向量,當作 decoder 的補充輸入
αij = softmax( score(si, hj) )
ci = Σ αij · hj
這個「每步動態查整個輸入」的想法,兩年後被 Vaswani 推到極致 → Self-Attention。
11c
━━━━ PART 04 · THE TURNING POINT

Attention
is
all you need.

Vaswani et al., 2017 · 過去十年最重要的一篇論文
12
Part 04 · Attention

Attention 的直覺

讀到「it」的時候,你會在腦袋裡掃前文 — 自動聚焦到某個字上。
The
0.05
animal
0.74 ★
didn't
0.08
cross
0.04
the
0.03
street
0.06
it
QUERY
✦ "it" 自動指向 "animal" — 每個字都和其他字算相關度
13
Part 04 · Self-Attention

核心公式 — 三件事而已

SELF-ATTENTION Attention(Q, K, V) = softmax( QKᵀ / √dk ) V
① 相似度
QKᵀ
每個 Query 跟每個 Key 算內積。
② 正規化
softmax(·)
轉成機率分布,加總 = 1。
③ 加權和
·V
用權重去取 Value 的混合。
Q / K / V = Query / Key / Value · 像查字典:用 Query 找最像的 Key,拿出對應的 Value
14
Part 04 · Q · K · V

動畫:Q · KT · V 的矩陣流

每個 token 的 embedding 經三組權重 WQ、WK、WV,投影出三組向量。然後 Q × KT → softmax → × V。
Q · QUERY
×
KT · KEY
SCORES → softmax
×
V · VALUE
attention 矩陣對角線最亮 = 每個 token 最關注自己;非對角線 = 跨位置依賴
14b
Part 04 · Code

用 5 行 PyTorch 寫出來

# self-attention in 5 lines
Q = x @ W_q                        # ① project to Query
K = x @ W_k                        # ② project to Key
V = x @ W_v                        # ③ project to Value
scores = (Q @ K.T) / sqrt(d_k)     # ★ similarity
out    = softmax(scores) @ V      # ★ weighted sum
★ 兩個重點行
紅色那行 — 算所有 token 兩兩之間的相似度。
綠色那行 — 用相似度當權重,把 V 混在一起。
✦ √dk 是為了讓內積
不要爆炸 → softmax 才不會一面倒。
15
Part 04 · Multi-Head

Multi-Head — 多個視角合在一起

H₁
關注
語法關係
H₂
關注
語意相近
H₃
關注
指代關係
H₄
關注
位置鄰近
concat
MultiHead(Q,K,V) = Concat(head₁, ..., headh) Wᴼ
原始論文用 8 個 head · GPT-3 用 96 個 · 越多越能看到不同面向
16
Part 04 · Multi-Head · In Motion

多個 head 分頭學、合起來

每個 head 看不同的關係維度 — 語法、語意、指代、距離。最後 concat,再線性投影,得到統一輸出。
語法
語意
指代
距離
concat → WO
✦ 原始論文 8 heads · BERT-base 12 heads · GPT-3 96 heads
16b
Part 04 · Architecture

整體架構

ENCODER × N
Multi-Head Attention
↓ Add & Norm
Feed-Forward
↓ Add & Norm
把輸入編成 context-aware 表示
DECODER × N
Masked Multi-Head Attn
Cross-Attn (從 Encoder)
Feed-Forward
一邊看 Encoder · 一邊 generate 下一個字
✦ 一個 block 套很多層 → 後面所有 GPT/BERT/T5 都是這個架構的變形。
17
Part 04 · Block Internals

Block 內部:三個無名英雄

Self-Attention 是主角,但是這三個東西沒了 — Transformer 根本訓不起來。
RESIDUAL · 殘差連結
x + Sublayer(x)
原始輸入直接「跳線」加回輸出。讓梯度有條高速公路,深層也訓得動。
LAYERNORM · 層歸一化
(x − μ) / σ · γ + β
每層輸出都被「拉回」常態分布。穩定訓練,加速收斂。
FFN · 前饋網路
Linear → GELU → Linear
attention 後再過兩層 MLP,加非線性。LLM 大部分的參數都在這裡。
✦ Attention 在「混合資訊」,FFN 在「處理資訊」,Residual + LN 在「保護梯度」。
17b
Part 04 · Positional Encoding

但...順序怎麼辦?

Transformer 一次看全部 → 不知道誰前誰後。要手動加位置資訊進去。
SINUSOIDAL PE PE(pos, 2i) = sin( pos / 100002i/d )
PE(pos, 2i+1) = cos( pos / 100002i/d )
不同維度用不同頻率 — 模型能學到相對位置關係。
後來的變形:Learned PE(BERT)、RoPE(LLaMA)、ALiBi
VISUAL · 不同頻率的波
dim 0 · high freq dim 2 dim 4 dim 6 · low freq
18
Part 05 · BERT
ENCODER-ONLY · 2018 · GOOGLE

BERT.

Bidirectional Encoder Representations from Transformers
TRAINING TRICK · MLM
隨機遮住 15% 的字,讓模型猜回來。
自然語言[MASK]理是
我最喜歡的課

→ predict: 處
模型必須同時看左邊和右邊才能猜對 → 學會了真正的雙向 context。
BERT 出來那天,所有 NLP benchmark 一夜被屠榜。
從此 fine-tuning 成為主流。
19
Part 05 · GPT
DECODER-ONLY · OPENAI · 2018→

GPT.

Generative Pre-trained Transformer
訓練目標超簡單 — 給定前面的字,猜下一個字
"我最喜歡吃" → ?
prob:
火鍋 0.42
牛肉麵 0.31
蛋餅 0.12
GPT-1
117M params · 2018
GPT-2
1.5B params · 2019
GPT-3
175B params · 2020 · in-context learning
GPT-4
~1.8T (估計) · 2023 · emergent abilities
越大越聰明 — scaling 才是真正的魔法。
20
Part 05 · BERT · MLM

Masked Language Model — 填空遊戲

隨機把 15% 的 token 蓋掉,讓模型從雙向 context 猜出來是什麼。
The cat sat on the [MASK] .
model predicts →
mat
0.62
floor
0.18
chair
0.07
sofa
0.03
19b
Part 05 · GPT · Autoregressive

Next-Token Prediction — 一次猜一個

只看左邊 (causal mask),預測下一個 token 的機率分布。然後 sample 出來,再餵回去。
CONTEXT
深度學習很
→ predict next token
有趣
0.41
0.32
0.15
0.04
✦ sample → append → repeat。整個 LLM 就是這個迴圈,做幾兆次。
20b
Part 05 · Three Paradigms

三種使用範式的演進

從 task-specific 訓練 → 預訓練 + 微調 → prompting。每一代都讓門檻降一截。
~2017
From Scratch
每個任務從零訓練一個專屬模型。需要大量標註資料,通常幾十萬筆。
label cost · 高
2018 ~ 2020
Pretrain + Fine-tune
在大語料 pretrain 一次,各任務只 fine-tune 幾千筆即可達 SOTA。BERT 帶起來的範式。
label cost · 中
2020 ~ now
Prompting / ICL
一個大模型就解所有事,只要寫 prompt。few-shot example 直接放在 input 裡,不更新參數。
label cost · 接近 0
20c
Part 05 · Compare

兩條路線 — 理解 vs 生成

BERT
雙向 · Encoder only
Masked LM 訓練
擅長:分類 / NER / QA
用法:fine-tuning
GPT
單向 · Decoder only
Next-token prediction
擅長:對話 / 寫作 / 翻譯
用法:prompting
✦ 現在 GPT 系勝出 — 任何任務都能變成 next-token prediction。
21
Part 05 · Scaling Laws

規模 = 能力 — Scaling Laws

Kaplan 2020 / Chinchilla 2022:loss 與 模型大小、資料量、運算量,呈乾淨的幂律關係
LOSS vs COMPUTE (log-log)
Compute (FLOPs, log scale) Loss GPT-1 GPT-2 GPT-3 PaLM GPT-4
L(N) ∝ N−α
N = 模型大小;α ≈ 0.076。每加 10 倍參數,loss 約降 19%。
CHINCHILLA 法則
每個參數應該配 ~20 個訓練 token。否則花了算力卻學不滿。
21b
Part 05 · Emergent

Emergent Abilities — 突現能力

某些能力,小模型完全做不到 → 過了某個規模門檻,「啪」一下出現。不是線性成長,是相變。
CHAIN-OF-THOUGHT
「Let's think step by step」
小於 ~100B 參數 → 完全沒效果。大於門檻 → 數學/推理大幅提升。
IN-CONTEXT LEARNING
「給幾個範例,直接學」
不用更新參數,只在 prompt 裡放幾個 example,就能 generalize。
INSTRUCTION FOLLOWING
「聽得懂自然語言指令」
配合 RLHF / instruction tuning,模型能照人類意圖回應。
TOOL USE
「會自己呼叫 API」
大模型能學會在對話中決定何時查資料、跑程式、呼叫工具。
21c
Part 05 · Multimodal

Transformer 不只處理文字

圖片、音訊、影片 — 全部都能塞進同一套架構。
ViT
把圖片切成 16×16 patch,
每個 patch 當成一個 token。
CLIP
圖片跟文字對齊到
同一個 embedding 空間。
Whisper
語音 → 梅爾頻譜 →
Transformer 做語音辨識。
✦ 不同模態,共用同一套架構 — Transformer 真的是萬能武器。
22
Part 05 · In The Wild

這套架構在現實世界長什麼樣

不是只活在 paper 裡。Transformer 已經滲透到你每天用的工具。
01
對話助理
ChatGPT · Claude · Gemini · 用 GPT-style decoder + RLHF
02
寫程式
Copilot · Cursor · Codex 系列,把 code 當作另一種語言。
03
搜尋 / RAG
用 embedding 把文件 index,LLM 當 reasoning 引擎。
04
語音 / 翻譯
Whisper · NLLB · Seamless,一套 Transformer 通吃多語言。
05
影像生成
DALL-E · Stable Diffusion · Sora,Diffusion + Transformer backbone。
06
蛋白質結構
AlphaFold 把 amino acid 序列當作 token,結構預測獲諾貝爾獎。
07
推薦系統
把使用者行為當 sequence,Transformer 預測下一個會點什麼。
08
Agents
LLM + tools + memory loop,自動化 workflow,正在爆發。
22b
Recap · 回顧

我們今天走過的時間軸

2014
RNN
序列建模
2015
LSTM
解決遺忘
2017
Transformer
一次看全部
2018
ELMo / BERT
理解 context
2020
GPT-3
scaling 為王
2023+
Multimodal
跨模態
每一步都站在前一步的肩膀上,解決前一步的痛點。
23
Homework · 作業

回去做這三件事

01
RNN 文字分類
手刻一個簡單 RNN,跑情感分析。
感受 sequential processing。
~ 100 lines
02
Mini Self-Attention
用 PyTorch 寫一個 single-head attention,
視覺化 attention map。
~ 50 lines
03
BERT Fine-tuning
用 HuggingFace 拉 BERT,
fine-tune 一個下游任務。
~ Colab notebook
Deadline · 兩週後 · 有問題 Slack 我或來 office hour
Thanks!
24