深度學習中number of training epochs中的,epoch到底指什麼?
首先複習下神經網路的概念。
神經網路由一些相互鏈接的「神經元」組成。每個「神經元」有相應的權重。
(圖片來源:CS231n)
神經網路的神奇之處就在於權重是通過訓練自動得出的。所謂訓練,就是讓神經網路在訓練數據集上跑一遍,看看損失函數的值怎麼樣。如果損失函數的值足夠小,小到符合我們的需求,那就說明神經網路擬合得很好了,訓練大功告成了(實際上並非如此,因為僅僅知道擬合得很好並不夠,我們還要知道神經網路是不是擬合得太好了,也就是過擬合。所以還需要用測試數據集來測試是否過擬合。不過這裡就姑且就當訓練完成了把。)反之,如果損失函數的值不夠小,那就還需要繼續訓練。
神經網路在訓練數據集上跑一遍,稱為一次迭代(iteration)。
那麼epoch又是怎麼回事?
我們知道,簡單來說,深度學習就是很深很深的神經網路(這一說法並不準確,但姑且讓我們這麼說),也就是說,有很多層,每層可能有很多神經元,結構也可能比較複雜。然後相應的,數據集也可能比較大。那跑一遍(迭代)會比較慢。所以人們就想出了一個變通的辦法,就是每次只使用數據集中的部分樣本,這個數目就稱為batch size。
雖然只使用了部分樣本,但很多時候已經足以優化權重,降低損失函數了。這樣訓練效率高很多,訓練時間也能縮短不少。
不過這樣一來,一次迭代就不一定完整跑遍數據集中的所有樣本了。那在比較的時候,就不太方便直接比較迭代次數了。
比如,假設深度神經網路A經過32次迭代損失函數的值足夠低了,而深度神經網路B經過16次迭代損失函數的值足夠低了,但實際上,A的batch size可能是256,而B的batch size可能是2048。所以直接比較A和B的迭代次數並沒有什麼意義。
所以就又提出了epoch這個概念,指數據集中的所有樣本都跑過一遍。
那對於每次迭代都跑遍數據集中的樣本的情況,epoch和迭代是一樣的。否則的話,epoch就要換算。上面的例子中,假設數據集的樣本總數是4096,那A的1個epoch就需要16次迭代,而B的1個epoch只需要2次。也就是說,A經過2個epoch就訓練好了,而B需要8個epoch。
這三個詞都是在深度網路訓練中常見的概念,也常常容易混淆。
Batch-size指的是單次輸入到神經網路訓練中的樣本數目。根據輸入樣本的大小的不同,可以分為單個隨機(stochastic)、小批量(mini-batch)和整批量(batch)。Batch-size會影響到模型訓練優化的效果和效率。
單個隨機,即每次只輸入一個樣本進行訓練。那麼在進行梯度的反向傳播中就會導致出現隨機的波動,無法朝著正確的方向收斂,最終收斂速度很慢。
整批量,即一次性將數據全部輸入到模型中訓練,這種方法雖然優化效果好,訓練時收斂的波動小,方向準確。但是如果數據量過於龐大,那麼就需要超大的內存來存儲數據,因此在工程中往往不可行,無法進行訓練。
小批量,即每次選取合適的樣本數進行訓練,在可訓練的前提下,盡量讓優化的效果達到最好。
因此,Batch-size 的選擇實際上是為了在內存效率和內存容量之間尋找最佳平衡點。
Iteration(迭代次數),每一次迭代都是一次權重更新。一次迭代包括將batch-size的數據輸入到網路中,經過前向運算得到損失函數,再根據反向傳播對權重進行更新。
Epoch指的是將將所有的數據訓練的次數。即訓練過程中每個數據將被「輪」著訓練了epochs次。
那麼就能得到如下公式(給定訓練樣本數據N):
一個epoch = iteration的數目 = N/(batch-size)
舉個例子就是,對於2000個訓練數據來說,設定batch-size=10。
那麼整個訓練就有200次iteration和1次epoch。
所有樣本訓練一次,就是一個epoch。通常在一個epoch里,會分成多個批次(batch)進行訓練,每個批次中包含若干數量的訓練樣本。
推薦閱讀:
※為什麼大家發語音之後,自己還要聽一遍自己說的?
※買車跑滴滴?
※需要三十個粉絲認證,怎麼才能做到?
※第一次買電視機頂盒?