预热学习率的作用warmup
學習率是神經網絡訓練中最重要的超參數之一,針對學習率的優化方式很多,Warmup是其中的一種
(一)、什么是Warmup?
Warmup是在ResNet論文中提到的一種學習率預熱的方法,它在訓練開始的時候先選擇使用一個較小的學習率,訓練了一些epoches或者steps(比如4個epoches,10000steps),再修改為預先設置的學習來進行訓練。
(二)、為什么使用Warmup?
由于剛開始訓練時,模型的權重(weights)是隨機初始化的,此時若選擇一個較大的學習率,可能帶來模型的不穩定(振蕩),選擇Warmup預熱學習率的方式,可以使得開始訓練的幾個epoches或者一些steps內學習率較小,在預熱的小學習率下,模型可以慢慢趨于穩定,等模型相對穩定后再選擇預先設置的學習率進行訓練,使得模型收斂速度變得更快,模型效果更佳。
ExampleExampleExample:Resnet論文中使用一個110層的ResNet在cifar10上訓練時,先用0.01的學習率訓練直到訓練誤差低于80%(大概訓練了400個steps),然后使用0.1的學習率進行訓練。
(三)、Warmup的改進
(二)所述的Warmup是constant warmup,它的不足之處在于從一個很小的學習率一下變為比較大的學習率可能會導致訓練誤差突然增大。于是18年Facebook提出了gradual warmup來解決這個問題,即從最初的小學習率開始,每個step增大一點點,直到達到最初設置的比較大的學習率時,采用最初設置的學習率進行訓練。
warmup_proportion表示,慢熱學習的比例。比如warmup_proportion=0.1,總步數=100,那么warmup步數就為10。在1到10步中,學習率會比10步之后低,10步之后學習率恢復正常。
在1到10步之間,學習率的改變一般有以下幾種方式:
“warmup_cosine”: WarmupCosineSchedule,
“warmup_constant”: WarmupConstantSchedule,
“warmup_linear”: WarmupLinearSchedule
總結
以上是生活随笔為你收集整理的预热学习率的作用warmup的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多版本python共存,安装三方库到指定
- 下一篇: pythonbug