您現在的位置是:首頁 > 武術

神經網路訓練 trick 之 lr 設定

  • 由 架構師之家 發表于 武術
  • 2021-12-17
簡介maximum(0, (1-x))triangular2這個策略是每個新的 cycle,新的 max_lr 都減半:exp_range這個策略是每個新的 cycle,新的 max_lr 指數下降:幾個相關資料:深度學習論文 - Cyclic

網路lr是什麼意思

吳恩達 Coursera 第二課中有講如何選擇學習率 lr,本文是閱讀論文 Cyclical Learning Rates for Training Neural Networks,一種新的 lr 設定策略論文的筆記。

論文內容

增加 lr 短期可能會讓 loss 增大,但是長期來看對 loss 減少是有幫助的。基於上面的觀察,我們有別於傳統的 lr 指數下降,我們採用週期性調整的策略,一種最簡單的方式叫

Triangular learning rate policy

神經網路訓練 trick 之 lr 設定

為什麼這種週期性變化的 lr 策略有效呢?

我們可以見知乎的一個問答有哪些學術界都搞錯了,忽然間有人發現問題所在的事情?

長期以來,人們普遍認為,的神經網路中包含很多區域性極小值(local minima),使得演算法容易陷入到其中某些點,這是造成神經網路很難最佳化的原因,但是到 2014 年,一篇論文《Identifying and attacking the saddle point problem in

high-dimensional non-convex optimization》指出高維最佳化問題中根本沒有那麼多區域性極值。作者依據統計物理,隨機矩陣理論和神經網路理論的分析,以及一些經驗分析提出高維非凸最佳化問題之所以困難,是因為存在大量的鞍點(梯度為零並且 Hessian 矩陣特徵值有正有負)而不是區域性極值。

因此在鞍點附近增加 lr,能夠讓我們快速跳出鞍點。有篇中文部落格 SGD,Adagrad,Adadelta,Adam 等最佳化方法總結和比較描述了現在各種方法在鞍點附近的最佳化,看圖:

神經網路訓練 trick 之 lr 設定

下面回到論文,前面論文介紹了一種方法叫:triangular,

神經網路訓練 trick 之 lr 設定

裡面需要我們確定的引數有:stepsize,base_lr,max_lr,下面我們來看 step_size 怎麼選取?

假設有 5w 個訓練樣本,batchsize=100,則每個 epoch 有 500 次迭代,實驗結果表明 stepsize 設定為 2~8 倍的迭代次數比較合適。

使用 triangular 策略還給我們帶來的一個好處是我們可以知道什麼時候停止訓練:我們可以採用週期性的 lr 進行訓練 3 回,然後再繼續訓練 4 次甚至更多,能夠達到很好的效果。

下一步我們需要回答的是怎麼去選擇 base_lr,max_lr 兩個引數。

方案:設定 stepsize 和 max_iter 為一個 epoch 中迭代次數,然後 lr 從 base_lr 增大到 max_lr ,然後畫出 accuracy 在此過程中的變化曲線。

神經網路訓練 trick 之 lr 設定

如上圖,我們找尋 base_lr 和 max_lr 的方式是:accuacy 開始劇升的時候是一個點,accuacy 開始下坡的時候是一個點。

下面來看一個 GitHub 上對於此論文的實現。

triangular

神經網路訓練 trick 之 lr 設定

當前迭代次數屬於哪個 cycle 中:

cycle = np。floor(1+iterations/(2*step_size))

下面是想計算上圖中每個點其具體的 lr 值是多少,建立座標後,開始計算點 (x,y),我們知道了當前 cycle,每個 cycle 的 iter 是

2*cycle*step_size

,然後再用當前 iterations 減去這個值:

x = np。abs(iterations/step_size - 2*cycle + 1)

y 要區分是上升還是下降階段:

lr = base_lr + (max_lr-base_lr)*np。maximum(0, (1-x))

triangular2

這個策略是每個新的 cycle,新的 max_lr 都減半:

神經網路訓練 trick 之 lr 設定

exp_range

這個策略是每個新的 cycle,新的 max_lr 指數下降:

神經網路訓練 trick 之 lr 設定

幾個相關資料:

深度學習論文 - Cyclical Learning Rates for Training Neural Networks

手把手教你估算深度神經網路的最優學習率(附程式碼 & 教程)

bckenstler/CLR keras 實現

Top