AI 工程從零開始|Phase 1 Part 1:線性代數與微積分 — AI 演算法直覺

大多數工程師:「我會呼叫 model.fit(),數學交給論文作者就好。」 資深 AI 工程師:「我需要知道梯度為什麼爆炸、Loss 為什麼不收斂、為什麼換個 optimizer 差了 3 倍速度。」 前者能跑範例,後者能解問題。 數學不是門檻,是你除錯和優化的第一把鑰匙。


面試情境

你正在為一個推薦系統訓練 Embedding 模型。訓練第 5 個 epoch 後 loss 突然從 0.8 跳到 NaN,GPU 使用率正常、資料沒問題。請問你會從哪些數學角度切入診斷?你會如何用線性代數和微積分的知識判斷根本原因並修復?


一、核心問題:為什麼 AI 工程師必須懂數學

很多人進入 AI 領域的第一印象是:「PyTorch / TensorFlow 已經幫你做好了,直接呼叫 API 就好。」這個觀點在 demo 階段是對的,但在 production 階段會讓你的除錯能力幾乎為零。

現實場景中會遇到的問題:

  • Loss 收斂到一個局部最小值,但業務指標沒有改善 → 你需要理解 Loss landscape 的幾何形狀
  • Gradient Explosion:第 N epoch 後 loss 變成 NaN → 你需要理解梯度的數值行為
  • 模型推論速度比預期慢 10 倍 → 你需要理解矩陣運算的複雜度與硬體加速原理
  • 換了一個 optimizer 後訓練曲線震盪變大 → 你需要理解各 optimizer 的動量機制
  • 加了 L2 regularization 後模型卻更 overfit → 你需要理解正則化的數學含義

這些問題沒有辦法靠 Stack Overflow 直接解決,因為症狀背後的原因需要數學直覺才能定位。

本篇覆蓋的數學範疇:

數學領域在 AI 中的對應概念實際影響
線性代數向量空間、矩陣乘法、特徵值模型參數表示、前向傳播效率
微積分偏微分、鏈式法則反向傳播、梯度計算
向量微積分梯度、Jacobian、HessianOptimizer 設計、收斂分析
數值方法浮點精度、數值穩定性避免 NaN、overflow 問題

二、三個演進階段:數學知識如何隨工程深度演進

AI 工程師的數學需求不是一次性的,而是隨著工程深度遞增的。以下三個階段對應不同的業務規模與工程挑戰。

Phase 1(POC / < 10K 筆訓練資料)

┌─────────────────────────────────────────────────────────┐
│                   Phase 1:POC 階段                      │
│                                                         │
│  ┌──────────────┐    ┌──────────────┐                   │
│  │  黑盒呼叫    │───▶│  觀察 Loss   │                   │
│  │  model.fit() │    │  曲線        │                   │
│  └──────────────┘    └──────────────┘                   │
│                                                         │
│  數學需求:                                              │
│  • 向量 / 矩陣基本運算概念                               │
│  • 理解 Loss function 的輸出含義                         │
│  • 知道 learning rate 是什麼                             │
│                                                         │
│  可接受的捷徑:                                          │
│  • 直接用預設 Adam optimizer                             │
│  • 不需手寫反向傳播                                      │
│  • Loss = CrossEntropy 直接套用                          │
└─────────────────────────────────────────────────────────┘

新增組件: 基礎 API 呼叫、預設超參數 問題: 無法解釋訓練失敗的原因、無法針對性優化


Phase 2(MVP / 10K–200K 筆資料,< 1M 參數)

