paddle深度學習基礎之優化算法

paddle深度學習基礎之優化算法

前言

咱們前面通過優化損失函數,將之前按用的均方誤差損失函數換成了最合適的交叉熵損失函數。這一節,咱們將在優化算法上進行討論。

網絡結構

img

關於學習率

學習率我們大家一定不陌生,就是優化算法中的參數learning_rate。這個我們之前的例子把它比作步長。

步長越小,我們下山的速度就越慢,也就是我們下到山底需要很長時間

步長越大,我們下山的速度就越快,但是我們很容易就一步跨過山底,到另一個山上。

img

​ 不同學習率(步長過大/過小)的示意圖

所以,在我們進行模型調參的時候,可以通過設置不同的學習率,觀察損失值的變化,來找到適合你這個模型的學習率。

學習率主流優化算法

img

  • SGD :隨機梯度下降,每次從大量訓練數據中抽取少量數據,這就會造成一種上下波動。但是總體方向都是朝着最小值走的。

  • Momentum:我們稱之爲動量梯度下降。什麼意思呢,這個算法參照了物理學中的慣性。在物體前進的過程中,速度越塊,慣性就越大,不容易收到其他方面的影響。比如籃球,重的籃球慣性大,更不容易受到手勢的小幅變形或風吹的影響。引入這個概念是因爲SGD在下降的過程中,會進行一定的波動。我們引入物理動量的概念,給梯度下降的過程加入一定的“慣性”累積,就可以減少更新路徑上的震盪!即每次更新的梯度由“歷史多次梯度的累積方向”和“當次梯度”加權相加得到。歷史多次梯度的累積方向往往是從全局視角更正確的方向,這與“慣性”的物理概念很像,也是爲何其起名爲“Momentum”的原因。

  • AdaGrad :如果說上述是從梯度方向上的考量,那麼這個算法是從學習率的大小來考量的。我們所希望的是,在梯度下降的前期,步長能夠大一些,到快要接近最低點的時候,步長小一些。這個算法的思路就是 **根據不同參數距離最優解的遠近,動態調整學習率。學習率逐漸下降,依據各參數變化大小調整學習率。**根據這個思想編寫的優化算法稱爲“AdaGrad”,Ada是Adaptive的縮寫,表示“適應環境而變化”的意思。

  • Adam :這個是算法不做過多解釋,是將AdaGrad和Monmentum兩個算法思路結合起來,也是我們現在應用的最廣泛的算法。

代碼實踐

    #四種優化算法的設置方案,可以逐一嘗試效果
    optimizer = fluid.optimizer.SGDOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.MomentumOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.AdagradOptimizer(learning_rate=0.01)
    #optimizer = fluid.optimizer.AdamOptimizer(learning_rate=0.01)

上述代碼分別對應的就是上面咱們介紹的優化算法,大家可以一一嘗試,找到適合自己模型的那一個算法。

分別對應的就是上面咱們介紹的優化算法,大家可以一一嘗試,找到適合自己模型的那一個算法。

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