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:
Post a Comment