深度學習訓練模型中的 Epoch,Batchsize,Iterations


GOOD POST

https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9

 

Epoch

當一個完整的數據集通過了神經網絡一次並且返回了一次,這個過程稱為一次Epoch。所有訓練樣本在神經網絡中都進行了一次正向傳播和一次反向傳播。一個Epoch就是講所有訓練樣本訓練一次的過程。

一個Epoch訓練樣本數量可能太過龐大,就需要把它分成多個小塊,也就是就是分成多個Batch 來進行訓練。

一個epoch指代所有的數據送入網絡中完成一次前向計算及反向傳播的過程。由於一個epoch常常太大,計算機無法負荷,我們會將它分成幾個較小的batches。那么,為什么我們需要多個epoch呢?我們都知道,在訓練時,將所有數據迭代訓練一次是不夠的,需要反復多次才能擬合收斂。在實際訓練時,我們將所有數據分成幾個batch,每次送入一部分數據,梯度下降本身就是一個迭代過程,所以單個epoch更新權重是不夠的。

下圖展示了使用不同個數epoch訓練導致的結果。

可見,隨着epoch數量的增加,神經網絡中權重更新迭代的次數增多,曲線從最開始的不擬合狀態(右側圖),慢慢進入優化擬合狀態(中間圖),最終進入過擬合(左側圖)。

因此,epoch的個數是非常重要的。那么究竟設置為多少才合適呢?恐怕沒有一個確切的答案。對於不同的數據集來說,epoch數量是不同的。但是,epoch大小與數據集的多樣化程度有關,多樣化程度越強,epoch應該越大。

一般在神經網絡中傳遞全部的數據集一次是不夠的,我們需要將全部的數據集在同樣的神經網絡中傳遞多次,比如2萬次,這個次數也需要訓練,epoch的次數過多,容易造成過擬合,次數過少,容易使訓練的參數達不到最優。
例如,訓練數據集總共有1000個樣本。若batch_size=10,那么訓練完全體樣本集需要100次迭代,1次epoch。
  例如:訓練樣本10000條,batchsize設置為20,將所有的訓練樣本在同一個模型中訓練5遍,則epoch=5,batchsize=20, iteration=10000/20=500
 
 

Batch Size

所謂Batch就是每次送入網絡中訓練的一部分數據,而Batch Size就是每個batch中訓練樣本的數量。上文提及,每次送入訓練的不是所有數據而是一小部分數據,另外,batch size 和batch numbers不是同一個概念。

Batch size大小的選擇也至關重要。為了在內存效率和內存容量之間尋求最佳平衡,batch size應該精心設置,從而最優化網絡模型的性能及速度。

batchsize太大或者太小都不好,如果該值太小,假設batchsize=1,每次用一個數據進行訓練,如果數據總量很多時(假設有十萬條數據),就需要向模型投十萬次數據,完整訓練完一遍數據需要很長的時間,訓練效率很低;如果該值太大,假設batchsize=100000,一次將十萬條數據扔進模型,很可能會造成內存溢出,而無法正常進行訓練。

所以,我們需要設置一個合適的batchsize值,在訓練速度和內存容量之間尋找到最佳的平衡點。

幾點經驗:

相對於正常數據集,如果Batch_Size過小,訓練數據就會非常難收斂,從而導致欠擬合。增大Batch_Size,相對處理速度會變快,同時所需內存容量增加。為了達到更好的訓練效果,一般在Batchsize增加的同時,我們需要對所有樣本的訓練次數(也就是后面要講的epoch)增加,以達到最好的結果。增加Batchsize的同時,一般會讓所有樣本的訓練次數增加,這同樣會導致耗時增加,因此需要尋找一個合適的Batchsize值,在模型總體效率和內存容量之間做到最好的平衡。

 

 

Iterations

所謂 iterations 就是完成一次epoch所需的batch個數。

剛剛提到的,batch numbers 就是iterations。

簡單一句話說就是,我們有2000個數據,分成4個batch,那么batch size就是500。運行所有的數據進行訓練,完成1個epoch,需要進行4次iterations。

  假設一共有100個訓練數據,batchsize設置為10,即一共有100個數據,一次向模型中扔10個數據進行訓練,那一共要扔多少次才能將所有數據訓練一遍呢? 100/10=10 (次) ,也就是我們扔(迭代)十次就能將數據訓練一遍了,此處的扔數據的次數(迭代次數)= iteration=10 。
  每一次迭代得到的結果都會被作為下一次迭代的初始值。例如,上例中需要迭代十次,首先,所有的參數會有一個初始值,第一次迭代過后,模型中的參數會得到一批新值,這一批參數值就作為第二次迭代的輸入,通過第二次迭代得到一批優化了一些的參數值,這些參數值將作為第三次迭代的輸入……如此,通過一次次迭代,模型里的參數們一步步向最優的參數靠近……
 
 

用mnist 數據集舉例:

mnist 數據集有60000張圖片作為訓練數據,假設現在選擇 Batch_Size = 100對模型進行訓練。

  • 每個 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雖然用的都是訓練集的圖片,但是對模型的權重更新值卻是完全不同的。因為不同Epoch的模型處於代價函數空間上的不同位置,模型的訓練代越靠后,越接近谷底,其代價越小。


鏈接:
https://www.jianshu.com/p/e5076a56946c/
https://baijiahao.baidu.com/s?id=1637024752671211788&wfr=spider&for=pc
https://blog.csdn.net/weixin_38754799/article/details/109831970
https://blog.csdn.net/zhangphil/article/details/103438558


免責聲明!

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



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