一、epoch、batch_size和iteration名詞解釋,關系描述
- epoch:所有的樣本空間跑完一遍就是一個epoch;
- batch_size:指的是批量大小,也就是一次訓練的樣本數量。我們訓練的時候一般不會一次性將樣本全部輸入模型,而是分批次的進行訓練,每一批里的樣本數量就是batch_size;
- iteration:1個iteration就是一個batch_size訓練結束。
他們之間是存在數學關系的,舉個例子,假如一共有2000個樣本,我設置batch_size為100,那么將所有樣本訓練完成1次的話,iteration就是2000/100=20個,這樣就很清晰了。
二、問題思考
通常情況下,batch_size和epoch作為超參,需要自己設定。但要明確,只有在數據很龐大的時候(在機器學習和神經網絡中,數據一般情況下都會很大),我們才需要使用epoch,batch size,iteration這些術語,在這種情況下,一次性將數據輸入計算機是不可能的。因此,為了解決這個問題,我們需要把數據分成小塊,一塊一塊的傳遞給計算機,在每一步的末端更新神經網絡的權重,擬合給定的數據。那么問題就來了:
- batch_size設置多少比較合適呢?
設置batch_size是會影響到我們模型的優化速度和程度的,它是在尋找一種內存效率和內存容量之間的平衡,是很重要的。那么batch_size設置為多少比較合適呢,准確的說,沒有一個標准答案,需要根據自己的數據量大小來定。
適當的增加batch_size有以下的優勢:
1.通過並行化提高內存利用率。
2.單次epoch的迭代次數減少,提高運行速度。
3.適當的增加Batch_Size,梯度下降方向准確度增加,訓練震動的幅度減小。
但也要清楚地認識到:相對於正常數據集,如果batch_size過小,訓練數據就會非常難收斂,從而導致underfitting。增大batch_size,相對處理速度加快。增大batch_size, 所需內存容量增加(epoch的次數需要增加以達到最好的結果)
所以發現沒有,上面兩個是互相矛盾的問題,因為當epoch增加以后同樣也會導致耗時增加從而速度下降。因此我們需要尋找最適合的batch_size。
- 1個epoch不是所有的樣本都跑完了嗎?為什么epoch還需要設置?幾個epoch才是合適的呢?
我們跑完所有的樣本確實只需要1個epoch,但是這樣訓練的得到的模型,它的參數卻不夠好,我們需要把完整的數據樣本在同樣的網絡中跑多次(每一次的參數是不一樣的哦),以使得我們的參數最優化,從而損失函數最小。隨着epoch數量增加,神經網絡中的權重的更新次數也在增加,曲線也從欠擬合變得過擬合,所以合適的epoch次數也是一個重要的參數。

三、總結
- epoch、batch_size、iteration都是模型的超參數,不存在最好的,只有最合適的;
- 他們存在數學關系,指定了epoch和batch_size就能知道iteration是多少了;
- 他們都與我們模型訓練的最終結果密切相關,參數的最優化、訓練的速度、模型的過擬合、欠擬合都或多或少有關系,所以搞清楚這幾個基礎概念很有必要。