┌─────────────────────────────────────────────────────────┐
│                   Phase 2:MVP 階段                      │
│                                                         │
│  ┌──────────────┐    ┌──────────────┐    ┌───────────┐  │
│  │  資料前處理  │───▶│  模型架構    │───▶│  梯度監控 │  │
│  │  標準化/歸一 │    │  調整        │    │  Clip/Log │  │
│  └──────────────┘    └──────────────┘    └───────────┘  │
│                             │                           │
│                             ▼                           │
│                    ┌──────────────┐                     │
│                    │  超參數搜尋  │                     │
│                    │  LR / Batch  │                     │
│                    └──────────────┘                     │
│                                                         │
│  數學需求:                                              │
│  • 理解矩陣乘法複雜度與 batch size 的關係               │
│  • 能讀懂梯度範數 (gradient norm) 曲線                  │
│  • 理解 momentum 與 adaptive LR 的差異                  │
│  • 知道 L1/L2 regularization 的幾何含義                 │
└─────────────────────────────────────────────────────────┘

新增組件: 梯度裁剪、學習率調度、正則化 問題: 大規模分散訓練的數值穩定性、混合精度計算


Phase 3(Scale / 200K+ 筆資料,100M+ 參數)

┌─────────────────────────────────────────────────────────┐
│                 Phase 3:Scale 階段                      │
│                                                         │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐           │
│  │  FP16/    │  │  梯度累積 │  │  分散式   │           │
│  │  BF16     │  │  策略     │  │  AllReduce│           │
│  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘           │
│        │               │               │                │
│        └───────────────┼───────────────┘                │
│                        ▼                                │
│              ┌──────────────────┐                       │
│              │  數值穩定性保證  │                       │
│              │  Loss Scaling    │                       │
│              │  Gradient Norm   │                       │
│              └──────────────────┘                       │
│                                                         │
│  數學需求:                                              │
│  • 理解浮點數精度對梯度計算的影響                        │
│  • 能分析 Hessian 矩陣與 loss landscape 的關係          │
│  • 理解 ZeRO optimizer 背後的數學分解                   │
│  • 能推導自訂 Loss function 的梯度公式                  │
└─────────────────────────────────────────────────────────┘

新增組件: 混合精度訓練、梯度累積、Loss Scaling 成本/複雜度 delta: 計算成本降低 30–50%(FP16 vs FP32),但除錯複雜度提升 3 倍


三、線性代數核心:向量、矩陣、張量

3.1 向量(Vector)— AI 中最基本的資料單位

在 AI 中,幾乎所有東西都是向量。一張 28×28 的 MNIST 圖片被展平後是一個 784 維向量;一個詞的 Embedding 是 768 維向量;一個用戶的行為特徵是 N 維向量。

向量的直覺: 方向 + 大小。

向量 v = [3, 4]
         │
   4     │         ▶ v (方向:右上)
         │       ╱
   3     │     ╱
         │   ╱  長度 = √(3² + 4²) = 5
   2     │ ╱
         │╱
   0─────┼──────────▶
         0   1   2   3

核心操作:

操作數學表示AI 用途複雜度
點積 (Dot Product)a · b = Σ aᵢbᵢ相似度計算、注意力分數O(n)
向量加法a + bEmbedding 疊加O(n)
範數 (Norm)‖v‖ = √(Σ vᵢ²)梯度大小、正則化O(n)
餘弦相似度cos θ = (a·b)/(‖a‖‖b‖)語意相似度O(n)

工程實例: Transformer 中的 Attention Score 計算就是向量點積:

1# Q, K 各是 (seq_len, d_k) 的矩陣
2# 每個 token 的 query 向量和所有 key 向量做點積
3attention_scores = Q @ K.T / math.sqrt(d_k)  # (seq_len, seq_len)

3.2 矩陣(Matrix)— 線性變換的語言

矩陣的幾何直覺:對向量施加線性變換。旋轉、縮放、投影,都是矩陣操作。

神經網路的每一層本質上是:

輸出 = 激活函數( W × 輸入 + b )

其中 W 是權重矩陣,這個矩陣乘法將輸入空間線性變換到另一個空間。

重要矩陣性質:

