paddle深度學習基礎之優化算法
前言
咱們前面通過優化損失函數,將之前按用的均方誤差損失函數換成了最合適的交叉熵損失函數。這一節,咱們將在優化算法上進行討論。
網絡結構
關於學習率
學習率我們大家一定不陌生,就是優化算法中的參數learning_rate。這個我們之前的例子把它比作步長。
步長越小,我們下山的速度就越慢,也就是我們下到山底需要很長時間
步長越大,我們下山的速度就越快,但是我們很容易就一步跨過山底,到另一個山上。
不同學習率(步長過大/過小)的示意圖
所以,在我們進行模型調參的時候,可以通過設置不同的學習率,觀察損失值的變化,來找到適合你這個模型的學習率。
學習率主流優化算法
-
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)
上述代碼分別對應的就是上面咱們介紹的優化算法,大家可以一一嘗試,找到適合自己模型的那一個算法。
分別對應的就是上面咱們介紹的優化算法,大家可以一一嘗試,找到適合自己模型的那一個算法。