下面寫一篇結構清晰、邏輯嚴謹,涵蓋:
-
SGD(隨機梯度下降)
-
Mini-batch SGD(小批量隨機梯度下降)
-
Adam 優化器
-
AdamW 優化器
-
三者之間的聯繫與區別
-
計算直覺 + 數學公式 + 實踐經驗
深度學習優化器全面理解:SGD、Mini-batch SGD、Adam、AdamW
在深度學習訓練中,優化器(Optimizer)是控制模型參數如何更新的核心組件。
不同優化器會極大影響模型的學習速度、穩定性以及最終效果。
本文將深入理解:
-
SGD 是什麼?
-
Mini-batch 為什麼是深度學習的標準?
-
Adam 是如何結合 Momentum + RMSProp 的?
-
AdamW 為什麼是目前最主流的大模型優化器?
SGD 和 mini-batch 在一個 batch 中的梯度,取這個 batch 的平均值
1. SGD:隨機梯度下降(Stochastic Gradient Descent)#
1.1 基本思想#
標準梯度下降(Full-batch Gradient Descent):
缺點非常明顯:
-
每次更新都要遍歷整個數據集(太慢)
-
對大數據集不可行
於是我們引入 隨機梯度下降 SGD。
SGD 的思想:
每次只用一個樣本的梯度來更新參數,而不是所有數據。
更新方式:
1.2 SGD 的優點#
-
更新速度極快(不用遍歷全量數據)
-
噪聲大,可能幫助模型跳出局部最優
1.3 SGD 的缺點#
-
噪聲太大,梯度抖動嚴重
-
每次只看一個樣本,優化軌跡很不穩定
-
不適合深度網絡和大型模型
因此,現在更常用的是 ——Mini-batch SGD。
2. Mini-batch SGD:現代深度學習的默認方式#
實際訓練不會用 batch=1(SGD),也不會用 full batch,而是:
每次使用一小批樣本 (batch_size = 32/64/128...) 來估計梯度。
Mini-batch 梯度:
參數更新:
2.1 為什麼 Mini-batch 最優?#
Mini-batch 是一個完美的折中:
| 方法 | 噪聲 | 速度 | 穩定性 | 實際使用 |
|---|---|---|---|---|
| SGD(batch=1) | 噪聲太大 | 快 | 差 | 少用 |
| Full-batch GD | 無噪聲 | 慢 | 好 | 不可行 |
| Mini-batch SGD | 適度噪聲 | 快 | 穩定 | 最常用 |
Mini-batch 的優勢:
-
充分利用 GPU 並行能力
-
具有合理的梯度噪聲,有助於泛化
-
訓練穩定,更新速度快
因此在深度學習中,提到 “SGD” 通常其實指:
Mini-batch SGD,而不是 batch=1 的原始 SGD。
3. Adam:自適應矩估計優化器(Adaptive Moment Estimation)#
Adam 可以看成以下兩者的結合:
-
Momentum(動量) —— 平滑梯度方向
-
RMSProp —— 自適應維度學習率
3.1 Adam 的核心思想#
Adam 為每個參數維護兩個值:
- 一階矩(動量):梯度的指數平均
關鍵點:
-
:當前 batch 的梯度
-
:之前所有 batch 梯度的 “壓縮記憶”
為什麼 的值大約是 0.9,比較大?
為什麼 β₁ 要設得這麼大(比如 0.9)?
1️⃣ 因為 mini-batch 梯度本身 “噪聲很大”
你現在已經知道:
-
每個 只是個 mini-batch 的梯度
-
不同 batch 之間,梯度方向會抖動
如果我們過分相信當前 batch:
-
參數會 “左一下、右一下”
-
收斂慢甚至不穩定
所以我們要:
“少聽當前 batch,多聽歷史趨勢”
這就是 β₁ 設得大的根本原因。
2️⃣ β₁ = 0.9 實際意味著什麼?
解釋:
-
當前 batch 的梯度只占 10%
-
歷史趨勢占 90%
但注意:
這 90% 不是 “上個 batch”,而是所有歷史 batch 的綜合結果。
3️⃣ “記憶長度” 是多少?
指數平均有一個直觀的 “有效記憶長度”:
所以:
-
β₁ = 0.9 → 記住大約 10 個 batch
-
β₁ = 0.99 → 記住大約 100 個 batch
-
β₁ = 0.5 → 記住大約 2 個 batch
這也解釋了:
β₁ 越大,記憶越長,更新越平滑;
β₁ 越小,反應越快,但更噪。
- 二階矩:梯度平方的指數平均
之後進行偏置校正:
最終更新:
3.2 Adam 的直覺理解#
-
$\hat {m}_t$:平滑梯度,讓優化方向更穩定
-
$\hat {v}_t$:衡量梯度幅度,大梯度 → 步長小,小梯度 → 步長大
-
每維參數具有獨立學習率:自適應學習率
3.3 Adam 的優勢#
-
收斂速度快(尤其訓練初期)
-
對學習率不敏感
-
對梯度尺度自適應,非常適合深度網絡
-
是 NLP、Transformer 等大模型訓練的主力
3.4 Adam 的缺點#
-
有時泛化性能不如 SGD + Momentum
-
原版 Adam 的 L2 正則不嚴格等價於 weight decay
這個缺點引出了 AdamW。
4. AdamW:Transformer 等大模型的標準優化器#
AdamW = Adam + 正確的權重衰減(Weight Decay)
原版 Adam 的 L2 正則和自適應學習率耦合在一起,導致效果不好。
AdamW 將 weight decay 直接作用在參數上:
這樣:
-
weight decay 只影響參數大小,不影響梯度估計
-
更符合理論,也更穩定
AdamW 是以下模型的默認優化器:#
-
BERT
-
GPT-2 / GPT-3 / GPT-4
-
PaLM / LLaMA
-
Megatron-LM
-
Stable Diffusion
幾乎所有現代大模型都是用 AdamW 訓練的。
5. SGD vs Mini-batch SGD vs Adam vs AdamW 總結對比#
| 優化器 | 是否自適應 | 是否平滑方向 | 是否有 weight decay 正確實現 | 收斂速度 | 泛化能力 | 應用場景 |
|---|---|---|---|---|---|---|
| SGD | 否 | 否 | 否 | 慢 | 強(圖像任務) | CNN、小模型 |
| SGD+Momentum | 否 | 是 | 否 | 中等 | 很強 | 大部分傳統任務 |
| Mini-batch SGD | 否 | 否 | 否 | 中等 | 強 | 全部深度學習 |
| Adam | 是 | 是 | 否 | 快 | 一般 | NLP、大模型 |
| AdamW | 是 | 是 | 是 | 快且穩 | 強 | Transformer、大模型標準 |
6. 最終總結(一句話記憶版)#
-
SGD:用一個樣本更新參數,但噪聲太大
-
Mini-batch SGD:用一批樣本的平均梯度更新,是訓練標準
-
Adam:動量 + 自適應學習率,訓練快、穩定
-
AdamW:修復 Adam 的 weight decay 問題,是 Transformer/GPT 的默認優化器