【零基礎】神經網絡優化之mini-batch


一、前言

  回顧一下前面講過的兩種解決過擬合的方法:

  1)L0、L1、L2:在向前傳播、反向傳播后面加個小尾巴

  2)dropout:訓練時隨機“刪除”一部分神經元

  本篇要介紹的優化方法叫mini-batch,它主要解決的問題是:實際應用時的訓練數據往往都太大了,一次加載到電腦里可能內存不夠,其次運行速度也很慢。那自然就想到說,不如把訓練數據分割成好幾份,一次學習一份不就行了嗎?前輩們試了試發現不僅解決了內存不足的問題,而且網絡“收斂”的速度更快了。由於mini-batch這么棒棒,自然是神經網絡中非常重要的一個技術,但實際實現時你會發現“真的太簡單了”。

二、batch、mini-batch、隨機梯度下降

  這里先解釋幾個名詞,可以幫助大家更好的理解mini-batch。

  1)之前我們都是一次將所有圖片輸入到網絡中學習,這種做法就叫batch梯度下降

  2)與batch對應的另一種極端方法是每次就只輸入一張圖片進行學習,我們叫隨機梯度下降

  3)介於batch梯度下降和隨機梯度下降之間的就是我們現在要整的,叫mini-batch梯度下降

三、mini-batch大小、洗牌

  前面說,mini-batch是將待訓練數據分割成若干份,一次學習一份。那每一份具體包含多少個圖片合適呢?實際上是沒有什么特定標准的,但這個數值又切實影響着神經網絡的訓練效果,一般來說就是建議“設置為2的若干次方,如64、128、256、1024等等”。你可以先隨便設置一個數看看效果,效果一般再調調。

  “洗牌”是mini-batch的一個附加選項,因為我們是將訓練數據分割成若干份的,分割前將圖片的順序打亂就是所謂的“洗牌”了,這樣每一次mini-batch學習的圖片都不一樣為網絡中增加了一些隨機的因素。具體原理上不知道有啥特別的,但實踐中確實優化了網絡。

四、mini-batch實現與對比

  完整的實現代碼是基於之前“深層神經網絡解析”的,下載方式見文末。這里我做了個簡單的實驗,下圖中分別是無mini-batch、不帶洗牌的mini-batch、帶洗牌的mini-batch運行效果。

無mini-batch:

不帶洗牌的mini-batch:

帶洗牌的mini-batch:

  可以看到,使用mini-batch后網絡可以迅速收斂。使用了mini-batch的網絡僅用了400次就達到了普通網絡2000次的訓練效果。由於求解的問題不算很難,所以使用了洗牌的mini-batch與普通的mini-batch似乎沒啥差別,不過還是能看出來效果還是好了一點的(不過會使用更長的時間來訓練)。

完整實現代碼可以關注公眾號“零基礎愛學習”回復“AI11”獲取。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM