2024-04-30|閱讀時間 ‧ 約 22 分鐘

深度學習中的Batch與Momentum

Batch是甚麼?

  1. batch的目的是幫助我們將訓練的資料"分組",假如有120筆資料,我們想平均分成12個batch,那每一組batch就會有10筆資料(batch size = 10)。
  2. 接著,我們在更新gradient與參數θ時,就會根據每一組batch更新一次。以上面的例子,我們有12組batch,所以會更新12次

*shuffle: 每一次epoch之後,重新分配一次batch。


為甚麼需要使用Batch?

  1. batch size = N(full batch),也就是每組batch的資料量與我們的資料量一樣多的狀況 -> 比較耗時,但穩定度高。(因為每更新一次,就要將一個batch中20筆資料的loss算完加總。)
  2. batch size =1,每組batch中只有一筆資料的情況 -> 比較省時,但不穩定。


Example:

假設有我們有20筆資料要做更新,有兩種batch size: N=10 or 1

Batch size = 10的情況中,每更新一次,就必須將10筆資料的Loss加總。

而batch size =1的情況中,每次更新,都只要計算1筆資料的Loss。


但事實上,batch size比較大的情況,不一定會比batch size小的情況耗時。

-> 因為實際在運算時,可以藉由我們GPU的硬體加乘,讓多筆data可以平行運算。

-> 但有趣的是,我們會發現batch size越小,training的精準度會越好,這也可以被稱為Noisy Update。而大的batch size會得到比較不好的結果 -> optimization fail




Momentum 動量

動量的創造是為了解決卡在local minima與saddle point的情況。可以想像有一顆球在曲線上滾動,只要他遇到還有更低點,那球自然會繼續滾動,我們就是要模擬這樣的狀況。

那要如何模擬呢?

movement mi可以假設是上一步運動的方向。

所以具體的算法就會變成:

θ1 = θ0 - learning rate * g

=> θ1 = θ0 + m1, m1 = λm0 - (learning rate * g), λ由我們自己調整。

可以想像成動量守恆,必須加上原本運動的方向。



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.