姓名:蘆凱 學號:17011210546
轉載自:公眾號“習悅智能”,原文鏈接:https://mp.weixin.qq.com/s/tEOvxPRPAPndNk3thT8EZA
【嵌牛導讀】Epoch,Batchsize,Iterations,這三個都是深度學習訓練模型時經常遇到的概念。你一定有過這樣的時刻,面對這幾個詞傻傻分不清楚,這三個概念究竟是什么,它們又有什么區別?
【嵌牛鼻子】深度學習,梯度下降,Epoch,Batchsize,Iterations
【嵌牛提問】深度學習中的Epoch,Batchsize,Iterations,都是什么意思
【嵌牛正文】
梯度下降法
一切的一切,要從機器學習中的梯度下降法說起。
首先讓我們來回顧一下這個常見的不能再常見的算法。梯度下降法是機器學習中經典的優化算法之一,用於尋求一個曲線的最小值。所謂"梯度",即一條曲線的坡度或傾斜率,"下降"指代下降遞減的過程。
梯度下降法是迭代的,也就是說我們需要多次計算結果,最終求得最優解。梯度下降的迭代質量有助於使輸出結果盡可能擬合訓練數據。

梯度下降法中有一個稱為學習率的參數,如上圖左所示,在算法開始時,步長更大,即學習率更高。隨着點的下降,步長變短,即學習率變短。此外,誤差函數也在不斷減小。
在訓練模型時,如果訓練數據過多,無法一次性將所有數據送入計算,那么我們就會遇到epoch,batchsize,iterations這些概念。為了克服數據量多的問題,我們會選擇將數據分成幾個部分,即batch,進行訓練,從而使得每個批次的數據量是可以負載的。將這些batch的數據逐一送入計算訓練,更新神經網絡的權值,使得網絡收斂。
Epoch
一個epoch指代所有的數據送入網絡中完成一次前向計算及反向傳播的過程。由於一個epoch常常太大,計算機無法負荷,我們會將它分成幾個較小的batches。那么,為什么我們需要多個epoch呢?我們都知道,在訓練時,將所有數據迭代訓練一次是不夠的,需要反復多次才能擬合收斂。在實際訓練時,我們將所有數據分成幾個batch,每次送入一部分數據,梯度下降本身就是一個迭代過程,所以單個epoch更新權重是不夠的。
下圖展示了使用不同個數epoch訓練導致的結果。

可見,隨着epoch數量的增加,神經網絡中權重更新迭代的次數增多,曲線從最開始的不擬合狀態,慢慢進入優化擬合狀態,最終進入過擬合。
因此,epoch的個數是非常重要的。那么究竟設置為多少才合適呢?恐怕沒有一個確切的答案。對於不同的數據庫來說,epoch數量是不同的。但是,epoch大小與數據集的多樣化程度有關,多樣化程度越強,epoch應該越大。
Batch Size
所謂Batch就是每次送入網絡中訓練的一部分數據,而Batch Size就是每個batch中訓練樣本的數量
上文提及,每次送入訓練的不是所有數據而是一小部分數據,另外,batch size 和batch numbers不是同一個概念~
Batch size大小的選擇也至關重要。為了在內存效率和內存容量之間尋求最佳平衡,batch size應該精心設置,從而最優化網絡模型的性能及速度。
下圖為batch size不同數據帶來的訓練結果,其中,藍色為所有數據一並送入訓練,也就是只有1個batch,batch內包含所有訓練樣本。綠色為minibatch,即將所有數據分為若干個batch,每個batch內包含一小部分訓練樣本。紅色為隨機訓練,即每個batch內只有1個訓練樣本。

上圖可見,藍色全數據效果更好,當數據量較小,計算機可以承載的時候可以采取這種訓練方式。綠色的mini分批次訓練精度略有損失,而紅色的隨機訓練,難以達到收斂狀態。
Iterations
所謂iterations就是完成一次epoch所需的batch個數。
剛剛提到的,batch numbers就是iterations。
簡單一句話說就是,我們有2000個數據,分成4個batch,那么batch size就是500。運行所有的數據進行訓練,完成1個epoch,需要進行4次iterations。
怎么樣,你成功被繞暈了嗎?