機器學習課程二神經網絡訓練

在做神經網絡實驗的時候,查閱資料時看到一篇非常好的博客,在這裏轉載下來,以便將來使用。

pytorch中使用torch.optim優化神經網絡以及優化器的選擇

神經網絡優化器,主要是爲了優化我們的神經網絡,使他在我們的訓練過程中快起來,節省社交網絡訓練的時間。在pytorch中提供了torch.optim方法優化我們的神經網絡,torch.optim是實現各種優化算法的包。最常用的方法都已經支持,接口很常規,所以以後也可以很容易地集成更復雜的方法。

如何使用optimizer

要使用torch.optim,您必須構造一個optimizer對象。這個對象能保存當前的參數狀態並且基於計算梯度更新參數。

構建一個優化器

要構造一個Optimizer,你必須給它一個包含參數(必須都是Variable對象)進行優化。然後,您可以指定optimizer的參 數選項,比如學習率,權重衰減等。具體參考torch.optim中文文檔

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)

優化器的差別與選擇

這裏主要參考加速神經網絡訓練 (Speed Up Training)教程比喻出來方便大家學習,如果想知道更加詳細以及官方的解答,可以參考各種優化方法總結比較(sgd/momentum/Nesterov/adagrad/adadelta)

  • Stochastic Gradient Descent (SGD) SGD是最基礎的優化方法,普通的訓練方法, 需要重複不斷的把整套數據放入神經網絡NN中訓練, 這樣消耗的計算資源會很大.當我們使用SGD會把數據拆分後再分批不斷放入 NN 中計算. 每次使用批數據, 雖然不能反映整體數據的情況, 不過卻很大程度上加速了 NN 的訓練過程, 而且也不會丟失太多準確率.

  • Momentum 傳統的參數 W 的更新是把原始的 W 累加上一個負的學習率(learning rate) 乘以校正值 (dx). 此方法比較曲折。

Momentum優化 所以我們把這個人從平地上放到了一個斜坡上, 只要他往下坡的方向走一點點, 由於向下的慣性, 他不自覺地就一直往下走, 走的彎路也變少了. 這就是 Momentum 參數更新。

Momentum優化器

  • AdaGrad 優化學習率,使得每一個參數更新都會有自己與衆不同的學習率。與momentum類似,不過不是給喝醉酒的人安排另一個下坡, 而是給他一雙不好走路的鞋子, 使得他一搖晃着走路就腳疼, 鞋子成爲了走彎路的阻力, 逼着他往前直着走.

AdaGrad優化器

  • RMSProp 有了 momentum 的慣性原則 , 加上 adagrad 的對錯誤方向的阻力, 我們就能合併成這樣. 讓 RMSProp同時具備他們兩種方法的優勢. 不過細心的同學們肯定看出來了, 似乎在 RMSProp 中少了些什麼. 原來是我們還沒把 Momentum合併完全, RMSProp 還缺少了 momentum 中的 這一部分. 所以, 我們在 Adam 方法中補上了這種想法. AdaGrad優化器

  • Adam 計算m 時有 momentum 下坡的屬性, 計算 v 時有 adagrad 阻力的屬性, 然後再更新參數時 把 m 和 V 都考慮進去. 實驗證明, 大多數時候, 使用 adam 都能又快又好的達到目標, 迅速收斂. 所以說, 在加速神經網絡訓練的時候, 一個下坡, 一雙破鞋子, 功不可沒. Adam優化器
# SGD 就是隨機梯度下降
opt_SGD         = torch.optim.SGD(net_SGD.parameters(), lr=LR)
# momentum 動量加速,在SGD函數裏指定momentum的值即可
opt_Momentum    = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8)
# RMSprop 指定參數alpha
opt_RMSprop     = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9)
# Adam 參數betas=(0.9, 0.99)
opt_Adam        = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))

如何優化一個神經網絡

SGD 是最普通的優化器, 也可以說沒有加速效果, 而 Momentum 是 SGD 的改良版, 它加入了動量原則. 後面的 RMSprop 又是 Momentum 的升級版. 而 Adam 又是 RMSprop 的升級版. 不過從這個結果中我們看到, Adam 的效果似乎比 RMSprop 要差一點. 所以說並不是越先進的優化器, 結果越佳. 我們在自己的試驗中可以嘗試不同的優化器, 找到那個最適合你數據/網絡的優化器。如果你要查看視頻教程Optimizer 優化器

 

 

 

 

 

原創文章,轉載請註明 :pytorch中使用torch.optim優化神經網絡以及優化器的選擇 - pytorch中文網
原文出處: https://ptorch.com/news/54.html torch.optim優化神經網絡

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