每週學習新知識1-3:深度學習中的MiniBatch

我們先來看一個引子:
Mini-batching在這一節,你將瞭解什麼是 mini-batching,以及如何在 TensorFlow 裏應用它。

Mini-batching 是一個一次訓練數據集的一小部分,而不是整個訓練集的技術。它可以使內存較小、不能同時訓練整個數據集的電腦也可以訓練模型。

Mini-batching 從運算角度來說是低效的,因爲你不能在所有樣本中計算 loss。但是這點小代價也比根本不能運行模型要划算。

它跟隨機梯度下降(SGD)結合在一起用也很有幫助。方法是在每一代訓練之前,對數據進行隨機混洗,然後創建 mini-batches,對每一個 mini-batch,用梯度下降訓練網絡權重。因爲這些 batches 是隨機的,你其實是在對每個 batch 做隨機梯度下降(SGD)。


每次只選取1個樣本,然後根據運行結果調整參數,這就是著名的隨機梯度下降(SGD),而且可稱爲批大小(batch size)爲1的SGD。批大小,就是每次調整參數前所選取的樣本(稱爲mini-batch或batch)數量:

如果批大小爲N,每次會選取N個樣本,分別代入網絡,算出它們分別對應的參數調整值,然後將所有調整值取平均,作爲最後的調整值,以此調整網絡的參數。

如果批大小N很大,例如和全部樣本的個數一樣,那麼可保證得到的調整值很穩定,是最能讓全體樣本受益的改變。

如果批大小N較小,例如爲1,那麼得到的調整值有一定的隨機性,因爲對於某個樣本最有效的調整,對於另一個樣本不一定最有效(就像對於識別某張黑貓圖像最有效的調整,不一定對於識別另一張白貓圖像最有效)。

那麼批大小是否越大越好?絕非如此,很多時候恰好相反。合適的批大小對於網絡的訓練很重要。
訓練中的另一個重要概念是epoch。每學一遍數據集,就稱爲1個epoch。
舉例,若數據集中有1000個樣本,批大小爲10,那麼將全部樣本訓練1遍後,網絡會被調整1000/10=100次。但這並不意味着網絡已達到最優,我們可重複這個過程,讓網絡再學1遍、2遍、3遍數據集。
注意每一個epoch都需打亂數據的順序,以使網絡受到的調整更具有多樣性。同時,我們會不斷監督網絡的訓練效果。通常情況下,網絡的性能提高速度會越來越慢,在幾十到幾百個epoch後網絡的性能會趨於穩定,即性能基本不再提高。

參考

批大小、mini-batch、epoch的含義
深度學習之MiniBatch

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章