SGD(Stochastic Gradient Descent)隨機梯度下降
最常用的優化器之一,用來一步一步調整權重,讓 loss 變小。
核心概念:每次只看「一小批(mini‑batch)」資料算梯度,而不是整個訓練集,來更新參數。
為什麼叫「Stochastic(隨機)」?
-
傳統 batch gradient descent:每一步都用「全部訓練資料」算一次梯度,更新一次參數,對大數據非常慢、也吃記憶體。
-
SGD:每步只用「一個樣本」或「一個小 batch」算梯度,樣本是隨機抽的,所以每次看到的梯度都帶有「隨機噪音」。
-
好處:
-
每一步計算量小,更新很頻繁,訓練大規模 CNN 時特別實用。
-
因為有噪音,路徑會「抖一抖」,比較有機會跳出壓在局部極小值或鞍點附近的狀態。
-
特點:最基本的優化器,簡單但有效
optimizer = optim.SGD(
model.parameters(),
lr=0.01, # 學習率(通常需要較大值)
momentum=0.9, # 動量(加速收斂,減少震盪)
weight_decay=1e-4, # 權重衰減
nesterov=False # 是否使用 Nesterov 動量
)
參數說明:
| 參數 | 說明 | 推薦值 |
|---|---|---|
lr | 學習率 | 0.01 ~ 0.1 |
momentum | 動量係數 | 0.9 |
weight_decay | L2 正則化 | 1e-4 |
nesterov | Nesterov 加速 | True(可選) |
優點:
-
訓練穩定
-
泛化能力強
-
理論基礎扎實
缺點:
-
需要仔細調整學習率
-
收斂較慢
-
對學習率敏感
適用場景:
-
追求最佳泛化性能
-
訓練 ResNet、VGG 等經典架構
-
有充足時間調參
相關筆記
- 優化器:優化器總覽
- Adam(Adaptive Moment Estimation):加上動量與自適應學習率的進化版
- Learning Rate (學習率):SGD 對學習率特別敏感