神經(jīng)網(wǎng)絡(luò)的訓練中我們常常能遇到Epoch和Iteration這兩個不同的詞。
兩個詞都表示“輪次”的意思,顯然這兩個“輪次”的含義并不相同。
在解釋這兩個詞的不同之前,我們先引入三種梯度下降策略:
1.Batch Grandient Descent(BGD,批梯度下降)
2.Stochastic Gradient Descent(SGD,隨機梯度下降)
3.Mini-Batch Gradient Descent(MBGD,小批量梯度下降)
BGD:每次迭代的時候用所有的樣本來參與參數(shù)的更新。這種方法需要同時把所有的樣本都加載進內(nèi)存進行計算,這樣無疑會導致內(nèi)存的負載過大。
SGD:每次迭代使用一個樣本來對參數(shù)進行更新。這種方法雖然速度快,但單個樣本的損失往往不能代表總體樣本的損失情況,而且單個樣本的損失往往容易受到噪聲的影響,所以這種方法往往難以收斂。
MBGD:是對上面兩種策略的折中,相當于每次迭代使用 batch_size 個樣本來對參數(shù)進行更新。若是batch_size選擇合適,則每次迭代的損失既能表征總體的損失的情況,也能降低內(nèi)存的負載壓力,提升內(nèi)存的利用率,也提升網(wǎng)絡(luò)訓練的速度。
BatchSize:一次訓練所選取的樣本數(shù)。
下面來比較Iteration 和Epoch的不同:
Iteration:使用一個batch_size數(shù)量的樣本訓練一次。一個Iteration,參數(shù)更新一次。
Epoch:所有的樣本都訓練一次,即(total / batch_size)個Iteration的訓練。一個Epoch,參數(shù)更新了(total / batch_size)次