赞
踩
学习率的参数调整是深度学习中一个非常重要的一项,Andrew NG(吴恩达)认为一般如果想调参数,第一个一般就是学习率。作者初步学习者,有错误直接提出,热烈欢迎,共同学习。(感谢Andrew ng的机器学习和深度学习的入门教程)
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是
该方法是出自论文2017 International Conference on Learning Representations (ICLR)上的,论文《SGDR: Stochastic Gradient Descent
Warm Restarts》,作者提供了源码:https://github.com/loshchil/SGDR
作者:Ilya Loshchilov & Frank Hutter;Research Scientist at AAD group with Frank Hutter. Freiburg, Germany.
其实它的权重衰减的公式为:
η
t
=
η
m
i
n
i
+
1
2
(
η
m
a
x
i
−
η
m
i
n
i
)
(
1
+
c
o
s
T
c
u
r
T
i
π
)
\eta_t = \eta_{min}^{i}+\frac{1}{2}( \eta_{max}^{i}- \eta_{min}^{i})(1+cos\frac{T_{cur}}{T_i}\pi)
ηt=ηmini+21(ηmaxi−ηmini)(1+cosTiTcurπ)
参数 | 含义 |
---|---|
η m i n i \eta_{min}^{i} ηmini | 学习率最小值 |
η m a x i \eta_{max}^{i} ηmaxi | 学习率的最大值 |
T c u r T_{cur} Tcur | 是从last_start开始后已经记录了多少个epoch |
T i T_{i} Ti | 是固定的数;一旦 T c u r = T i T_{cur} = T_{i} Tcur=Ti 代表cos为-1;因此 η t = η m i n i \eta_t=\eta_{min}^{i} ηt=ηmini T i = 50 o r T i = 100 o r T i = 200 T_{i} = 50 or T_{i} = 100 or T_{i} =200 Ti=50orTi=100orTi=200 |
瞅瞅不同参数下的学习率的衰减变化:
诶哟吗!这个乱的,可以发现根据自己不同需求设置T_i(也就是torch函数中的T_max);T_mult
瞅瞅,最后一个三角形粉色的,拟合的多快。
以余弦函数为周期,并在每个周期最大值时重新设置学习率。以初始学习率为最大学习率,以 2∗Tmax2*Tmax2∗Tmax 为周期,在一个周期内先下降,后上升。
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
参数:
参数 | 含义 |
---|---|
T_max(int) | 一次学习率周期的迭代次数,即 T_max 个 epoch 之后重新设置学习率。 |
eta_min(float) | 最小学习率,即在一个周期中,学习率最小会下降到 eta_min,默认值为 0。 |
last_epoch | 最后一个EPOCH 默认-1,可不设置 |
OK,可以发现参数名字变了,其实就变成了:
η
t
+
1
=
η
m
i
n
+
(
η
m
a
x
−
η
m
i
n
)
1
+
c
o
s
T
c
u
r
+
1
T
m
a
x
π
1
+
c
o
s
T
c
u
r
T
m
a
x
π
,
T
c
u
r
=
(
2
k
+
1
)
T
m
a
x
\eta_{t+1} = \eta_{min}+( \eta_{max}- \eta_{min})\frac{1+cos\frac{T_{cur+1}}{T_{max}}\pi}{1+cos\frac{T_{cur}}{T_{max}}\pi},T_{cur}=(2k+1)T_{max}
ηt+1=ηmin+(ηmax−ηmin)1+cosTmaxTcurπ1+cosTmaxTcur+1π,Tcur=(2k+1)Tmax
η
t
+
1
=
η
t
+
(
η
m
a
x
−
η
m
i
n
)
1
−
c
o
s
1
T
m
a
x
π
2
,
T
c
u
r
=
(
2
k
+
1
)
T
m
a
x
\eta_{t+1} = \eta_{t}+( \eta_{max}- \eta_{min})\frac{1-cos\frac{1}{T_{max}}\pi}{2},T_{cur}=(2k+1)T_{max}
ηt+1=ηt+(ηmax−ηmin)21−cosTmax1π,Tcur=(2k+1)Tmax
η _max就是初始设置的LR,T_cur是从last epoch的经历的epoch数。这玩意,就是没走一步都会更新lr。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。