跳至主要内容

深度學習中的優化技巧 - 批次 (Batch) 與動量 (Momentum)

批次 (Batch) 的運作機制

在訓練模型時,我們不會一次對所有資料(Full Batch)計算 Loss,而是將資料分成一個個小群組,稱為 BatchMini-batch

  • 訓練流程: 每次取出一個 Batch 的資料計算 Loss 和 Gradient,隨即更新一次參數。當所有 Batch 都被看過一遍,稱為完成一個 Epoch
  • 打亂資料 (Shuffle): 在每個 Epoch 開始前,通常會重新分配 Batch,確保每輪訓練時同一個 Batch 內的資料組合都不一樣。

optimization-with-batch

大批次 (Full Batch) vs. 小批次 (Small Batch)

這兩者在「更新穩定度」與「訓練速度」之間存在權衡:

比較項目大批次 (Full Batch / Large Batch)小批次 (Small Batch, 如 Batch Size = 1)
更新速度蓄力時間長,需看完所有資料才更新一次。蓄力時間短,看一筆資料就更新一次。
穩定度移動方向非常穩健。移動方向曲折、帶有雜訊 (Noisy)。
平行運算GPU 擅長平行處理,Batch 大小在一定範圍內,運算時間幾乎相同。無法發揮 GPU 平行處理優勢,跑完一個 Epoch 總時間較長。
效能表現容易卡在臨界點 (Optimization 問題)。較佳。 雜訊有助於跳出局部最小值或鞍點。

small-vs-large-batch

  • 關鍵發現: 雖然大批次在 GPU 加持下「跑完一個 Epoch」的速度較快,但小批次在訓練集與測試集上的準確率通常更好

為什麼「有雜訊」的小批次反而更好?

  • 優化 (Optimization) 面: 不同的 Batch 有各自的 Loss Function。如果某個 Batch 讓梯度變為零(卡住),另一個 Batch 的梯度可能還有值,這能幫助模型「逃離」臨界點。
  • 泛化 (Generalization) 面:
    • 峽谷 (Sharp Minima): 大批次容易走到窄而深的峽谷,一旦訓練與測試資料有微小偏差,Loss 就會暴增。
    • 盆地 (Flat Minima): 小批次因為更新方向隨機,容易跳出窄峽谷,最後停留在寬廣的盆地。即便測試資料有偏移,Loss 依然能維持在低檔。

small-batch-is-better

動量 (Momentum)

動量是另一種對抗臨界點(Local Minima 或 Saddle Point)的技術,其核心概念源自物理界的慣性

  • 物理類比: 想像參數是一顆從斜坡滾下的球。一般的梯度下降在遇到地勢平坦(Saddle Point)或小坑洞(Local Minima)時就會停下;但若球帶有動量,它能憑藉之前的速度翻過小坡,繼續尋找更低的點。
  • 運作原理:
    • 一般梯度下降: 只往梯度的反方向移動。
    • 加入動量: 下一步移動的方向 = 「當前梯度的反方向」+「前一步移動的方向」
  • 數學解讀: 動量可以被看作是過去所有梯度之加權總和。這使得參數即使在梯度為零的地方,仍能靠著「之前的方向」繼續前進。
gradient-descent-add-momentum-1gradient-descent-add-momentum-2
參考物理現實「當前梯度的反方向」+「前一步移動的方向」