性質定義AI 意義
轉置 (Transpose)(Aᵀ)ᵢⱼ = Aⱼᵢ前向/反向傳播的對稱性
行列式 (Determinant)det(A)空間體積縮放比例,= 0 表示奇異矩陣
特徵值/特徵向量Av = λvPCA 降維、穩定性分析
秩 (Rank)線性獨立行/列數模型表達能力的理論上限
逆矩陣A⁻¹A = I解線性方程組

3.3 張量(Tensor)— 深度學習的真實資料結構

張量是矩陣的高維延伸:

純量 (0 維):  42
向量 (1 維):  [1, 2, 3]                    shape: (3,)
矩陣 (2 維):  [[1,2],[3,4]]                shape: (2, 2)
3D 張量:      一批灰階圖片                  shape: (batch, H, W)
4D 張量:      一批 RGB 圖片                 shape: (batch, C, H, W)
5D 張量:      一批影片幀                    shape: (batch, T, C, H, W)

工程關鍵: 理解 shape 是 AI 工程師最基本的除錯能力。shape mismatch 是 90% 初學者錯誤的根源。

1# 典型的 shape 錯誤
2x = torch.randn(32, 128)    # (batch=32, features=128)
3W = torch.randn(256, 128)   # (out=256, in=128)
4y = x @ W                   # 錯誤!需要 W.T 或調整 shape
5y = x @ W.T                 # 正確:(32, 128) @ (128, 256) → (32, 256)

四、矩陣運算的 AI 應用

4.1 矩陣乘法的計算複雜度

┌─────────────────────────────────────────────────────────────┐
│              矩陣乘法複雜度與硬體加速                        │
│                                                             │
│  CPU 序列計算:                                              │
│  A(m×k) × B(k×n) → C(m×n)                                  │
│  複雜度:O(m × k × n) ≈ O(n³) for square matrices          │
│  1000×1000 矩陣:10⁹ 次乘加 ≈ CPU 單核 ~1秒               │
│                                                             │
│  GPU 並行計算:                                              │
│  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐                   │
│  │Core 0│  │Core 1│  │Core 2│  │Core 3│  × 4096 個 CUDA   │
│  │C[0,0]│  │C[0,1]│  │C[1,0]│  │C[1,1]│  核心同時計算     │
│  └──────┘  └──────┘  └──────┘  └──────┘                   │
│                                                             │
│  GPU 理論加速:4096 核心 → 有效複雜度降至 O(n²)             │
│  實際測量:1000×1000 矩陣乘法                               │
│  CPU (i9):   ~800ms                                        │
│  GPU (A100):  ~0.3ms    → 2600倍加速                      │
│                                                             │
│  TensorCore (混合精度 BF16):額外 ~4× throughput           │
└─────────────────────────────────────────────────────────────┘

4.2 批次矩陣乘法(Batched Matrix Multiplication)

深度學習幾乎永遠是批次操作。單個樣本的計算效率極低,batch processing 讓 GPU 利用率從 < 5% 提升到 > 80%。

Batch SizeGPU 使用率訓練速度 (samples/sec)備註
1~3%120幾乎浪費 GPU
8~15%800開發除錯用
32~45%2,800常見起始值
128~78%9,600多數任務最優
512~85%31,000需要大 LR warm-up
2048~88%98,000需要 gradient accumulation

4.3 奇異值分解(SVD)在 AI 的應用

SVD 是矩陣分解的瑞士刀:A = UΣVᵀ

AI 中的直接應用:

  • PCA 降維:取前 k 個奇異值,將 768 維 Embedding 壓縮到 50 維
  • LoRA(Low-Rank Adaptation):大型模型微調的核心技術,利用低秩矩陣 ΔW = BA(B: d×r, A: r×d, r « d)將微調參數量從 7B 降到 ~4M
  • 推薦系統:矩陣分解協同過濾

LoRA 的數學本質:

原始權重更新:ΔW ∈ R^(d×d),參數量 = d²
LoRA 近似:  ΔW ≈ BA,B ∈ R^(d×r),A ∈ R^(r×d),參數量 = 2dr
當 r=8, d=4096:原始 16.7M 參數 → LoRA 65K 參數,縮減 256 倍

