18 - Adam——深度學習界嘅「智能自動波引擎」
Adam(Adaptive Moment Estimation)基本上係 Momentum+RMSprop+偏差修正 三合一。落埋去就好似把跑車打到 S 檔:加速快、方向穩、還要自動調波。
1️⃣ 直覺圖像:開住 Tesla 落山
普通 SGD=開腳踏單車落斜,只靠肉眼睇斜度踩腳車,慢又易跣。Adam=坐 Tesla,車內有:
「動量感測器」:記住之前行嘅方向 → Momentum
「路面雷達」:量度左右斜度大小 → RMSprop
「初段校準」:開車頭幾秒數據少,自動修正 → Bias-Correction
結果:山路幾彎都穩定、高速、唔嘈。
2️⃣ 演算法四步曲
假設步 t 得到梯度 g_t:
一階動量(方向記憶)v_t = β₁·v_{t−1} + (1−β₁)·g_t (β₁≈0.9)
二階動量(幅度記憶)s_t = β₂·s_{t−1} + (1−β₂)·g_t² (β₂≈0.999)
偏差修正
v̂_t = v_t / (1 − β₁ᵗ) ŝ_t = s_t / (1 − β₂ᵗ)
更新參數θ = θ − α · v̂_t / (√ŝ_t + ε) (α≈1e-3, ε≈1e-8)
一階動量=Momentum二階動量=RMSprop scaling偏差修正=頭幾步唔會被 0 初值拖慢
3️⃣ 實戰靚參數
參數 | 建議 | 解說 |
α (lr) | 1e-3 | GPU 足、batch 大可放 3e-4 ~ 5e-4 |
β₁ | 0.9 | 想更穩定→0.95;想更敏捷→0.8 |
β₂ | 0.999 | 時序/強化學習 noise 大可降至 0.995 |
ε | 1e-8 | 混合精度可加大至 1e-7 防 underflow |
4️⃣ 多幾個貼地例子
手機輸入法語言模型每部手機收集嘅 batch 細,梯度 noise 超大。Adam 自動降速喺震盪方向,仍能穩穩收斂。
NFT 價格預測 GANGenerator 梯度有時爆燈有時 0,Adam 既調速又加動量,較 SGD 少 mode collapse。
醫院腦掃 CT-3D 分割參數幾千萬,但每 GPU 只放到 2 張圖。用 Adam + β₂=0.995,收斂比 RMSprop 快 30%。
電商即時推薦用 streaming mini-batch 100~200;Adam 無需經常調 lr,工程師凌晨都瞓得安穩。
無人機路徑規劃強化學習回報波幅大,SGD 易炸;Adam 幫 policy network 跨過鞍點,飛機訓得快過加油。
5️⃣ Adam 同其他 Optimizer 一表睇清
Optimizer | 方向記憶 | 步伐自適應 | 初期修正 | 典型用例 |
SGD | ✘ | ✘ | ✘ | 小模型 + 手動 LR schedule |
Momentum | ✔︎ | ✘ | ✘ | CV 大批量訓練 |
RMSprop | ✘ | ✔︎ | ✘ | RNN / 強化學習 |
Adam | ✔︎ | ✔︎ | ✔︎ | 99% 深度項目首選 |
6️⃣ Adam 易中嘅伏
學習率太大 → 發散
症狀:Loss 震 + NaN
對策:α ÷ 10 或加 Grad Clip
長期不降 → β₂ 太高
降至 0.995 或啟用 amsgrad=True 試試。
BN + 小 batch
Adam 噪聲低,配 BN 容易 overfit;可加 Dropout or Weight Decay。
想極致收尾
先 Adam 訓練 80%,再轉 SGD + cosine decay,可提升 0.5~1% accuracy。
7️⃣ PyTorch 8 行起飛
optimizer = torch.optim.Adam(model.parameters(),
lr=1e-3, betas=(0.9, 0.999), eps=1e-8)
for x, y in loader:
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()
✅ 小結 — 把握 Adam 三句真言
Momentum 加速、RMSprop 調速、Bias-Correction 開局無死角。
預設參數已經好打,唔好一開波就亂改;先觀察 Loss 再微調。
無論 CNN、RNN、Transformer、GAN、RL… 一行 Adam 先行,十有八九到位。
記住:揀優化器時,先諗 Adam;真係搞唔掂或者想最後 1% 再考慮其他!🚀