2017-Transformer#
案件摘要#
2017 年 6 月,Google Brain 與 Google Research 的八位作者——Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan Gomez、Łukasz Kaiser、Illia Polosukhin——在 arXiv 投下一份大膽的起訴書:《Attention Is All You Need》(NeurIPS 2017)。被告是統治序列建模二十年的循環網路:RNN 的順序計算讓 GPU 無法平行運轉,是效率之罪。他們的破案宣言是:序列建模不需要循環、也不需要卷積,注意力就夠了。證據是 Transformer 在 WMT14 英德翻譯上以 BLEU 28.4 打破紀錄,且訓練僅需 12 小時——用不到前紀錄系統幾分之一的算力。
前因 -- 為什麼會有這個案子#
- RNN/LSTM 的隱狀態 \(h_t\) 依賴 \(h_{t-1}\) ,計算本質上順序執行,GPU 大量時間在等待,無法用資料平行換取規模。
- ConvS2S(Gehring 等,2017)用卷積實現可平行訓練,但長距離依賴需要堆疊多層才能讓兩個遠距詞「相見」,路徑長度 O(log n)。
- Self-Attention 已嶄露頭角:Cheng 等(2016)與 Parikh 等(2016)證明注意力本身可承擔表示任務、不需 RNN。
- Jakob Uszkoreit 提出用自注意力取代整個遞迴的想法,團隊目標是證明「注意力就夠了」。
線索與推理 -- 數學式、程式、理論#
線索一:Scaled Dot-Product Attention#
查詢 \(Q\) 、鍵 \(K\) 、值 \(V\) 皆為矩陣。注意力是「用 \(Q\) 去比對 \(K\) 、再按相似度加權 \(V\) 」:
線索二:為什麼要除以 sqrt(d_k)#
設 \(q, k \in \mathbb{R}^{d_k}\) 各分量獨立、均值 0、方差 1,則點積方差隨維度線性增長:
未縮放的大點積會把 softmax 推入飽和區、梯度趨近於零;除以 \(\sqrt{d_k}\) 使方差回到 1,維持 softmax 梯度健康。
線索三:Multi-Head Attention#
單頭注意力平均化了所有資訊。多頭把 \(d_{\text{model}}\) 切成 \(h\) 個子空間,各頭獨立做注意力再拼接:
Transformer 用 \(h=8\) 、 \(d_k = d_v = d_{\text{model}}/h = 64\) :每個頭在不同子空間學不同的語義關係(語法依賴、指代、鄰近性),是子空間的平行語義。
線索四:Sinusoidal 位置編碼#
注意力本身對順序無感(置換等變),必須注入位置資訊:
每個位置是不同頻率正弦波的組合,且 \(PE_{pos+k}\) 可表示為 \(PE_{pos}\) 的線性函數,讓模型容易學到相對位移。
線索五:殘差連接與 LayerNorm#
每個子層(注意力或前饋網路)外包裹殘差連接(He 等,2016)與層正規化(Ba 等,2016):
殘差讓梯度直通頂層,深層堆疊(base/big 皆 6 層)才得以穩定訓練。
線索六:複雜度對比——可平行性即證據#
| 模型 | 每層複雜度 | 順序操作 | 兩點間路徑長度 |
|---|---|---|---|
| RNN | \(O(nd^2)\) | \(O(n)\) | \(O(n)\) |
| ConvS2S | \(O(knd + nd^2)\) | \(O(1)\) | \(O(\log_k n)\) |
| Self-Attention | \(O(n^2 d)\) | \(O(1)\) | \(O(1)\) |
Self-Attention 每層計量 \(O(n^2 d)\) 較 RNN 貴,但順序操作為 \(O(1)\) ——所有位置同時計算,GPU 全程滿載。任何兩個詞一層即相見,長距離依賴直接破解。「可平行性 = 可擴展性」成為工程哲學。
程式碼:numpy 手刻 mini self-attention(含多頭拼接)#
import numpy as np
np.random.seed(0)
n, d_model, h = 6, 32, 4 # 序列長 6、模型維度 32、4 個頭
d_k = d_v = d_model // h # 每頭 8 維
X = np.random.randn(n, d_model) # 輸入表示(已含位置編碼)
def attn(Q, K, V):
E = Q @ K.T / np.sqrt(Q.shape[-1]) # scaled dot-product
E = E - E.max(axis=-1, keepdims=True) # 數值穩定
A = np.exp(E); A /= A.sum(axis=-1, keepdims=True)
return A, A @ V
heads, mats = [], []
for i in range(h): # 每頭獨立的 Q/K/V 投影
Wq = np.random.randn(d_model, d_k) / np.sqrt(d_model)
Wk = np.random.randn(d_model, d_k) / np.sqrt(d_model)
Wv = np.random.randn(d_model, d_v) / np.sqrt(d_model)
A, O = attn(X @ Wq, X @ Wk, X @ Wv) # self-attention:Q=K=V 來自 X
heads.append(O); mats.append(A)
W_O = np.random.randn(h * d_v, d_model) / np.sqrt(h * d_v)
out = np.concatenate(heads, axis=-1) @ W_O # 多頭拼接後投影
print("輸出形狀:", out.shape) # (6, 32),與輸入同形,可再堆一層
print("頭 0 注意力矩陣(第 i 行是位置 i 對全句的分佈):")
np.set_printoptions(precision=2, suppress=True)
print(mats[0])
輸出與輸入同形,代表可以無限堆疊殘差層;每個頭的注意力矩陣各自捕捉不同的詞-詞關係,這正是 multi-head 的意義。Big 模型(6 層、 \(d_{\text{model}}=512\) 、8 頭)在 WMT14 英德達 BLEU 28.4,超過所有先前最佳系統(含集成模型),且訓練 3.5 天中最後 12 小時的算力即超過前紀錄系統的全部訓練量;英法 41.8 亦為單模型新紀錄。
結案 -- 後果與影響#
- Transformer 成為語言模型的統一架構:BERT(2018)、GPT 系列(2018-)、GPT-3、GPT-4、Claude、Gemini、LLaMA 全是 Transformer 或其變體。
- Vision Transformer(Dosovitskiy 等,2020)把同一架構搬到影像,證明「注意力就夠了」跨域成立。
- 「可平行性 = 可擴展性」成為深度學習的工程哲學:先讓訓練可平行,再讓規模說話。
- 八位作者後續:Aidan Gomez 創立 Cohere;Llion Jones 的論文圖 1 視覺化成為被引用最多的架構圖之一;Jakob Uszkoreit 被視為想法發起者;Shazeer 持續改良(含 GShard/MoE)。
關鍵人物與文獻#
- Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin (2017). Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762.
- Jonas Gehring et al. (2017). Convolutional Sequence to Sequence Learning. ICML 2017. arXiv:1705.03122.
- Jianpeng Cheng, Li Dong, Mirella Lapata (2016). Long Short-Term Memory-Networks for Machine Reading. EMNLP 2016. arXiv:1601.06733.
- Ankur P. Parikh, Oscar Täckström, Dipanjan Das, Jakob Uszkoreit (2016). A Decomposable Attention Model for Natural Language Inference. EMNLP 2016. arXiv:1606.01933.
- Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun (2016). Deep Residual Learning for Image Recognition. CVPR 2016.
- Jimmy Lei Ba, Jamie Ryan Kiros, Geoffrey E. Hinton (2016). Layer Normalization. arXiv:1607.06450.