天天看點

神經網絡中Epoch、Iteration、Batchsize相關了解和說明

神經網絡中Epoch、Iteration、Batchsize相關了解和說明

微信公衆号

看了半年論文,對這三個概念總是模棱兩可,不是很清楚。是以呢!我就花了半天時間,收集網上寫的很好的關于這三個概念的介紹,把他們總結到一起,希望能對大家有幫助!

batchsize:中文翻譯為批大小(批尺寸)。

簡單點說,批量大小将決定我們一次訓練的樣本數目。

batch_size将影響到模型的優化程度和速度。

為什麼需要有Batch_Size:

batchsize的正确選擇是為了在記憶體效率和記憶體容量之間尋找最佳平衡。

Batch_Size的取值:

神經網絡中Epoch、Iteration、Batchsize相關了解和說明

全批次(藍色)

如果資料集比較小,我們就采用全資料集。全資料集确定的方向能夠更好的代表樣本總體,進而更準确的朝向極值所在的方向。

注:對于大的資料集,我們不能使用全批次,因為會得到更差的結果。

迷你批次(綠色)

選擇一個适中的Batch_Size值。就是說我們標明一個batch的大小後,将會以batch的大小将資料輸入深度學習的網絡中,然後計算這個batch的所有樣本的平均損失,即代價函數是所有樣本的平均。

随機(Batch_Size等于1的情況)(紅色)

每次修正方向以各自樣本的梯度方向修正,橫沖直撞各自為政,難以達到收斂。

适當的增加Batch_Size的優點:

1.通過并行化提高記憶體使用率。

2.單次epoch的疊代次數減少,提高運作速度。(單次epoch=(全部訓練樣本/batchsize)/iteration=1)

3.适當的增加Batch_Size,梯度下降方向準确度增加,訓練震動的幅度減小。(看上圖便可知曉)

經驗總結:

相對于正常資料集,如果Batch_Size過小,訓練資料就會非常難收斂,進而導緻underfitting。

增大Batch_Size,相對處理速度加快。

增大Batch_Size,所需記憶體容量增加(epoch的次數需要增加以達到最好的結果)

這裡我們發現上面兩個沖突的問題,因為當epoch增加以後同樣也會導緻耗時增加進而速度下降。是以我們需要尋找最好的Batch_Size。

再次重申:Batch_Size的正确選擇是為了在記憶體效率和記憶體容量之間尋找最佳平衡。

iteration:中文翻譯為疊代。

疊代是重複回報的動作,神經網絡中我們希望通過疊代進行多次的訓練以達到所需的目标或結果。

每一次疊代得到的結果都會被作為下一次疊代的初始值。

一個疊代=一個正向通過+一個反向通過。

epoch:中文翻譯為時期。

一個時期=所有訓練樣本的一個正向傳遞和一個反向傳遞。

深度學習中經常看到epoch、iteration和batchsize,下面按照自己的了解說說這三個差別:

(1)batchsize:批大小。在深度學習中,一般采用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練;

(2)iteration:1個iteration等于使用batchsize個樣本訓練一次;

(3)epoch:1個epoch等于使用訓練集中的全部樣本訓練一次;

舉個例子,訓練集有1000個樣本,batchsize=10,那麼:

訓練完整個樣本集需要:

100次iteration,1次epoch。

參考連結:http://blog.csdn.net/anshiquanshu/article/details/72630012

------------------------------------------------------華麗的分割線----------------------------------------------------

神經網絡訓練中,Epoch、Batch Size、和疊代傻傻的分不清?

為了了解這些術語有什麼不同,我們需要了解一些關于機器學習的術語,比如梯度下降,幫助我們了解。

這裡簡單的總結梯度下降的含義:

梯度下降是一個在機器學習中用于尋找較佳結果(曲線的最小值)的疊代優化算法。

梯度的含義是斜率或者斜坡的傾斜度。

下降的含義是代價函數的下降。

算法是疊代的,意思是需要多次使用算法擷取結果,以得到最優化結果。梯度下降的疊代性質能使欠拟合演變成獲得對資料的較佳拟合。

神經網絡中Epoch、Iteration、Batchsize相關了解和說明

梯度下降中有一個稱為學習率的參量。如上圖左所示,剛開始學習率較大,是以下降步長更大。随着點的下降,學習率變得越來越小,進而下降步長也變小。同時,代價函數也在減小,或者說代價在減小,有時候也稱為損失函數或者損失,兩者是一樣的。(損失/代價的減小是一個概念)。

隻有在資料很龐大的時候(在機器學習中,資料一般情況下都會很大),我們才需要使用epochs,batch size,iteration這些術語,在這種情況下,一次性将資料輸入計算機是不可能的。是以,為了解決這個問題,我們需要把資料分成小塊,一塊一塊的傳遞給計算機,在每一步的末端更新神經網絡的權重,拟合給定的資料。

epoch

當一個完整的資料集通過了神經網絡一次并且傳回了一次,這個過程稱為一次epoch。然而,當一個epoch對于計算機而言太龐大的時候,就需要把它分成多個小塊。

為什麼要使用多于一個epoch?

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

神經網絡中Epoch、Iteration、Batchsize相關了解和說明

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

那麼,問題來了,幾個epoch才是合适的呢?

不幸的是,這個問題并沒有正确的答案。對于不同的資料集,答案是不一樣的。但是資料的多樣性會影響合适的epoch的數量。比如,隻有黑色的貓的資料集,以及有各種顔色的貓的資料集。

Batch Size

batch size将決定我們一次訓練的樣本數目。注意:batch size 和 number of batches是不同的。

Batch是什麼?

在不能将資料一次性通過神經網絡的時候,就需要将資料集分成幾個batch。

Iteration

Iteration是batch需要完成一個epoch的次數。

舉個例子:

有一個2000個訓練樣本的資料集。将2000個樣本分成大小為500的batch,那麼完成一個epoch需要4個iteration。

參考位址:

http://www.dataguru.cn/article-12193-1.html

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

繼續閱讀