banner
Fight4354

Fight4354

AI,Chem,Science,Study,Share,Hobby,LLM,Life,Sport

梯度優化器

下面寫一篇結構清晰、邏輯嚴謹,涵蓋:

  • 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):

θ=θηθL(所有訓練數據)\theta = \theta - \eta \cdot \nabla_\theta L(\text{所有訓練數據})

缺點非常明顯:

  • 每次更新都要遍歷整個數據集(太慢)

  • 對大數據集不可行

於是我們引入 隨機梯度下降 SGD

SGD 的思想:

每次只用一個樣本的梯度來更新參數,而不是所有數據。

更新方式:

θ=θηθL(xi)\theta = \theta - \eta \cdot \nabla_\theta L(x_i)

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 梯度:

g=1Bi=1BθL(xi)g = \frac{1}{B} \sum_{i=1}^{B} \nabla_\theta L(x_i)

參數更新:

θ=θηg\theta = \theta - \eta g

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 為每個參數維護兩個值:

  1. 一階矩(動量):梯度的指數平均
mt=β1mt1+(1β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1) g_t

關鍵點:

  • gtg_t當前 batch 的梯度

  • mt1m_{t-1}之前所有 batch 梯度的 “壓縮記憶”
    為什麼 β\beta的值大約是 0.9,比較大?

為什麼 β₁ 要設得這麼大(比如 0.9)?

1️⃣ 因為 mini-batch 梯度本身 “噪聲很大”

你現在已經知道:

  • 每個 gtg_t 只是個 mini-batch 的梯度

  • 不同 batch 之間,梯度方向會抖動

如果我們過分相信當前 batch

  • 參數會 “左一下、右一下”

  • 收斂慢甚至不穩定

所以我們要:

“少聽當前 batch,多聽歷史趨勢”

這就是 β₁ 設得大的根本原因。


2️⃣ β₁ = 0.9 實際意味著什麼?

mt=0.9mt1+0.1gtm_t = 0.9 m_{t-1} + 0.1 g_t

解釋:

  • 當前 batch 的梯度只占 10%

  • 歷史趨勢占 90%

但注意:
這 90% 不是 “上個 batch”,而是所有歷史 batch 的綜合結果


3️⃣ “記憶長度” 是多少?

指數平均有一個直觀的 “有效記憶長度”:

memory length11β1\text{memory length} \approx \frac{1}{1-\beta_1}

所以:

  • β₁ = 0.9 → 記住大約 10 個 batch

  • β₁ = 0.99 → 記住大約 100 個 batch

  • β₁ = 0.5 → 記住大約 2 個 batch

這也解釋了:

β₁ 越大,記憶越長,更新越平滑;
β₁ 越小,反應越快,但更噪。

  1. 二階矩:梯度平方的指數平均
vt=β2vt1+(1β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2

之後進行偏置校正:

m^t=mt1β1t,v^t=vt1β2t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \qquad \hat{v}_t = \frac{v_t}{1-\beta_2^t}

最終更新:

θ=θηm^tv^t+ε\theta = \theta - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon}

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 直接作用在參數上:

θ=θη(m^tv^t+ε+λθ)\theta = \theta - \eta \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \varepsilon} + \lambda\theta \right)

這樣:

  • 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 的默認優化器

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。