您現在的位置是:首頁 > 武術
神經網路訓練 trick 之 lr 設定
- 由 架構師之家 發表于 武術
- 2021-12-17
網路lr是什麼意思
吳恩達 Coursera 第二課中有講如何選擇學習率 lr,本文是閱讀論文 Cyclical Learning Rates for Training Neural Networks,一種新的 lr 設定策略論文的筆記。
論文內容
增加 lr 短期可能會讓 loss 增大,但是長期來看對 loss 減少是有幫助的。基於上面的觀察,我們有別於傳統的 lr 指數下降,我們採用週期性調整的策略,一種最簡單的方式叫
Triangular learning rate policy
:
為什麼這種週期性變化的 lr 策略有效呢?
我們可以見知乎的一個問答有哪些學術界都搞錯了,忽然間有人發現問題所在的事情?
長期以來,人們普遍認為,的神經網路中包含很多區域性極小值(local minima),使得演算法容易陷入到其中某些點,這是造成神經網路很難最佳化的原因,但是到 2014 年,一篇論文《Identifying and attacking the saddle point problem in
high-dimensional non-convex optimization》指出高維最佳化問題中根本沒有那麼多區域性極值。作者依據統計物理,隨機矩陣理論和神經網路理論的分析,以及一些經驗分析提出高維非凸最佳化問題之所以困難,是因為存在大量的鞍點(梯度為零並且 Hessian 矩陣特徵值有正有負)而不是區域性極值。
因此在鞍點附近增加 lr,能夠讓我們快速跳出鞍點。有篇中文部落格 SGD,Adagrad,Adadelta,Adam 等最佳化方法總結和比較描述了現在各種方法在鞍點附近的最佳化,看圖:
下面回到論文,前面論文介紹了一種方法叫:triangular,
裡面需要我們確定的引數有: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 在此過程中的變化曲線。
如上圖,我們找尋 base_lr 和 max_lr 的方式是:accuacy 開始劇升的時候是一個點,accuacy 開始下坡的時候是一個點。
下面來看一個 GitHub 上對於此論文的實現。
triangular
當前迭代次數屬於哪個 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 都減半:
exp_range
這個策略是每個新的 cycle,新的 max_lr 指數下降:
幾個相關資料:
深度學習論文 - Cyclical Learning Rates for Training Neural Networks
手把手教你估算深度神經網路的最優學習率(附程式碼 & 教程)
bckenstler/CLR keras 實現