一、前言
回顧一下前面講過的兩種解決過擬合的方法:
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的網路僅用了400次就達到了普通網路2000次的訓練效果。由於求解的問題不算很難,所以使用了洗牌的mini-batch與普通的mini-batch似乎沒啥差別,不過還是能看出來效果還是好了一點的(不過會使用更長的時間來訓練)。
零基礎 神經網路優化之動量梯度下降
一 序言 動量梯度下降也是一種神經網路的優化方法,我們知道在梯度下降的過程中,雖然損失的整體趨勢是越來越接近0,但過程往往是非常曲折的,如下圖所示 特別是在使用mini batch後,由於單次參與訓練的少了,這種 曲折 被放大了好幾倍。前面我們介紹過l2和dropout,它們要解決的也是 曲折 的問...
零基礎 神經網路優化之dropout和梯度校驗
一 序言 dropout和l1 l2一樣是一種解決過擬合的方法,梯度檢驗則是一種檢驗 反向傳播 計算是否準確的方法,這裡合併簡單講述,並在文末提供完整示例 中還包含了之前l2的示例,全都是在 深層神經網路解析 這篇基礎之上修改的。二 dropout 簡單來說dropout就是在每次訓練時 隨機 失效...
零基礎入門深度學習 5 迴圈神經網路
在前面的文章系列文章中,我們介紹了全連線神經網路和卷積神經網路,以及它們的訓練和使用。他們都只能單獨的取處理乙個個的輸入,前乙個輸入和後乙個輸入是完全沒有關係的。但是,某些任務需要能夠更好的處理序列的資訊,即前面的輸入和後面的輸入是有關係的。不過讀者不用擔心,本文將一如既往地對複雜的東西剝繭抽絲,幫...