什麼是 隨機梯度下降(Stochastic Gradient Descent)?

隨機梯度下降(SGD)是一種迭代優化算法,用於最小化目標函數。它每次迭代僅使用一個或少量樣本計算梯度,加速訓練過程,但可能導致收斂不穩定。

核心概念

隨機梯度下降(Stochastic Gradient Descent, SGD)是一種用於最小化目標函數的迭代優化算法。在機器學習和深度學習中,我們經常需要找到一組參數,使得模型在給定的數據集上表現最佳。這個“最佳”通常由一個目標函數來衡量,例如損失函數或成本函數。我們的目標是找到使這個目標函數最小化的參數。

傳統的梯度下降算法(Batch Gradient Descent)在每次迭代時,需要計算整個訓練集上的梯度,這在數據集非常大的時候會變得非常耗時。SGD則通過每次迭代僅使用一個或一小批隨機選擇的樣本來近似計算梯度,從而大大降低了計算成本。

SGD的核心思想是:雖然每次迭代計算的梯度可能不準確,但總體趨勢是朝著目標函數的最小值方向前進的。通過多次迭代,SGD最終可以收斂到一個局部最小值。

運作原理

SGD的運作原理可以概括為以下幾個步驟:

  1. 初始化參數: 首先,需要隨機初始化模型的參數。

  2. 選擇樣本: 從訓練集中隨機選擇一個或一小批樣本。

  3. 計算梯度: 使用選擇的樣本計算目標函數關於模型參數的梯度。這個梯度是目標函數在該樣本上的局部梯度。

  4. 更新參數: 根據計算出的梯度更新模型參數。更新公式如下:

    參數 = 參數 - 學習率 * 梯度

    其中,“學習率”是一個超參數,控制每次更新的步長。學習率過大可能導致算法不收斂,學習率過小可能導致收斂速度過慢。

  5. 迭代: 重複步驟2-4,直到滿足停止條件。停止條件可以是達到最大迭代次數,或者目標函數的變化量小於一個閾值。

與傳統梯度下降相比,SGD的優點是計算速度快,尤其是在處理大規模數據集時。然而,SGD的缺點是收斂過程可能不穩定,因為每次迭代使用的樣本是隨機選擇的,導致梯度方向可能存在噪聲。此外,SGD更容易陷入局部最小值,因為它每次迭代只考慮一個或一小批樣本的信息。

為了克服SGD的缺點,研究人員提出了許多改進的SGD算法,例如:

  • Mini-batch Gradient Descent: 每次迭代使用一小批樣本(例如32、64或128個樣本)計算梯度。Mini-batch Gradient Descent既可以提高計算效率,又可以降低梯度噪聲。
  • Momentum: 引入動量項,將之前的梯度信息考慮進來,可以加速收斂,並減少陷入局部最小值的可能性。
  • Adam: 自適應矩估計(Adaptive Moment Estimation),結合了Momentum和RMSProp的優點,可以自適應地調整學習率,對不同的參數使用不同的學習率。

實際應用

SGD及其變體廣泛應用於各種機器學習和深度學習任務中,例如:

  • 圖像分類: 在訓練卷積神經網絡(Convolutional Neural Networks, CNNs)進行圖像分類時,通常使用SGD或Adam等優化算法。
  • 自然語言處理: 在訓練循環神經網絡(Recurrent Neural Networks, RNNs)進行文本分類、機器翻譯等任務時,也經常使用SGD或Adam。
  • 推薦系統: 在訓練推薦模型時,可以使用SGD來優化目標函數,例如點擊率預測或購買預測。
  • 強化學習: 在訓練深度強化學習模型時,可以使用SGD來更新策略網絡和價值網絡的參數。

常見誤區

  • SGD一定比Batch Gradient Descent快: 雖然SGD每次迭代的計算成本比Batch Gradient Descent低,但SGD需要更多的迭代次數才能收斂。因此,在某些情況下,Batch Gradient Descent可能比SGD更快。
  • 學習率越小越好: 學習率過小可能導致收斂速度過慢,甚至無法收斂。學習率過大可能導致算法不穩定,甚至發散。因此,需要仔細調整學習率,或者使用自適應學習率的優化算法,例如Adam。
  • SGD一定會收斂到全局最小值: SGD只能保證收斂到局部最小值,不能保證收斂到全局最小值。為了避免陷入局部最小值,可以使用一些技巧,例如Momentum或Adam,或者使用不同的初始化參數多次運行SGD。
  • SGD不需要調整任何超參數: SGD有很多超參數需要調整,例如學習率、動量參數、mini-batch大小等。這些超參數的選擇對SGD的性能有很大影響,需要仔細調整。

相關術語

常見問題

← 回到 隨機梯度下降 快查頁

延伸學習

想看 隨機梯度下降 的完整影片教學?前往 美第奇 AI 學院