在自己完成的幾個有關深度學習的Demo中,幾乎都出現了batch_size,iterations,epochs這些字眼,剛開始我也沒在意,覺得Demo能運行就OK了,但隨着學習的深入,我就覺得不弄懂這幾個基本的概念,對整個深度學習框架理解的自然就不夠透徹,所以今天讓我們一起了解一下這三個概念。
1.batch_size
深度學習的優化算法,用大白話來說其實主要就是梯度下降算法,而每次的參數權重更新主要有兩種方法。
(1)遍歷全部數據集算一次損失函數,然后算函數對各個參數的梯度,更新梯度
這種方法每更新一次參數都要把數據集里的所有樣本都看一遍,計算量開銷大,計算速度慢,不支持在線學習,這稱為Batch gradient descent,批梯度下降。
(2)stochastic gradient descent
每看一個數據就算一下損失函數,然后求梯度更新參數,這個稱為隨機梯度下降。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,hit不到最優點。兩次參數的更新也有可能互相抵消掉,造成目標函數震盪的比較劇烈。
為了克服兩種方法的缺點,現在一般采用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把數據分為若干個批,按批來更新參數,這樣,一個批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個數據
集相比小了很多,計算量也不是很大。
基本上現在的梯度下降都是基於mini-batch的,所以深度學習框架的函數中經常會出現batch_size,就是指這個意思。
2.iterations
iterations(迭代):每一次迭代都是一次權重更新,每一次權重更新需要batch_size個數據進行Forward運算得到損失函數,再BP算法(反向傳播算法)更新參數。1個iteration等於使用batchsize個樣本訓練一次。
3.epochs
epochs被定義為向前和向后傳播中所有批次的單次訓練迭代。這意味着1個周期是整個輸入數據的單次向前和向后傳遞。簡單說,epochs指的就是訓練過程中數據將被“輪”多少次,就這樣。
接下來讓我們看個例子:
假設訓練集有1000個樣本,batchsize=10,那么:
訓練完整個樣本集需要: 100次iteration,1次epoch。
具體的計算公式為: one epoch = numbers of iterations = N = 訓練樣本的數量/batch_size