五、微積分直覺:梯度、偏微分

5.1 導數的幾何直覺

導數 = 函數的「斜率」,告訴你在某個點往哪個方向走函數值會上升。

對 AI 來說,我們想要找 Loss function 的最小值,所以要往負梯度方向走。

一維情況:

Loss
  │         ╭───
  │       ╭─╯
  │     ╭─╯
  │   ╭─╯           ← 這裡斜率 > 0,往左走(-方向)
  │  ╭╯
  │ ╭╯   ●          ← 最小值,斜率 = 0
  │─╯────────────▶ W

偏微分: 當函數有多個變數時(神經網路有數百萬個參數),對某一個參數求偏導數,其他參數視為常數。

Loss(w₁, w₂, w₃, ..., wₙ)

∂Loss/∂w₁ = 只考慮 w₁ 變化對 Loss 的影響
∂Loss/∂w₂ = 只考慮 w₂ 變化對 Loss 的影響
...

5.2 梯度(Gradient)— 多維空間的方向

梯度是所有偏微分組成的向量:

∇Loss = [∂Loss/∂w₁, ∂Loss/∂w₂, ..., ∂Loss/∂wₙ]

梯度指向 Loss 上升最快的方向,所以梯度下降要往負梯度方向更新:

w_new = w_old - α × ∇Loss

其中 α 是 learning rate(學習率)。

5.3 鏈式法則(Chain Rule)— 反向傳播的數學基礎

鏈式法則:複合函數的微分。

若 y = f(g(x)),則 dy/dx = (df/dg) × (dg/dx)

神經網路是一個多層複合函數:

Loss = L(ŷ)
ŷ = softmax(z₃)
z₃ = W₃ × a₂ + b₃
a₂ = ReLU(z₂)
z₂ = W₂ × a₁ + b₂
a₁ = ReLU(z₁)
z₁ = W₁ × x + b₁

∂Loss/∂W₁ = (∂Loss/∂ŷ)(∂ŷ/∂z₃)(∂z₃/∂a₂)(∂a₂/∂z₂)(∂z₂/∂a₁)(∂a₁/∂z₁)(∂z₁/∂W₁)

這就是反向傳播的本質:鏈式法則從輸出層向輸入層傳播梯度。


六、梯度下降深度解析

6.1 梯度下降的三種變體

┌────────────────────────────────────────────────────────────────┐
│                    梯度下降流程圖                               │
│                                                                │
│  ┌─────────────────┐                                          │
│  │  初始化參數 W   │                                          │
│  │  (通常隨機)   │                                          │
│  └────────┬────────┘                                          │
│           │                                                    │
│           ▼                                                    │
│  ┌─────────────────┐       ┌─────────────────┐               │
│  │  前向傳播       │──────▶│  計算 Loss      │               │
│  │  ŷ = f(x; W)   │       │  L(y, ŷ)        │               │
│  └─────────────────┘       └────────┬────────┘               │
│                                     │                         │
│                                     ▼                         │
│                            ┌─────────────────┐               │
│                            │  反向傳播       │               │
│                            │  ∇W = ∂L/∂W    │               │
│                            └────────┬────────┘               │
│                                     │                         │
│                                     ▼                         │
│                            ┌─────────────────┐               │
│                            │  更新參數       │               │
│                            │  W = W - α∇W   │               │
│                            └────────┬────────┘               │
│                                     │                         │
│                    ┌────────────────┘                         │
│                    │  收斂?                                   │
│                    ├─ 否 ──▶ 回到前向傳播                     │
│                    └─ 是 ──▶ 輸出最終模型                     │
└────────────────────────────────────────────────────────────────┘
類型每次更新使用資料量梯度品質速度記憶體
BGD(Batch GD)全部訓練資料精確
SGD(Stochastic GD)1 筆樣本噪聲高
Mini-batch GD32–512 筆平衡平衡

