本文介紹在機器學習、深度學習的神經網路模型中,epoch
、batch
、batch size
、step
與iteration
等名詞的具體含義。
epoch
:表示將訓練資料集中的所有樣本都過一遍(且僅過一遍)的訓練過程。在一個epoch
中,訓練演算法會按照設定的順序將所有樣本輸入模型進行前向傳播、計算損失、反向傳播和引數更新。一個epoch
通常包含多個step
。
batch
:一般翻譯為“批次”,表示一次性輸入模型的一組樣本。在神經網路的訓練過程中,訓練資料往往是很多的,比如幾萬條甚至幾十萬條——如果我們一次性將這上萬條的資料全部放入模型,對計算機效能、神經網路模型學習能力等的要求太高了;那麼就可以將訓練資料劃分為多個batch
,並隨後分批將每個batch
的樣本一起輸入到模型中進行前向傳播、損失計算、反向傳播和引數更新。但要注意,一般batch
這個詞用的不多,多數情況大家都是隻關注batch size
的。
batch size
:一般翻譯為“批次大小”,表示訓練過程中一次輸入模型的一組樣本的具體樣本數量。前面提到了,我們在神經網路訓練過程中,往往需要將訓練資料劃分為多個batch
;而具體每一個batch
有多少個樣本,那麼就是batch size
指定的了。
step
:一般翻譯為“步驟”,表示在一個epoch
中模型進行一次引數更新的操作。通俗地說,在神經網路訓練過程中,每次完成對一個batch
資料的訓練,就是完成了一個step
。很多情況下,step
和iteration
表示的是同樣的含義。
iteration
:一般翻譯為“迭代”,多數情況下就表示在訓練過程中經過一個step
的操作。一個iteration
包括了一個step
中前向傳播、損失計算、反向傳播和引數更新的流程。當然,在某些情況下,step
和iteration
可能會有細微的區別——有時候iteration
是指完成一次前向傳播和反向傳播的過程,而step
是指透過最佳化演算法對模型引數進行一次更新的操作。但是絕大多數情況下,我們就認為二者是一樣的即可。
以上是對這些名詞的解釋,我們將他們帶入實際的例子就更好理解了。
假設我們現在有一個訓練資料集(這個資料集不包括測試集),其中資料的樣本數量為1500
。那麼,我們將這1500
條資料全部訓練1
次,就是一個epoch
。其中,由於資料量較大(其實1500
個樣本在神經網路研究中肯定不算大,但是我們這裡只是一個例子,大家理解即可),因此我們希望將其分為多個batch
,分批加以訓練;我們決定每1
批訓練100
條資料,那麼為了將這些資料全部訓練完,就需要訓練15
批——在這裡,batch size
就是100
,而batch
就是15
。而前面我們提到,每次完成對一個batch
資料的訓練,就是完成了一個step
,那麼step
和iteration
就也都是15
。
以上是我們對這一資料集加以1
次訓練(1
個epoch
)的情況,而一般情況下我們肯定是需要訓練多次的,也就是多個epoch
。我們假設我們需要訓練3
個epoch
,相當於需要將這1500
個樣本訓練3
次。那麼,step
和iteration
都會隨著epoch
的改變而發生改變——二者都變為45
,因為15 * 3
。但是,batch
依然是15
,因為其是在每一個epoch
的視角內來看待的,和epoch
的具體大小沒有關係。
至此,大功告成。