原文地址深度學習 | 三個概念:Epoch, Batch, Iteration 參考學習做筆記
在訓練神經網絡的時候,我們會看到Batch、Epoch和Iteration這幾個概念。
名詞解釋:
名詞 | 定義 |
---|---|
Epoch | 使用訓練集的全部數據對模型進行一次完整的訓練,被稱之為“一代訓練” |
Batch | 使用訓練集中的一小部分樣本對模型權重進行一次反向傳播的參數更新,這一小部分樣本被稱為“一批數據” |
Iteration | 使用一個Batch數據對模型進行一次參數更新的過程,被稱之為“一次訓練” |
Epoch(時期):
當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱為一次>epoch。(也就是說,所有訓練樣本在神經網絡中都 進行了一次正向傳播 和一次 反向傳播 )
再通俗一點,一個Epoch就是將所有訓練樣本訓練一次的過程。
然而,當一個Epoch的樣本(也就是所有的訓練樣本)數量可能太過龐大(對於計算機而言),就需要把它分成多個小塊,也就是就是分成多個Batch 來進行訓練。
Batch(批 / 一批樣本):
將整個訓練樣本分成若干個Batch。
Batch_Size(批大小):
每批樣本的大小。
Iteration(一次迭代):
訓練一個Batch就是一次Iteration(這個概念跟程序語言中的迭代器相似)。
為什么要使用多於一個epoch?
在神經網絡中傳遞完整的數據集一次是不夠的,而且我們需要將完整的數據集在同樣的神經網絡中傳遞多次。但請記住,我們使用的是有限的數據集,並且我們使用一個迭代過程即梯度下降來優化學習過程。如下圖所示。因此僅僅更新一次或者說使用一個epoch是不夠的。
隨着epoch數量增加,神經網絡中的權重的更新次數也在增加,曲線從欠擬合變得過擬合。
那么,問題來了,幾個epoch才是合適的呢?
不幸的是,這個問題並沒有正確的答案。對於不同的數據集,答案是不一樣的。但是數據的多樣性會影響合適的epoch的數量。比如,只有黑色的貓的數據集,以及有各種顏色的貓的數據集。
換算關系:
實際上,梯度下降的幾種方式的根本區別就在於上面公式中的 Batch_Size 不同。
舉個例子:
mnist 數據集有60000張圖片作為訓練數據,10000張圖片作為測試數據。假設現在選擇 Batch_Size =100 對模型進行訓練。迭代30000次。
每個 Epoch 要訓練的圖片數量:60000(訓練集上的所有圖像)
訓練集具有的 Batch 個數60000/100=600:
每個 Epoch 需要完成的 Batch 個數600:
每個 Epoch 具有的 Iteration 個數600:(完成一個Batch訓練,相當於參數迭代一次)
每個 Epoch 中發生模型權重更新的次數600:
訓練 10 個Epoch后,模型權重更新的次數600*10=6000:
不同Epoch的訓練,其實用的是同一個訓練集的數據。第1個Epoch和第10個Epoch雖然用的都是訓練集的60000圖片,但是對模型的權重更新值卻是完全不同的。因為不同Epoch的模型處於代價函數空間上的不同位置,模型的訓練代越靠后,越接近谷底,其代價越小。
總共完成30000次迭代,相當於完成了個30000/600=50 個Epoch