Batch、Epoch和Iteration的理解


寫在前面:

從別處復制過來,感覺寫的清晰明了,當作復習材料,原作者鏈接在文末。

在訓練神經網絡的時候,我們難免會看到Batch、Epoch和Iteration這幾個概念。曾對這幾個概念感到模糊,看了網上的一些文章后,在這里做幾個小小的總結。

👉如有錯誤之處,還望指出。

名詞解釋:

img

【 圖片來源:https://zhuanlan.zhihu.com/p/29409502

  • Epoch(時期):
    當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱為一次>epoch。(也就是說,所有訓練樣本在神經網絡中都* 進行了一次正向傳播*一次反向傳播*
    再通俗一點,一個Epoch就是
    將所有訓練樣本訓練一次*的過程。

然而,當一個Epoch的樣本(也就是所有的訓練樣本)數量可能太過龐大(對於計算機而言),就需要把它分成多個小塊,也就是就是分成*多個Batch 來進行訓練。*

  • Batch(批 / 一批樣本):
    將整個訓練樣本分成若干個Batch。
  • Batch_Size(批大小):
    每批樣本的大小。
  • Iteration(一次迭代):
    訓練一個Batch就是一次Iteration(這個概念跟程序語言中的迭代器相似)。
  • 為什么要使用多於一個epoch?

在神經網絡中傳遞完整的數據集一次是不夠的,而且我們需要將完整的數據集在同樣的神經網絡中傳遞多次。但請記住,我們使用的是有限的數據集,並且我們使用一個迭代過程即梯度下降來優化學習過程。如下圖所示。因此僅僅更新一次或者說使用一個epoch是不夠的。

img

隨着epoch數量增加,神經網絡中的權重的更新次數也在增加,曲線從欠擬合變得過擬合。

那么,問題來了,幾個epoch才是合適的呢?

不幸的是,這個問題並沒有正確的答案。對於不同的數據集,答案是不一樣的。但是數據的多樣性會影響合適的epoch的數量。比如,只有黑色的貓的數據集,以及有各種顏色的貓的數據集。

【 來源:https://blog.csdn.net/qq_39521554/article/details/84480429

換算關系:

\text { Number of Batches }=\frac{\text { Training Set Size }}{\text { Batch Size }}
實際上,梯度下降的幾種方式的根本區別就在於上面公式中的 Batch_Size 不同。

img

【 圖片來源:https://zhuanlan.zhihu.com/p/29409502

舉個例子:

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

【 來源:https://blog.csdn.net/xiaohuihui1994/article/details/80624593

寫在最后:

參考資料:

路遠且艱,你我共勉。

作者:0與1的邂逅
鏈接:https://www.jianshu.com/p/22c50ded4cf7
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM