深度學習中的epochs,batch_size,iterations詳解---對這三個概念說的比較清楚

馬衛飛發表於2018-06-18

深度學習框架中涉及很多引數,如果一些基本的引數如果不瞭解,那麼你去看任何一個深度學習框架是都會覺得很困難,下面介紹幾個新手常問的幾個引數。

batch

深度學習的優化演算法,說白了就是梯度下降。每次的引數更新有兩種方式。

第一種,遍歷全部資料集算一次損失函式,然後算函式對各個引數的梯度,更新梯度。這種方法每更新一次引數都要把資料集裡的所有樣本都看一遍,計算量開銷大,計算速度慢,不支援線上學習,這稱為Batch gradient descent,批梯度下降。

另一種,每看一個資料就算一下損失函式,然後求梯度更新引數,這個稱為隨機梯度下降,stochastic gradient descent。這個方法速度比較快,但是收斂效能不太好,可能在最優點附近晃來晃去,hit不到最優點。兩次引數的更新也有可能互相抵消掉,造成目標函式震盪的比較劇烈。

為了克服兩種方法的缺點,現在一般採用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把資料分為若干個批,按批來更新引數,這樣,一個批中的一組資料共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個資料集相比小了很多,計算量也不是很大。

基本上現在的梯度下降都是基於mini-batch的,所以深度學習框架的函式中經常會出現batch_size,就是指這個。 
關於如何將訓練樣本轉換從batch_size的格式可以參考訓練樣本的batch_size資料的準備

iterations

iterations(迭代):每一次迭代都是一次權重更新,每一次權重更新需要batch_size個資料進行Forward運算得到損失函式,再BP演算法更新引數。1個iteration等於使用batchsize個樣本訓練一次。

epochs

epochs被定義為向前和向後傳播中所有批次的單次訓練迭代。這意味著1個週期是整個輸入資料的單次向前和向後傳遞。簡單說,epochs指的就是訓練過程中資料將被“輪”多少次,就這樣。

舉個例子

訓練集有1000個樣本,batchsize=10,那麼: 
訓練完整個樣本集需要: 
100次iteration,1次epoch。

具體的計算公式為: 
one epoch = numbers of iterations = N = 訓練樣本的數量/batch_size

注:

在LSTM中我們還會遇到一個seq_length,其實 
batch_size = num_steps * seq_length

相關文章