Tuesday, November 4, 2025

Transformer 架構

 

Transformer 架構完整解析

🏗️ 整體架構概述

核心設計思想

Transformer 完全基於自注意力機制,摒棄了傳統的循環和卷積結構,實現了完全并行化的序列處理。

兩種主要變體

text
編碼器-解碼器架構:原始 Transformer(用於機器翻譯)
僅編碼器架構:BERT、RoBERTa(用於理解任務)
僅解碼器架構:GPT系列、LLaMA(用於生成任務)

🔧 核心組件詳解

1. 輸入表示 (Input Representation)

Token Embedding

python
# 將離散token轉換為連續向量
token_embedding = Embedding(vocab_size, d_model)

位置編碼 (Positional Encoding)

python
# 正弦余弦位置編碼(原始Transformer)
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

# 現在更常用的旋轉位置編碼 (RoPE)
# 在注意力計算中注入相對位置信息

2. 多頭自注意力 (Multi-Head Self-Attention)

注意力計算公式

text
Attention(Q, K, V) = softmax(QKᵀ/√dₖ)V

其中:
Q = 查詢矩陣 (Query)
K = 鍵矩陣 (Key) 
V = 值矩陣 (Value)
dₖ = 鍵向量的維度

多頭機制

python
# 將注意力拆分為多個頭
head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O

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

兩層全連接網路

text
FFN(x) = max(0, xW₁ + b₁)W₂ + b₂

現代變體

python
# SwiGLU 激活函數(現在更常用)
FFN(x) = (Swish(xW₁) ⊙ xW₂)W₃

🎯 編碼器架構

編碼器層結構

text
輸入 → 多頭自注意力 → Add & Norm → 前饋網路 → Add & Norm → 輸出
     ↓              ↓           ↓
   殘差連接       殘差連接     層歸一化

具體組件

殘差連接 (Residual Connection)

python
# 防止梯度消失,促進深度網路訓練
output = LayerNorm(x + Sublayer(x))

層歸一化 (Layer Normalization)

python
# 沿特徵維度歸一化
LayerNorm(x) = γ * (x - μ) /(σ² + ε) + β

🚀 解碼器架構

解碼器層結構

text
輸入 → 掩碼多頭注意力 → Add & Norm → 交叉注意力 → Add & Norm → 前饋網路 → Add & Norm → 輸出

關鍵特性

掩碼自注意力

python
# 防止看到未來信息(自回歸生成)
# 通過注意力掩碼實現
mask = torch.tril(torch.ones(seq_len, seq_len))
attention_scores = attention_scores.masked_fill(mask == 0, -1e9)

編碼器-解碼器注意力

python
# Query來自解碼器,Key和Value來自編碼器
# 讓解碼器關注相關的輸入信息

⚡ 高效注意力變體

1. 稀疏注意力

python
# 只計算部分位置的注意力
- 局部注意力:相鄰位置
- 全局注意力:保留少量全局位置
- 隨機注意力:隨機選擇位置

2. 線性注意力

python
# 通過核函數近似實現線性複雜度
LinearAttention(Q, K, V) = ϕ(Q)(ϕ(K)ᵀϕ(V))

3. 分塊注意力

python
# 將注意力計算分塊進行
# 減少記憶體使用,支持更長序列

🔄 訓練與優化

訓練配置

python
# 原始論文的超參數
d_model = 512          # 模型維度
d_ff = 2048           # 前饋網路隱藏層維度
h = 8                 # 注意力頭數量
num_layers = 6        # 編碼器和解碼器層數
dropout = 0.1         # 隨機失活率

優化策略

python
# Adam優化器 with 熱啟動
optimizer = Adam(β₁=0.9, β₂=0.98, ε=1e-9)
lr = d_model^(-0.5) * min(step_num^(-0.5), step_num * warmup_steps^(-1.5))

🎨 現代改進與變體

1. 預層歸一化 (Pre-LayerNorm)

python
# 現代標準:歸一化在子層之前
x = x + Sublayer(LayerNorm(x))  # 原始:後歸一化
x = LayerNorm(x + Sublayer(x))  # 現代:前歸一化(更穩定)

2. 旋轉位置編碼 (RoPE)

python
# 在注意力中注入相對位置信息
# 現在大語言模型的標準配置

3. 門控機制

python
# 加入門控提高表現力
gated_attention = σ(W_g * x) ⊙ Attention(Q, K, V)

💡 為什麼Transformer如此成功?

計算優勢

text
并行性:整個序列同時處理,而非順序處理
長距離依賴:直接連接任意兩個位置,無需多步傳播
計算效率:矩陣操作充分利用硬件加速

建模優勢

text
全局上下文:每個位置都能看到整個序列
多頭機制:同時關注不同類型的依賴關係
可擴展性:容易擴展到更大規模和更多數據

🌐 實際應用示例

機器翻譯(原始應用)

python
# 編碼器處理源語言,解碼器生成目標語言
encoder_output = encoder(source_tokens)
decoder_output = decoder(target_tokens, encoder_output)

文本生成(僅解碼器)

python
# 自回歸生成,一次生成一個token
for i in range(max_length):
    output = decoder(input_ids)
    next_token = sample(output[:, -1, :])
    input_ids = torch.cat([input_ids, next_token], dim=-1)

文本分類(僅編碼器)

python
# 使用[CLS]標記的表示進行分類
outputs = encoder(input_ids)
cls_embedding = outputs[:, 0, :]  # [CLS]位置
logits = classifier(cls_embedding)

🔮 未來發展方向

效率優化

  • 稀疏專家模型:MoE架構(如DeepSeek-V2)

  • 狀態空間模型:Mamba等替代架構

  • 量化壓縮:低精度推理

能力擴展

  • 多模態Transformer:處理圖像、音頻、視頻

  • 推理增強:結合符號推理和邏輯推理

  • 世界模型:理解和預測物理世界

Transformer架構奠定了現代大語言模型的基礎,其設計理念繼續影響著AI領域的發展方向!



No comments: