Appearance
概念卡片
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=4,head_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 趨近無限大