A Visual Guide to Frontier Model Architectures
← → 方向鍵切換章節 · 點下方圓點快速跳轉 ↓
影像生成的革命
影像理解的進化
LLM 的效率革命
聲音 + 全局視野
語言模型每跨出一步,都會在所有候選的下一個字之間做機率分配。溫度 temperature把 logits 除以 T 再做 softmax。T→0 幾乎只挑最高分(貪婪);T 越大分布越平坦,輸出越隨機、越有創意。 控制它有多「大膽」。拖動滑桿,看看同一組分數如何變成不同的選字傾向:
T 低 → 保守(幾乎只選最高分);T 高 → 有創意(分布更平均)
想像你拿一張清晰的照片,往上面慢慢撒鹽巴,撒了一千次之後,整張照片變成純粹的雜訊。Diffusion 在做的事情,就是「學會把這個過程倒帶回去」。
每一步加一點高斯噪聲,經過 $T=1000$ 步後,任何圖片都會變成純噪聲:
$$x_t = \sqrt{\bar\alpha_t} \cdot x_0 + \sqrt{1 - \bar\alpha_t} \cdot \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, I)$$其中 $\bar\alpha_t = \prod_{s=1}^{t} \alpha_s$ 是累積保留率。$t$ 越大,原始訊號越少,噪聲越多。
訓練一個神經網路 $\varepsilon_\theta(x_t, t)$ 來預測加在圖片上的噪聲:
$$\mathcal{L} = \mathbb{E}_{t, x_0, \varepsilon}\left[ \|\varepsilon - \varepsilon_\theta(x_t, t)\|^2 \right]$$就是個簡單的 MSE loss!模型學會了「看到 $t$ 時刻的雜訊圖,預測裡面藏的噪聲是什麼」。
DDPM 使用 U-Net 作為去噪網路。U-Net 是 Encoder-Decoder 結構加上 skip connectionsEncoder 壓縮圖片時會丟掉高頻細節(邊緣、紋理)。Skip connection 直接把 Encoder 各層的高頻資訊「捷徑」傳給 Decoder 對應的層,確保細節不遺失。。
時間步 $t$ 透過 sinusoidal embeddingemb(t) = [sin(t/10000^(0/d)), cos(t/10000^(0/d)), ...] 跟 Transformer 的 positional encoding 一樣的公式,經過兩層 MLP 後加進 U-Net 每一層。 注入網路。
同時訓練有條件和無條件的去噪,推理時混合兩者:
$$\varepsilon_{\text{guided}} = \varepsilon_{\text{uncond}} + w \cdot (\varepsilon_{\text{cond}} - \varepsilon_{\text{uncond}})$$$w=1$ 正常生成,$w=7.5$ 是 Stable Diffusion 的預設值。
| 模型 | 改進 | 效果 |
|---|---|---|
| DDIM | 非 Markov 過程,可以跳步 | 1000 步壓到 50 步,速度提升 20 倍 |
| Latent Diffusion | 先用 VAE 壓縮到 latent space | 256×256×3 → 32×32×4,運算省 48 倍 |
拖動滑桿觀察噪聲如何覆蓋一隻像素貓。$t=0$ 是原始圖,$t=1000$ 是純噪聲。
點擊畫布可更換噪聲種子
用 diffusers 載入 stable-diffusion-v1-5,印出 $t=0, 250, 500, 750, 999$ 的雜訊圖。
from diffusers import DDPMScheduler
import torch
scheduler = DDPMScheduler(num_train_timesteps=1000)
for t in [0, 250, 500, 750, 999]:
noise = torch.randn_like(x0)
x_t = scheduler.add_noise(x0, noise, torch.tensor([t]))Q: Diffusion Model 的訓練 loss 是什麼?
傳統物件偵測需要 anchor boxes + NMS 後處理,非常複雜。DETR 用 Transformer 做端到端偵測:輸入圖片,直接輸出所有物體的類別和位置。
CNN Backbone → Transformer Encoder → Decoder(含 100 個 Object Queries100 個可學習向量。每個 query 透過 cross-attention 問 image features「你在哪裡?你是什麼?」,並透過 self-attention 跟其他 query 互相協調。)→ FFN heads → N 組 (class, bbox)
100 個 query 每個都是 256 維的隨機初始化向量。訓練後:query #1 可能「負責」偵測圖片中央的大物體,query #47 可能專門找右下角的小物體。
透過 cross-attention 去「查看」image features,再透過 self-attention 互相協調。
100 個預測要跟真實物體配對。用 Hungarian AlgorithmO(n³) 複雜度的最佳化演算法。把 100 個預測和真值做一對一最佳配對。 找到 cost 最低的一對一配對。
NMS 有幾個問題:
Hungarian matching 保證每個 GT 恰好配對一個 prediction。
左邊是模型預測,右邊是 Ground Truth。連線顯示最佳配對結果。
使用 scipy.optimize.linear_sum_assignment 實作簡易 Hungarian matching。
U-Net 不太 scale。Transformer 有 proven scaling laws — 加大就會變強。那為什麼不把 Diffusion 的骨幹從 U-Net 換成 Transformer?
Latent (32×32×4) → Patchify把 latent map 切成 P×P 的 patch,每個 patch 攤平成一個 token。P=2 時,32×32 → 16×16 = 256 個 tokens。 (P=2) → 256 tokens → + Positional Embedding → Transformer Block × N → Predicted noise
DiT 用 adaLN-ZeroCondition(時間步 + class label)生成 γ, β, α 來控制 LayerNorm。Zero-init 讓初始狀態等同 identity mapping。 將條件資訊注入 Transformer。
調整 patch size,觀察 token 數和 attention cost 如何變化。
Patch 2×2 → Token count: 256 → Attention cost: O(65,536)
實作 patchify 函式:輸入 (B, C, H, W) tensor 和 patch_size P,輸出 (B, N, P²C) 的 token 序列。
Q: DiT 相比 U-Net 的主要優勢是什麼?
一個基底模型,使用者透過「提示」(點、框、文字)告訴它要分割什麼。就像 GPT 用 prompt 控制輸出,SAM 用 visual prompt 控制分割。
每次預測輸出 3 個候選 masks,對應不同粒度。
11M 張圖片,1.1B 個 masks。史上最大的分割資料集。
SAM 2 改用 Hiera(分層式 ViT),比 ViT-H 更快更小。
當物體被遮擋時,Memory Attention 可以跨過遮擋幀,直接 attend 到遮擋前的特徵。
點擊場景中的物體,觀察 SAM 如何即時生成分割遮罩。
點擊物體來分割 · Mask Decoder: ~10ms
用 segment-anything 套件載入 SAM ViT-B,對一張圖片分別用「點」和「框」做提示。
如何把 visual embeddings 連接到 LLM 的 token space?三種主要方法:
CLIP ViT-L/14 → 576 個 image tokens → MLP Projector(2 層 FC + GELU)→ LLM 空間
兩階段訓練:
256 個可學習 query → Cross-Attention → 256 個壓縮後 visual tokens → LLM
想像圖書館比喻:256 個筆記格去書架找最相關的書來做摘要。
所有模態從頭一起訓練,混在一起做 next-token prediction。
| 方法 | 代表 | 優點 | 缺點 |
|---|---|---|---|
| MLP 投影 | LLaVA | 簡單易訓練 | 吃 context window(576 tokens/圖) |
| Cross-Attention | Qwen-VL | token 數可控(256) | 訓練更複雜 |
| 原生統一 | Gemini | 端到端,最完整 | 計算量極大 |
使用 transformers 載入 LLaVA-1.5-7B,輸入一張圖片問「描述這張圖片」。
不要每次都叫所有人上工,只叫「相關的專家」就好。Mixtral 8×7B:8 個專家中每次啟動 2 個。總參數 47B,但每個 token 只跑 13B。
Self-Attention(共享)→ Router一個 linear layer + softmax,輸入 token embedding,輸出每個 expert 的機率。選 top-2 expert 加權求和。(linear + softmax)→ top-2 Experts(各是一個 FFN)→ 加權求和輸出
Mixtral 8×7B:每個 expert ~5.6B,8 個 = 44.8B + attention ~2B = 46.7B 總參數。每 token 只經過 2 個 expert + attention = ~13B active params。
DeepSeek V3:256 experts,每 token 啟動 8 個。
每個 token 下方的色點代表被分配到的 2 個 expert
8 個 expert 的使用率。點「Route batch」隨機路由一批 tokens,觀察 load balance。
點擊 Route batch 開始模擬
實作一個簡易 Router:輸入 (batch, seq_len, d_model),輸出 top-2 expert indices 和 weights。加入 load balancing loss。
Q: MoE 架構中 auxiliary loss 的目的是什麼?
Transformer 的 self-attention 是 O(n²) 的計算量和記憶體。序列長度翻倍,成本就翻四倍。能不能做到 O(n)?
連續形式:
$$h'(t) = Ah(t) + Bx(t), \quad y(t) = Ch(t)$$離散化後(ZOH):
$$h_t = \bar{A} h_{t-1} + \bar{B} x_t, \quad y_t = C h_t$$訓練時像 CNN(平行計算):可轉成 convolution kernel。
推理時像 RNN(線性時間):O(1) per step。
原始 SSM 的 A, B, C 是固定的。Mamba 讓 $B, C, \Delta$ 都依賴輸入:
想像你在聽一場演講,大腦會自動過濾掉填充詞,但關鍵結論會特別記住。Mamba 的 Selective Scan 做同一件事。
Transformer:透過 attention 直接「翻到」KV cache 中任意位置。
Mamba:只有固定大小的 state,100 頁全壓縮在一頁筆記裡。
當前趨勢:Hybrid 架構。Jamba = 80% Mamba + 20% Attention。
輸入文字,觀察 hidden state(8 維)如何隨 token 輸入而更新。
輸入文字後觀察 state 如何變化
實作最簡單的 SSM:A=-1, B=1, C=1,逐步計算 output。畫出 hidden state 隨時間的變化。
把 query 和 key 向量切成 2 維一組,每組在複平面上旋轉 $m\theta$ 角度:
$$q_m \cdot k_n = q^T R_{n-m} k$$內積只依賴相對位置 $(n-m)$!
頻率組:高頻捕捉短距離關係,低頻捕捉長距離關係。
問題不在計算量,在記憶體搬運(IO):
標準 attention 要把 n×n matrix 寫到 HBM,IO 是計算的 12 倍瓶頸。
解法:Tiling + Online Softmax
Hover 一個 token,觀察它對其他 token 的 attention 強度(越深色 = 越高 attention)。
將滑鼠移到任一 token 上
調整序列長度,比較 Standard Attention vs FlashAttention 的 HBM 使用量。
Standard: O(n²) HBM | Flash: O(n) HBM
角度 = 0 × θ = 0°
實作 RoPE:給定 d_model=64, 位置 m,計算旋轉後的 query 向量。驗證 $q_m \cdot k_n$ 只跟 $|m-n|$ 有關。
Q: FlashAttention 為什麼能加速?
68 萬小時弱監督資料。不靠精心標註,而是靠海量的「大概對」的網路字幕。量變造成質變。
30s 音訊 chunks → Log-Mel Spectrogram(80 mel × 3000 frames)→ 2 層 Conv1D(stride=2 → 1500 frames)→ Encoder Transformer → Decoder(帶 special tokens)
<|startoftranscript|><|en|><|transcribe|><|notimestamps|> Hello world...
同一個模型可以做:語音辨識、翻譯、語言偵測、時間戳記對齊。
一個模型搞定:ASR、S2TT、T2TT、T2ST、S2ST
w2v-BERT encoder + NLLB encoder → 共享語意空間 → Text Decoder + T2U + HiFi-GAN vocoder
HuBERT / w2v-BERT → k-means 聚類 → 離散語音 token
把連續的音訊波形轉成離散的「語音字母」,就能像處理文字一樣處理語音。
Whisper(語音→文字)→ GPT-4(文字→文字)→ TTS(文字→語音)
延遲:2.8 - 5.4 秒。中間轉文字時,丟失了所有聲音特徵。
單一 Transformer,所有模態都是 tokens,端到端處理。延遲:232 - 320 ms。
保留 paralinguistic features語言之外的聲音特徵:音高、節奏、能量、語氣、停頓。轉成文字時會完全丟失。:音高、節奏、能量。可以唱歌、模仿口音、表達情緒。
2B 參數,self-supervised pretrain + small-data fine-tune 策略。
| 公司 | 模型 | 核心策略 |
|---|---|---|
| OpenAI | Whisper + GPT-4o | 弱監督 → 原生多模態 |
| Meta | SeamlessM4T | 統一架構,多任務一體 |
| Chirp 3 / USM | Self-supervised pretrain |
$\alpha \approx 0.076$,$\beta \approx 0.095$,$C \approx 6ND$
Loss 隨模型大小 N 和資料量 D 呈冪律下降。
參數量每增加 10×,loss 下降約 16%。這個 power law 跨了 6 個數量級都成立。
C ≈ 6ND:forward ≈ 2ND,backward ≈ 4ND,總共 ≈ 6ND FLOPs。
70B 模型每次推理需 ~140GB、~80ms。8B 只需 ~16GB、~15ms。即使多花 10× 訓練成本,部署幾個月就回本。
N 和 D 應等比例增長。最佳:~20 tokens/param。
GPT-3 欠訓練了! 175B × 300B = 1.7 tokens/param。Chinchilla:70B × 1.4T = 20 tokens/param。
Llama 3-8B:15T tokens = 1875 tokens/param。推理時省成本。
| 類型 | 代表 | 做法 |
|---|---|---|
| Pretrain Scaling | Kaplan / Chinchilla | 加大 N 和 D |
| Inference Scaling | o1 / R1 | 推理時 CoT thinking |
| Data Scaling | Phi-3 | Synthetic data |
Loss ≈ 2.85 | Chinchilla ratio: 20 tokens/param ✓
Q: Chinchilla optimal 的 tokens/param 比例大約是多少?
| 世代 | 方式 | 代表 | 特點 |
|---|---|---|---|
| 第一代 | Cascade | Whisper→GPT→TTS | 各模組獨立,會丟資訊 |
| 第二代 | Bolted-on | LLaVA, Qwen-VL | 用 projector 把視覺掛上 LLM |
| 第三代 | Native | GPT-4o, Gemini | 所有模態 token 混合訓練 |
把這些架構當成你工具箱裡的工具。你不需要全部精通,但下次看到新論文時,你能說出「啊,這就是 DiT + MoE + RoPE 的組合」。那就夠了。