優化演算(1): mini-batch gradient descent

Ray Lin
學以廣才
Published in
2 min readJun 19, 2018

小批次梯度下降 (mini-batch gradient descent)

若拿整個訓練集做梯度下降演算法時,必須處理過所有的訓練資料,才能踏出梯度下降的一小步,然後你必須再處理過整個訓練集。例如有五百萬筆資料,每處理完五百萬筆,才能再踏出梯度下降的另一小步。

一個更快的方式是,把訓練集分割成比較小的, 一堆小小的資料集,我們稱他們稱為 "mini-batches" 。所以五百萬筆訓練資料,可切成每一千筆為一小批資料,共5000批的小批資料集。用小批次梯度下降把整個訓練集處理過一次,也稱為「做一個 “epoch” 的訓練」。 “epoch” 的意思是把訓練集掃過一遍。所以五百萬筆訓練資料以批次梯度下降法訓練,等於把訓練集掃過5000遍,如同讓你走5000步的梯度下降。當你訓練非常多的資料直到收斂為止的過程,小批次梯度下降跑得比批次梯度下降還快得多。

節錄於李宏毅老師的課程與網路心得分享

對於mini-batch size選取的一些準則:

  1. 對於一般來說,如果總體樣本數量m不太大時,例如m ≤ 2000,建議直接使用Batch gradient descent。
  2. 總體樣本數m很大時,建議將樣本分成許多mini-batches。推薦常用的mini-batch size為 64, 128, 256, 512, 1024…。這些都是2的冪次。原因是計算機存儲數據一般是2的冪次,這樣設置可提高運算速度。
  3. 確保你的小批次資料 你的 X{t}, Y{t} 能塞得進去 CPU/GPU 的記憶體。(程式撰寫原則可參考這篇這篇這篇)

--

--

Ray Lin
學以廣才

善歌者,使人繼其聲;善教者,使人繼其志。其言也,約而達,微而臧,罕譬而喻,可謂繼志矣