本文轉載自簡書https://www.jianshu.com/p/22c50ded4cf7
寫在前面
在訓練神經網路的時候,我們難免會看到Batch、Epoch和Iteration這幾個概念,曾對這幾個概念感到模糊,看了網上的一些文章后,在這里做幾個小小的總結,
名詞解釋:

【 圖片來源:https://zhuanlan.zhihu.com/p/29409502 】
- Epoch(時期):
當一個完整的資料集通過了神經網路一次并且回傳了一次,這個程序稱為一次>epoch,(也就是說,所有訓練樣本在神經網路中都 進行了一次正向傳播 和一次反向傳播 )
再通俗一點,一個Epoch就是將所有訓練樣本訓練一次的程序,
然而,當一個Epoch的樣本(也就是所有的訓練樣本)數量可能太過龐大(對于計算機而言),就需要把它分成多個小塊,也就是就是分成多個Batch 來進行訓練,
- Batch(批 / 一批樣本):
將整個訓練樣本分成若干個Batch,
- Batch_Size(批大小):
每批樣本的大小,
- Iteration(一次迭代):
訓練一個Batch就是一次Iteration(這個概念跟程式語言中的迭代器相似),
- 為什么要使用多于一個epoch?
在神經網路中傳遞完整的資料集一次是不夠的,而且我們需要將完整的資料集在同樣的神經網路中傳遞多次,但請記住,我們使用的是有限的資料集,并且我們使用一個迭代程序即梯度下降來優化學習程序,如下圖所示,因此僅僅更新一次或者說使用一個epoch是不夠的,

隨著epoch數量增加,神經網路中的權重的更新次數也在增加,曲線從欠擬合變得過擬合,
- 那么,問題來了,幾個epoch才是合適的呢?
不幸的是,這個問題并沒有正確的答案,對于不同的資料集,答案是不一樣的,但是資料的多樣性會影響合適的epoch的數量,比如,只有黑色的貓的資料集,以及有各種顏色的貓的資料集,
【 來源:https://blog.csdn.net/qq_39521554/article/details/84480429 】
換算關系:

實際上,梯度下降的幾種方式的根本區別就在于上面公式中的 Batch_Size 不同,

【 圖片來源: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 】【 來源:https://blog.csdn.net/xiaohuihui1994/article/details/80624593 】
本文來自博客園,作者:阿儒さん,轉載請注明原文鏈接:https://www.cnblogs.com/changziru/p/17278542.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548923.html
標籤:其他
