Skip to content

概念卡片

Token Embedding(權杖嵌入)

將離散 token ID 映射到連續向量空間的查找表。
  • 在 microgpt 中:state_dict['wte'][token_id] — 一個形狀為 (vocab_size, n_embd) 的矩陣
  • 每個 token ID 對應一個可學習的 n_embd 維向量
  • 等同於 PyTorch 的 nn.Embedding

Positional Encoding(位置編碼)

為模型提供 token 在序列中位置的資訊。
  • 在 microgpt 中:state_dict['wpe'][pos_id] — 一個形狀為 (block_size, n_embd) 的矩陣
  • 因為 Self-Attention 是 permutation-invariant(置換不變),需要位置編碼來區分「A 在 B 之前」和「A 在 B 之後」
  • GPT-2 風格使用可學習的位置編碼(不同於 Transformer 論文的 sin/cos)

Self-Attention(自注意力)

讓序列中的每個位置都能「關注」所有其他位置的機制。
  • 計算 Query(Q)、Key(K)、Value(V)
  • 注意力權重 = softmax(QK^T / √d)
  • 輸出 = 注意力加權的 V 加總
  • 在 microgpt 中因為自迴歸生成,K 和 V 會隨時間步累積

Multi-Head Attention(多頭注意力)

將注意力分成多個子空間,每個頭學習不同類型的關係。
  • 在 microgpt 中:n_head=4head_dim=n_embd//n_head=4
  • 每個頭獨立計算注意力
  • 將所有頭的輸出 concatenate 後經過 attn_wo 線性投影
  • 不同的頭可能關注語法、語義、位置等不同面向

LayerNorm / RMSNorm(層歸一化)

對每個樣本的隱藏層進行歸一化,穩定訓練過程。

microgpt 使用 RMSNorm(Root Mean Square Normalization):

RMS(x) = sqrt(mean(x^2) + ε)
output = x / RMS(x)

比 LayerNorm 更簡單(不需減去均值),論文證明效果相當。

Feed-Forward Network(前饋神經網路)

每個 Transformer 區塊中的兩層 MLP,提供非線性變換。
  • 在 microgpt 中:n_embd → 4*n_embd → n_embd
  • 中間使用 ReLU 激活(GPT-2 使用 GeLU)
  • mlp_fc1:擴展到 4 倍維度
  • mlp_fc2:壓縮回原始維度

Transformer Block(Transformer 區塊)

由 Multi-Head Attention 和 Feed-Forward Network 組成的單一層。

microgpt 的結構(Pre-LN 變體):

x = RMSNorm(x)
x = MultiHeadAttention(x) + x  (殘差連接)
x = RMSNorm(x)
x = MLP(x) + x                 (殘差連接)

Softmax(軟最大函數)

將 logits 向量轉換為機率分佈。
python
softmax(x_i) = exp(x_i) / Σ_j exp(x_j)

microgpt 使用數值穩定版本:先減去最大值再取 exp。

Cross-Entropy Loss(交叉熵損失)

衡量預測機率分佈與真實分佈之間的差距。
  • 在 microgpt 中:loss_t = -probs[target_id].log()
  • 對於正確的目標 token,取其預測機率的負對數
  • 當預測機率接近 1 時,loss 接近 0
  • 當預測機率接近 0 時,loss 趨近無限大