bcjohn's blog
機器學習中的優化器 (2) - 從梯度下降問題到動量優化
發布於: 2025-08-05 更新於: 2025-08-15 分類於: AI 閱讀次數: 
此為 機器學習中的優化器 系列文章 - 第 2 篇:
  1. 機器學習中的優化器 (1) - Gradient descent 梯度下降與其變體
  2. 機器學習中的優化器 (2) - 從梯度下降問題到動量優化
  3. 機器學習中的優化器 (3) - AdaGrad、RMSProp 與 Adam

梯度下降面臨的問題

在上一篇 Gradient descent 梯度下降與其變體 文章中,我們介紹了梯度下降的基本原理和三種主要變形:Batch Gradient Descent、Stochastic Gradient Descent (SGD) 和 Mini-batch Gradient Descent。雖然這些方法在機器學習中發揮了重要作用,但在實際應用中仍然面臨一些挑戰:

1. 學習率選擇困難

問題描述

  • 學習率太小:收斂速度慢,需要大量迭代
  • 學習率太大:可能導致震盪或發散
  • 不同參數可能需要不同的學習率

數學表達
$$w_{t+1} = w_t - \eta \nabla L(w_t)$$

其中 $\eta$ 是固定的學習率,但實際上:

  • 在平坦區域需要較大學習率加速
  • 在陡峭區域需要較小學習率避免震盪

範例

以上一篇文章的 Batch gradient descent 為例,左圖學習率 $0.1$ 可以穩定收斂到 $w1=2, w2=2$ 的最佳權重,但如果學習率選擇過大 $0.28$,則會不斷震盪 loss 無法收斂到最小值:

學習率 0.1 的收斂過程

學習率 η = 0.1:穩定收斂

學習率 0.28 的收斂過程

學習率 η = 0.28:來回震盪無法收斂

圖片程式碼

2. 梯度消失與梯度爆炸

梯度消失 (Vanishing Gradient)

  • 在深度網路中,梯度可能變得極小
  • 導致早期層的參數更新緩慢

梯度爆炸 (Exploding Gradient)

  • 梯度可能變得極大
  • 導致參數更新過大,模型不穩定

範例

以下圖為例:橘色的 x 點是達到最佳解的位置,而黑色圓點是訓練起始點,左下圖設置學習率 $η = 10^{-2}$ 的結果是學習率設置過大導致 梯度爆炸,而右下圖設置學習率 $η = 10^{-7}$ 則又太小導致中間走了 100000 次迭代離最佳解的位置還很遠


圖片來源

Momentum 動量優化

為了解決上述問題,研究人員提出了多種優化算法。其中 Momentum 是最早且最有效的改進之一。

Momentum 的核心思想

Momentum 的靈感來自物理學中的動量概念。就像一個球在滾動時會保持一定的動量,Momentum 算法會累積之前的梯度方向,形成一種”慣性”。

Momentum 的視覺化理解

想像一個球在損失函數的表面上滾動:

  1. 標準梯度下降:球只受當前位置的坡度影響
  2. Momentum:球有慣性,會保持之前的方向,同時受當前坡度影響

這使得 Momentum 在以下情況特別有效:

  • 狹長的山谷(減少震盪)
  • 平坦區域(加速移動)
  • 局部最小值(提供逃離的動能)

如下圖所示:在 Gradient descent 迭代的過程,不幸第四步走到了局部最小值(Local Minimum),但我們最終想要找到的最佳解是 全局最小值(Global Minimum) 也就是需要往圖中更右邊的地方尋找。但當走到圖中的山谷中,此時 Gradient descent 的值已經是 0 了無法再進行下一次迭代,而求出的解只是 局部最小值(Local Minimum)


圖片來源

因此 Momentum 出現了,下圖的紅色箭頭代表使用 Gradient descent 計算出來下一次迭代該走的方向與大小,可以看到山谷中因為 Gradient descent 等於 0,所以並沒有紅色箭頭。虛線藍色箭頭代表 上一次迭代的移動 (Last Movement) 對於這一次迭代的影響,這個 Last Movement 就是 Momentum 的概念。藍色實線箭頭是將 Gradient descentMomentum 都考慮進去後目前迭代實際前往的方向及大小

可以看到上圖原本在山谷中走不出去的狀況,現在有機會靠著 Momentum 在上一步保留的慣性往右走脫離山谷,往圖中右側繼續尋找 全局最小值(Global Minimum)


圖片來源

數學表達式

標準梯度下降:

$$w_{t+1} = w_t - \eta \nabla L(w_t)$$

其中:

  • $w_t$ 是第 $t$ 步的權重
  • $\eta$ 是學習率(步長)
  • $\nabla L(w_t)$ 是損失函數在 $w_t$ 處的梯度
Momentum:

$$w_{t+1} = w_t + v_{t+1}$$

$$v_{t+1} = \beta v_t - \eta \nabla L(w_t)$$

其中:

  • $v_{t+1}, v_t$ 代表 速度 (velocity) 項。
  • $\beta$ 是 動量係數 (Momentum),控制每次迭代動量影響的大小,通常設定為 0.9
Momentum 計算:

以下兩部影片更完整地講解 Momentum 的計算

Momentum 的優勢

1. 加速收斂

在平坦區域

  • 梯度較小,但動量項會累積之前的方向
  • 提供額外的推動力,加速收斂

在陡峭區域

  • 動量項會緩衝梯度的變化
  • 減少震盪,提供更穩定的更新

2. 逃離局部最小值

  • 動量項提供額外的 慣性
  • 幫助算法跳出淺層的局部最小值

3. 減少震盪

  • 在狹長的山谷中,標準梯度下降會來回震盪
  • Momentum 會沿著山谷的方向加速移動
  • 大幅減少震盪,提高收斂效率

Momentum 的參數選擇

動量係數 $\beta$

  • 通常設為 0.9
  • $\beta$ 越大,動量效果越強
  • $\beta$ 越小,越接近標準梯度下降

Momentum vs 標準梯度下降比較

特性 標準梯度下降 Momentum
收斂速度 較慢 較快
震盪 較多 較少
局部最小值 容易陷入 較易逃離
參數調整 學習率敏感 相對穩定
計算成本 稍高

結論

Momentum 通過引入動量項,有效解決了標準梯度下降的許多問題:

  1. 加速收斂:在平坦區域提供額外推動力
  2. 減少震盪:在狹長山谷中沿著正確方向加速
  3. 逃離局部最小值:提供額外的”慣性”動能
  4. 提高穩定性:緩衝梯度的變化

然而,Momentum 仍然有一些限制,例如:

  • 對所有參數使用相同的學習率
  • 無法自適應調整學習率
  • 在某些情況下可能過度衝刺

這些問題將在下一篇文章的優化算法(如 AdaGrad、RMSprop 和 Adam)中得到進一步改善。

參考資料

【機器學習 2021】類神經網路訓練不起來怎麼辦 (二): 批次 (batch) 與動量 (momentum)
Optimization for Deep Learning (Momentum, RMSprop, AdaGrad, Adam)
機器/深度學習-基礎數學(三):梯度最佳解相關算法(gradient descent optimization algorithms)
[機器學習 ML NOTE]SGD, Momentum, AdaGrad, Adam Optimizer