Batch Size
我們進行 Gradient Descent 時,使用 Stochastic Gradient Descent 的確會讓整個訓練的速度變得比較快速,而且擬合的狀況並不會太差,但在實務上我們更常使用的方式是利用 mini batch 來進行訓練。
如上圖,我們在使用 keras 進行 model fit 時便會要求輸入 batch_size
以及 epochs
兩個參數來確認我們要用什麼樣子的資料進行練,又要訓練多少輪次。
就上圖的例子來看,當我們更新一次參數後,會隨機選取一個 batch 計算這個 batch 的 total loss,不再是像以往一樣計算整個 dataset 的 total loss,接著再利用計算出來的 batch total loss 進行一次參數更新,然後再利用另外一個隨機選取的 batch 計算 loss......重複至所有 batch 都輪完一遍,這便是一個 epoch。
1 | mini_batch= 1 ....... Stochastic Gradient Descent |
然而,絕大多數人會有一個疑問是,不管我們取 mini_batch 等於多少,計算 loss 的資料數量不是還是一樣嗎 ?
的確,計算的資料總量的確相同,但在實務上操作的速度就是會不一樣,主要發生這種差異的原因是在於我們 利用 GPU 進行平行矩陣運算
利用 GPU 進行平行運算,較大的 batch size 便會有較快的運算速度。
既然這樣,那我們為何不就直接把 mini batch 數量設為所有資料的數量就好了 ?
因為要考量到 GPU 平行運算的能力,GPU也是會有上限的,如果我們資料量一大,這樣做就有可能會讓整個訓練 train 不起來。