由於在深度學習中, 優化器的學習率需要不斷地調整,今天就來總結一下幾種常用的學習率調整方法.
一. step
採用均勻降低的方式, 比如每次降低為原來的0.1倍.
lr = self.lr * (gamma ** (epoch // self.lr_step))
#self.lr: 初始學習率
#gamma: 每次衰減的倍數
#epoch: 當前的輪數
#self.lr_step: 學習率衰減間隔的epoch數
pytorch中的函式方法:
二. multistep
採用非均勻降低的策略,非均勻主要指降低的step間隔不是均勻的.
pytorch中的函式方法:
三. poly策略
lr = self.lr * pow((1 - 1.0 * iter / maxiter), power)
# iter = epoch * iters_per_epoch + i
# maxiter = num_epochs * iters_per_epoch
# power用來控制學習率曲線的形狀, power<1, 曲線凸起來,下降慢後快 ;power>1, 凹下去, 下降先快後慢
四. 余弦退火學習率調整(cosine )
隨著迭代次數的增加,余弦值首先緩慢下降嗎然後加速下降, 再次緩慢下降.
lr = 0.5 * self.lr * (1 + math.cos(1.0 * iter / maxiter * math.pi))
pytorch中的函式方法如下:
五. sgdr調整(帶重啟的sgd演算法)
在訓練時,梯度下降演算法可能陷入區域性最小值,而不是全域性最小值, 梯度下降演算法可以通過突然提高學習率來跳出區域性最小值並找到通向全域性最小值的路徑.這種方式被成為帶重啟的隨機梯度下降方法(stochastic gradient descent with restrats, sgdr).
pytorch中的函式方法如下:
還是感覺step均勻下降最好用, 雖說學習率不是連續變化, 但是簡單實用.在每個批次儲存模型的時候最好也能夠儲存其相應的學習率引數, 以便於下次可以接著訓練(防止訓練過程因為意外而中斷)
Pytorch學習率更新
自己在嘗試了官方的 後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧 import torch import matplotlib.pyplot as plt matplotlib inline from...
Pytorch學習率更新
自己在嘗試了官方的 後就想提高訓練的精度就想到了調整學習率,但固定的學習率肯定不適合訓練就嘗試了幾個更改學習率的方法,但沒想到居然更差!可能有幾個學習率沒怎麼嘗試吧 import torch import matplotlib.pyplot as plt matplotlib inline from...
分層學習率設定和學習率衰減(pytorch)
在使用bert或者其它預訓練模型進行微調,下接其它具體任務相關的模組時,會面臨這樣乙個問題,bert由於已經進行了預訓練,引數已經達到了乙個較好的水平,如果要保持其不會降低,學習率就不能太大,而下接結構是從零開始訓練,用小的學習率訓練不僅學習慢,而且也很難與bert本體訓練同步。因此在訓練時候就需要...