工程選擇: 幾乎永遠使用 Mini-batch GD。純 SGD 梯度太噪、BGD 記憶體不夠。

6.2 Learning Rate 的影響

Learning rate 是梯度下降中最重要的超參數:

LR 設定行為症狀
太大(> 0.1)震盪、發散Loss 忽高忽低,最終 NaN
偏大(0.01–0.1)快速但不穩Loss 下降快但最後震盪
適中(1e-3 ~ 1e-2)穩定收斂理想曲線
偏小(1e-4 ~ 1e-3)收斂慢Loss 持續緩慢下降
太小(< 1e-5)幾乎不更新Loss 幾乎不動

實務建議: 使用 LR Finder(從小到大掃描 LR,找 Loss 下降最陡的點的 LR / 10)。

6.3 Momentum 的數學直覺

普通梯度下降:每一步都完全由當前梯度決定,容易在 ravine(狹窄山谷)中震盪。

Momentum 梯度下降:引入「慣性」,記住上一步的方向:

v_t = β × v_{t-1} + (1-β) × ∇W_t    # 動量更新
W_t = W_{t-1} - α × v_t               # 參數更新

其中 β 通常取 0.9,意味著 90% 的慣性 + 10% 的新梯度。

效果: 在正確方向上加速(動量累積),在錯誤方向上減速(梯度方向改變時動量消耗)。


七、反向傳播的數學本質

7.1 計算圖(Computational Graph)

計算圖是反向傳播的核心資料結構,將函數分解為基本操作的有向圖。

┌─────────────────────────────────────────────────────────────┐
│                    計算圖示例                                │
│                                                             │
│   輸入層                中間層              輸出層          │
│                                                             │
│   x ──────▶  ┌───┐                                         │
│              │ × │──▶  z₁ ──▶  ┌──────┐                   │
│   W₁ ────▶  └───┘              │ ReLU │──▶  a₁             │
│                                 └──────┘     │              │
│                                              ▼              │
│   x ──────▶  ┌───┐       ┌─────────────────────┐          │
│              │ + │──▶    │     z₁ = W₁x + b₁   │          │
│   b₁ ────▶  └───┘       └─────────────────────┘          │
│                                                             │
│  前向:左到右,計算每個節點的值                              │
│  反向:右到左,用鏈式法則計算每個節點的梯度                  │
│                                                             │
│  ∂Loss/∂W₁ = (∂Loss/∂a₁)(∂a₁/∂z₁)(∂z₁/∂W₁)              │
│             =   δ₁      ×  1(z₁>0)  ×    x                 │
└─────────────────────────────────────────────────────────────┘

7.2 各激活函數的梯度

激活函數公式梯度問題
Sigmoid1/(1+e⁻ˣ)σ(x)(1-σ(x)) ∈ (0, 0.25]Vanishing gradient(深層網路)
Tanh(eˣ-e⁻ˣ)/(eˣ+e⁻ˣ)1-tanh²(x) ∈ (0, 1]仍有 vanishing gradient
ReLUmax(0, x)1(x>0) ∈ {0, 1}Dead neuron(x<0 梯度恆為 0)
Leaky ReLUmax(αx, x)1(x>0) + α·1(x≤0)解決 dead neuron,α 通常取 0.01
GELUx·Φ(x)近似 smooth ReLUTransformer 首選,計算較慢

工程含義: Sigmoid 在 20 層以上的深層網路中,梯度每層乘以 ≤ 0.25,20 層後梯度縮小至 (0.25)²⁰ ≈ 10⁻¹²,幾乎為零,這就是 Vanishing Gradient Problem

7.3 Vanishing / Exploding Gradient 的診斷

診斷方法: 監控每層的梯度範數

