在看神經網絡相關的論文時,老是能看到Epochs, Batchsize, Iterations 這些字眼,要弄明白這些專業術語,不得不先講下梯度降低的概念。算法
梯度降低網絡
梯度降低法是機器學習中經典的優化算法之一,用來求解複雜曲線的最小值。「梯度」是指某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(爲該梯度的模)。「降低」是指降低遞減的過程。機器學習
梯度降低法是屢次迭代求解的,梯度降低的迭代質量有助於使模型儘量擬合訓練數據。函數
梯度降低中有一個叫作學習率的參數,如上圖左所示,在迭代開始時,步長越大,學習率就越高。隨着點的降低,步長變短,即學習率變小。此外,偏差函數也在不斷減少。性能
咱們在訓練模型時,若是訓練數據過多,沒法一次性將全部圖像數據輸入網絡,爲了解決這個問題,咱們會將數據分紅幾個部分進行分批訓練,即batch,使得每一個批次的數據量是能夠負載的。將這些batch的數據逐一輸入到網絡中,更新神經網絡的參數,使得網絡收斂。學習
Epoch優化
一個Epoch指的是將全部的數據輸入網絡完成一次向前計算及反向傳播。因爲完成一個epoch訓練的週期較長(數據量大),一次性輸入全部數據計算機沒法負荷,因此將其分紅多個batches。那麼爲何還須要訓練多個epochs呢?咱們知道,訓練網絡時,僅僅將全部數據迭代訓練一次是不夠的,須要反覆訓練屢次才能使網絡收斂。在實際訓練時,將全部數據分紅多個batches,每次輸入一個batch大小的數據進行訓練,梯度降低自己就是一個迭代過程,因此通過單個epoch更新權重是不夠的。spa
下圖展現了通過不一樣的epoch訓練的到的結果。blog
可見,隨着epoch的增長,神經網絡中權重更新迭代的次數增長,曲線從開始的欠擬合,慢慢進入最佳擬合,epoch繼續增長,最後過擬合。內存
所以,epoch的個數是很是重要的,究竟設置多少才合適呢?恐怕沒有一個確切的答案。對於不一樣的數據集來講,最佳的epoch是不一樣的。可是,epoch的大小和數據集的多樣化程度有關,多樣化程度越強,epoch也應該越大。
Batchsize
Batch是每次輸入網絡進行訓練的批次,而batchsize是每一個batch中訓練樣本的數量。注意batch size 和 batch numbers 是不一樣的。
batchsize大小的選擇也是很是重要的,爲了在內存容量和內存效率之間取得最佳平衡,batchsize 應該用心設置,從而最優化網絡模型的性能和速度。
下圖爲不一樣的batchsize 獲得的訓練結果。其中藍色爲全部數據一塊兒輸入進行訓練,也就是隻有一個batch,batch內包含全部訓練樣本;綠色爲minibatch,即將全部數據分紅若干個batches,每一個batch內包含一小部分訓練樣本;紅色爲隨機訓練,即每一個batch內只有一個樣本。
從上圖看到,藍色全數據效果更好,當數據量較小,計算機內存能夠負載的時候,能夠採用這種訓練方式;綠色的mini分批次訓練精度略有損失;而紅色的隨機訓練,難以達到收斂狀態。
Iterations
所謂iterations就是完成一次epoch所需的batch個數。batch numbers就是iterations。
舉個例子來講,咱們有12800個訓練樣本,分紅100個batches,那麼batchsize就是128。將全部的數據輸入網絡,訓練完成一個epoch,須要通過100次iterations。