Agentic Research
首頁/學習/Transformer 架構理解 — Attention Is All You Need

Transformer 架構理解 — Attention Is All You Need

2026/05/017 分鐘Bryan Chan最後更新 2026/05/01
這篇屬於學習主題LLM

先讀這些

這篇文章在學習路徑上假設你已經讀過下列內容。

為什麼要有 Transformer?

在 Transformer 出現之前,序列建模主要依賴 RNN / LSTM / GRU。這些架構有一個根本問題:無法並行化。每一步計算都依賴前一步的隱藏狀態,導致訓練速度極慢。

2017 年,Google 發表了《Attention Is All You Need》,提出一個完全基於 Attention 機制的架構,徹底解決了這個問題。

Self-Attention 機制

Self-Attention 的核心思想很簡單:讓序列中的每個 token 都能直接「看到」其他所有 token。

計算過程:

  1. 對每個輸入 token 生成三個向量:Query (Q)、Key (K)、Value (V)
  2. 計算 Q 和所有 K 的點積相似度 → 得到 Attention Score
  3. 用 Softmax 歸一化 → 得到 Attention Weight
  4. 對所有 V 加權求和 → 得到輸出
Attention(Q, K, V) = softmax(QK^T / √d_k) V

除以 √d_k 是為了防止點積過大導致 Softmax 梯度消失。

上面四步是文字版的描述。下面這張圖用一個具體的四 token 句子(「我 喜歡 讀 書」)把同一件事畫出來 —— 中間那張 n×n 的方格就是注意力權重矩陣,你可以逐步看每一格是怎麼算出來的。

Transformer 一層內部:注意力是怎麼算出來的流程圖:四個 token(我、喜歡、讀、書)先各自變成 embedding 向量,再投影成 Q、K、V 三組向量。每個 token 的 Q 與其他所有 token 的 K 做點積,得到一張 n×n 的原始分數表;除以 √d_k 縮放後過 softmax,變成每列加總為 1 的注意力權重;再用這些權重對 V 做加權加總。之後接殘差相加與 LayerNorm、前饋網路、再一次殘差與 LayerNorm,得到這一層的輸出。因為每個 token 都對所有 token 算分數,矩陣是 n×n,所以序列長度加倍會讓計算量變四倍。圖中權重為示意值。注意力計算(這一層的核心)我喜歡讀書每個 token → 一個 embedding 向量Q查詢K鍵V值同一組向量,三個不同的投影我喜歡讀書我喜歡讀書6111252111351243這個矩陣是整張圖的重點:每個 token 對所有 token各算一個分數→ 這就是「自」注意力權重 × V → 加權加總一層的其餘部分殘差相加 + LayerNorm把原輸入加回來前饋網路 FFN逐 token 各自處理殘差相加 + LayerNorm這一層的輸出這樣的層堆疊很多層上一層的輸出=下一層的輸入矩陣是 n×n:序列長度加倍,計算量變四倍這就是長上下文昂貴的根本原因
1/9輸入:四個 token
模型看到的不是字,是 token。這裡用一個四 token 的句子當例子。
第 1 步,共 9 步 輸入:四個 token
圖:Transformer 一層內部的完整流程。左欄是注意力計算,右欄是這一層剩下的部分(殘差、LayerNorm、前饋網路)。矩陣中的權重為示意值,重點在「每個 token 都對所有 token 各算一個分數」這件事。

Multi-Head Attention

與其做一次 Attention,不如做多次(多個 head),每個 head 關注不同的特徵:

  • 有些 head 關注語法關係
  • 有些 head 關注語義關聯
  • 有些 head 關注位置鄰近

每個 head 的結果拼接後再做一次線性變換。

Positional Encoding

因為 Attention 本身不關心位置(它是「無序」的),需要額外注入位置信息。原始論文使用正弦/餘弦函數:

PE(pos, 2i)   = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

從 Transformer 到 GPT

GPT 的本質就是 Transformer Decoder-only 架構:

  • 只使用 Masked Self-Attention(只看左側上下文)
  • 通過 Next Token Prediction 進行自回歸生成
  • 規模化後湧現出強大的語言能力

實際應用場景

場景一:機器翻譯系統 Transformer 最初用於德英翻譯。假設你要翻譯 "The cat sat on the mat" 為德語,Self-Attention 讓每個英文詞都能直接關聯到德語對應詞,即使語序完全不同(德語動詞常放在句末)。每個 head 關注不同層面:語法結構、詞性、位置關係。

場景二:程式碼生成(GPT 系列) 當你輸入 "寫一個 Python 函數來排序列表",GPT 的 Masked Self-Attention 讓每個生成的 token 都能看到之前所有已生成的代碼。這就是為什麼 LLM 能生成語法正確的代碼,它在每一步都「回顧」了完整的上下文。

操作演示:用 Python 實現 Self-Attention

import torch
import torch.nn.functional as F

def self_attention(Q, K, V, d_k):
    # Q, K, V 形狀: [batch_size, seq_len, d_model]
    scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(d_k)
    attention_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attention_weights, V)
    return output

# 測試:2 個句子,每個 5 個 token,模型維度 64
Q = torch.randn(2, 5, 64)
K = torch.randn(2, 5, 64)
V = torch.randn(2, 5, 64)
output = self_attention(Q, K, V, d_k=64)
print(output.shape)  # torch.Size([2, 5, 64])

推薦閱讀

在這條路徑上的下一步