*shuffle: 每一次epoch之後,重新分配一次batch。
為甚麼需要使用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
動量的創造是為了解決卡在local minima與saddle point的情況。可以想像有一顆球在曲線上滾動,只要他遇到還有更低點,那球自然會繼續滾動,我們就是要模擬這樣的狀況。
那要如何模擬呢?
movement mi可以假設是上一步運動的方向。
所以具體的算法就會變成:
θ1 = θ0 - learning rate * g
=> θ1 = θ0 + m1, m1 = λm0 - (learning rate * g), λ由我們自己調整。
可以想像成動量守恆,必須加上原本運動的方向。