1for name, param in model.named_parameters():
2    if param.grad is not None:
3        grad_norm = param.grad.norm().item()
4        print(f"{name}: grad_norm = {grad_norm:.6f}")
梯度範數狀態處理方式
< 1e-6Vanishing gradient換 ReLU、BatchNorm、Residual connection
1e-4 ~ 1.0正常範圍無需處理
> 10Exploding gradient梯度裁剪(clip_grad_norm_)
NaN爆炸後溢出降低 LR、加 gradient clipping

梯度裁剪:

1# 裁剪梯度範數,防止爆炸
2torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

八、為什麼選 X 不選 Y:6 個關鍵決策比較

8.1 SGD vs Adam

選擇理由不選的理由
Adam自適應學習率:每個參數有獨立 LR;不需精細調 LR;收斂快,15–30% 更快達到同等 lossSGD:需要精細調 LR 和 momentum;對 LR 敏感;收斂慢但有時泛化更好
SGD+Momentum某些 CV 任務泛化性能 1–3% 更好;記憶體比 Adam 少 1/3(無需存 m, v)Adam:訓練快但有時 generalization gap 較大

翻轉條件: 當模型 > 1B 參數且記憶體緊張時,考慮 SGD;當訓練預算有限時,Adam 幾乎必選。

8.2 L1 vs L2 Regularization

選擇數學含義用途何時不選
L2(Ridge)懲罰 Σwᵢ²;讓權重趨向小但非零大多數深度學習(Weight Decay = L2)需要稀疏解時
L1(Lasso)懲罰 Σ|wᵢ|;讓部分權重精確為 0特徵選擇、稀疏模型深度網路(梯度在 0 點不可微,不穩定)
Elastic NetL1 + L2 組合兩者都需要時需要簡單調參時

幾何直覺: L2 的約束集合是球形(圓滑邊界),解不一定在軸上;L1 的約束集合是菱形(有尖角),解容易落在頂點(稀疏)。

8.3 Batch Normalization vs Layer Normalization

選擇正規化維度用途不適合場景
BatchNorm跨 batch 維度正規化CNN、CV 任務;加速收斂 30–40%;batch size ≥ 16小 batch(< 8)、RNN、推論時 batch=1
LayerNorm跨特徵維度正規化Transformer、NLP;與 batch size 無關某些 CNN 任務效果略差
GroupNorm將特徵分組後正規化小 batch CV 任務需要 group 數選擇

8.4 Xavier vs He 初始化

選擇公式設計假設用途
Xavier(Glorot)Var(W) = 2/(n_in + n_out)假設激活函數線性(Sigmoid/Tanh)Sigmoid、Tanh 網路
HeVar(W) = 2/n_in考慮 ReLU 截斷一半神經元ReLU、Leaky ReLU 網路

工程規則: 用 ReLU → He init;用 Sigmoid/Tanh → Xavier init。選錯會讓訓練初期 loss 高 10–50%。

8.5 Cross-Entropy vs MSE Loss

選擇梯度特性用途不選的理由
Cross-Entropy梯度 = (ŷ - y),大誤差時梯度大分類問題(必選)回歸問題不適用
MSE梯度 = 2(ŷ - y),配合 Sigmoid 時梯度 → 0回歸問題分類問題:配合 Sigmoid 時 Vanishing gradient 嚴重
Focal Loss對難樣本加重類別不平衡(正負樣本比 > 100:1)類別平衡時沒必要

翻轉條件: 目標偵測(YOLO 系列)使用 MSE 預測框座標,同時用 Cross-Entropy 預測類別。

8.6 FP32 vs FP16/BF16

選擇精度記憶體速度風險
FP32高(7位十進制)基準 1×基準 1×最穩定
FP16低(3位十進制)0.5×2–4×容易 overflow(最大 65504),需要 Loss Scaling
BF16中(2位十進制,範圍大)0.5×2–4×數值範圍與 FP32 相同,推薦用於 LLM 訓練

工程結論: 訓練 LLM → BF16;推論 → FP16 或 INT8 量化。FP16 訓練時若 loss 出現 NaN,先檢查是否需要 Loss Scaling。


