原文:https://blog.csdn.net/qq_18668137/article/details/80883350
此處謹作學習記錄之用。
深度學習的優化算法,說白了就是梯度下降。每次的參數更新有兩種方式。
第一種,遍歷全部數據集算一次損失函數,然后計算函數對各個參數的梯度,更新梯度。這種方式每更新一次參數都要把數據集里的所有樣本看一篇,計算量開銷大,計算速度慢,不支持在線學習,這稱為Batch gradient desecnt, 批梯度下降。
另一種,每看一個數據就算一次損失函數,然后求梯度更新參數,這個稱為隨機梯度下降,stochastic gradient descent。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,hit不到最優點。兩次參數的更新也有可能互相抵消掉,造成目標函數震盪比較劇烈。
為了克服兩種方法的缺點,現在一般采用的是一種折中手段, mini-batch gradient decent, 小批的梯度下降,這種方法把數據分為若干批,按批來更新參數。這樣,一個批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個數據集相比少了很多,計算量也不是很大。
現在用的優化器SGD是stochastic gradient descent 的縮寫,但不代表是一個樣本就更新一回,還是基於mini-batch的。
那batch, epoch, iteration代表什么呢?
- batchsize:批大小。在深度學習中,一般采用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練;
- iteration:迭代。1個迭代等於使用batchsize個樣本訓練一次;
- epoch:1個epoch等於使用訓練集中的全部樣本訓練一次,通俗的講epoch的值就是整個數據集被輪回了幾次。
batchsize最大是樣本總數N,此時就是Full batch learning;最小是1,即每次只訓練一個樣本,這就是在線學習(online Learning)。當我們分批學習時,每次使用過全部訓練數據完成一次Forward運算以及一次BP運算,完成了一次epoch。