九、系統效應:有無數學基礎的前後對比

以下是真實工程場景中,數學理解程度對工作效率的量化影響:

場景沒有數學基礎有數學基礎效益
Gradient Explosion 診斷試遍所有超參數,~2天看梯度範數,<30分鐘8× 更快
選擇 optimizer永遠用 Adam,不了解為什麼根據任務和資源選擇,有理論依據訓練速度提升 15–30%
Loss 不收斂無頭緒,問別人或重跑從 loss landscape 角度系統性排查解決時間 3× 更短
設計自訂 Loss不敢嘗試能手推梯度公式,30分鐘實作解鎖新能力
模型輕量化(LoRA)套用現成工具,不理解參數理解 SVD 後可以調整 rank,最佳化精度/大小模型大小再縮減 30–50%
除錯 NaN loss隨機嘗試,平均 6 小時用數學推斷根本原因,< 1 小時5× 更快
解釋模型行為給業務只能說「可能是 overfitting」能用正則化幾何解釋 overfit,加上具體數字提升團隊信任度

訓練效率數字:

  • 正確初始化(He vs 隨機):初始 loss 差異高達 50%,收斂速度差異 2× 以上
  • 適當 learning rate schedule(cosine decay)vs 固定 LR:最終準確率提升 1–3%
  • 梯度裁剪防止 exploding:避免重跑訓練的機率提升 40%
  • 理解 batch size 與 LR 的線性縮放關係:batch size 8× → LR √8 倍,訓練速度提升 6×

十、面試答題要點

面試問題: 訓練 Embedding 推薦模型第 5 epoch 後 loss 變 NaN,GPU 正常,資料沒問題,請從數學角度診斷。

「首先我會確認是 Gradient Explosion 而非 Loss Scaling 問題,具體做法是在每個 backward() 後印出各層的梯度範數——如果某層梯度範數 > 100 就幾乎確定是爆炸。數學根源是 Embedding 的梯度是 one-hot 稀疏梯度,稀疏更新疊加 Adam 的 v 分母過小時(初始幾個 epoch v 近乎為 0),等效 LR 可以暴增 100 倍以上,導致參數跳過穩定區間。修復策略分兩層:短期加上 clip_grad_norm_(..., max_norm=1.0) 立即防止 NaN;中期將 Adam 的 epsilon 從預設 1e-8 調大到 1e-4,或改用 AdamW + weight decay 0.01,從數學上限制 Embedding 矩陣的 L2 範數增長。如果問題仍存在,第三步是確認 Embedding 初始化是否用了 He init(Embedding 應用 normal(0, 1/√d),預設 PyTorch 用 N(0,1) 可能過大)。這三步通常在 2 小時內可以定位並修復,不需要重新訓練資料。」


十一、系列導航

本文是 AI Engineering from Scratch 系列的第一篇,涵蓋 AI 數學基礎的線性代數與微積分核心直覺。

系列文章:

篇次主題狀態
Phase 1 Part 1(本篇)線性代數與微積分 — AI 演算法直覺✓ 已發布
Phase 1 Part 2機率論與統計 — 貝氏推斷、最大似然即將發布
Phase 1 Part 3資訊理論 — Entropy、KL Divergence即將發布
Phase 2 Part 1神經網路架構 — MLP、CNN、RNN即將發布
Phase 2 Part 2Transformer 與 Attention 機制即將發布
Phase 3 Part 1大型語言模型訓練工程即將發布

參考資源:

  • AI Engineering from Scratch — GitHub
  • 3Blue1Brown: Essence of Linear Algebra(推薦入門視覺化)
  • Stanford CS229 機器學習講義(數學推導完整版)
  • Deep Learning book (Goodfellow et al.) 第 2–4 章

本文為 AI 工程從零開始系列,專為有軟體工程背景但缺乏 AI 數學基礎的工程師設計。重點是建立工程直覺,而非嚴格數學證明。

Yen

Yen

Yen