学习率设置
在我们刚刚接触深度学习时 ,对学习率只有一个很基础的认知 ,当学习率过大的时候会导致模型难以收敛 ,过小的时候会收敛速度过慢 ,其实学习率是一个十分重要的参数 ,合理的学习率才能让模型收敛到最小点而非局部最优点或鞍点 。
1 什么是学习率
学习率是训练神经网络的重要超参数之一 ,它代表在每一次迭代中梯度向损失函数最优解移动的步长 ,通常用
η
η
η 表示 。它的大小决定网络学习速度的快慢 。在网络训练过程中 ,模型通过样本数据给出预测值 ,计算代价函数并通过反向传播来调整参数 。重复上述过程 ,使得模型参数逐步趋于最优解从而获得最优模型 。在这个过程中 ,学习率负责控制每一步参数更新的步长 。合适的学习率可以使代价函数以合适的速度收敛到最小值 。2 学习率对网络的影响
梯度更新公式:
θ
=
θ
−
η
∂
∂
θ
J
(
θ
)
\theta = \theta - \eta\frac{\partial}{\partial \theta}J(\theta)
θ=θ−η∂θ∂J(θ)根据上述公式我们可以看到 ,如果学习率
η
η
η 较大,那么参数的更新速度就会很快 ,可以加快网络的收敛速度 ,但如果学习率过大,可能会导致参数在最优解附近震荡 ,代价函数难以收敛 ,甚至可能会错过最优解 ,导致参数向错误的方向更新 ,代价函数不仅不收敛反而可能爆炸(如图1a所示) 。如果学习率
η
η
η 较小 ,网络可能不会错过最优点 ,但是网络学习速度会变慢 。同时 ,如果学习率过小 ,则很可能会陷入局部最优点(如图1b所示) 。因此 ,只有找到合适的学习率 ,才能保证代价函数以较快的速度逼近全局最优解 。
对于深度学习模型训练时 ,在梯度下降法中 ,固定学习率时,当到达收敛状态时 ,会在最优值附近一个较大的区域内摆动;而当随着迭代轮次的增加而减小学习率 ,会使得在收敛时,在最优值附近一个更小的区域内摆动 。(之所以曲线震荡朝向最优值收敛 ,是因为在每一个mini-batch中都存在噪音)。如下图所示 。
3 学习率的设置
那么如何去设置学习率这个超参数呢?总体上可以分为两种:人工调整和策略调整 。
人工调整学习率一般是根据我们的经验值进行尝试 ,通常我们会尝试性的将初始学习率设为:0.1 ,0.01 ,0.001 ,0.0001等来观察网络初始阶段epoch的loss情况:
如果训练初期loss出现梯度爆炸或NaN这样的情况(暂时排除其他原因引起的loss异常) ,说明初始学习率偏大 ,可以将初始学习率降低10倍再次尝试; 如果训练初期loss下降缓慢 ,说明初始学习率偏小 ,可以将初始学习率增加5倍或10倍再次尝试; 如果训练一段时间后loss下降缓慢或者出现震荡现象 ,可能训练进入到一个局部最小值或者鞍点附近。如果在局部最小值附近 ,需要降低学习率使训练朝更精细的位置移动;如果处于鞍点附件 ,需要适当增加学习率使步长更大跳出鞍点 。 如果网络权重采用随机初始化方式从头学习,有时会因为任务复杂 ,初始学习率需要设置的比较小 ,否则很容易梯度飞掉带来模型的不稳定(振荡) 。这种思想也叫做Warmup,在预热的小学习率下 ,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快 ,模型效果更佳 。 如果网络基于预训练权重做的微调(finetune) ,由于模型在原数据集上以及收敛 ,有一个较好的起点 ,可以将初始学习率设置的小一些进行微调 ,比如0.0001 。策略调整学习率包括固定策略的学习率衰减和自适应学习率衰减 ,由于学习率如果连续衰减 ,不同的训练数据就会有不同的学习率 。当学习率衰减时 ,在相似的训练数据下参数更新的速度也会放慢 ,就相当于减小了训练数据对模型训练结果的影响 。为了使训练数据集中的所有数据对模型训练有相等的作用 ,通常是以epoch为单位衰减学习率 。
在模型优化中 ,常用到的几种学习率衰减方法有:分段常数衰减 、多项式衰减 、指数衰减 、自然指数衰减 、余弦衰减 、线性余弦衰减 、噪声线性余弦衰减 。
3.1 学习率衰减常用参数有哪些
参数名称 参数说明 learning_rate 初始学习率 global_step 用于衰减计算的全局步数,非负 ,用于逐步计算衰减指数 decay_steps 衰减步数 ,必须是正值,决定衰减周期 decay_rate 衰减率 end_learning_rate 最低的最终学习率 cycle 学习率下降后是否重新上升 alpha 最小学习率 num_periods 衰减余弦部分的周期数 initial_variance 噪声的初始方差 variance_decay 衰减噪声的方差3.2 分段常数衰减(Piecewise Decay)
分段常数衰减需要事先定义好的训练次数区间 ,在对应区间置不同的学习率的常数值 ,一般情况刚开始的学习率要大一些 ,之后要越来越小 ,要根据样本量的大小设置区间的间隔大小 ,样本量越大 ,区间间隔要小一点 。下图即为分段常数衰减的学习率变化图 ,横坐标代表训练次数 ,纵坐标代表学习率 。
3.3 指数衰减(Exponential Decay)
以指数衰减方式进行学习率的更新 ,学习率的大小和训练次数指数相关 ,其更新规则为:
d
e
c
a
y
e
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
=
l
e
a
r
n
i
n
g
_
r
a
t
e
∗
d
e
c
a
y
_
r
a
t
e
g
l
o
b
a
l
_
s
t
e
p
d
e
c
a
y
_
s
t
e
p
s
decayed{\_}learning{\_}rate =learning{\_}rate*decay{\_}rate^{\frac{global{\_step}}{decay{\_}steps}}
decayed_learning_rate=learning_rate∗decay_ratedecay_stepsglobal_step
这种衰减方式简单直接 ,收敛速度快 ,是最常用的学习率衰减方式,如下图所示 ,绿色的为学习率随训练次数的指数衰减方式 ,红色的即为分段常数衰减,它在一定的训练区间内保持学习率不变 。3.4 自然指数衰减(Natural Exponential Decay)
它与指数衰减方式相似 ,不同的在于它的衰减底数是
e
e
e,故而其收敛的速度更快 ,一般用于相对比较容易训练的网络 ,便于较快的收敛 ,其更新规则如下
d
e
c
a
y
e
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
=
l
e
a
r
n
i
n
g
_
r
a
t
e
∗
e
−
d
e
c
a
y
_
r
a
t
e
g
l
o
b
a
l
_
s
t
e
p
decayed{\_}learning{\_}rate =learning{\_}rate*e^{\frac{-decay{\_rate}}{global{\_}step}}
decayed_learning_rate=learning_rate∗eglobal_step−decay_rate
下图为为分段常数衰减 、指数衰减 、自然指数衰减三种方式的对比图 ,红色的即为分段常数衰减图 ,阶梯型曲线 。蓝色线为指数衰减图 ,绿色即为自然指数衰减图 ,很明可以看到自然指数衰减方式下的学习率衰减程度要大于一般指数衰减方式 ,有助于更快的收敛。3.5 多项式衰减(Polynomial Decay)
应用多项式衰减的方式进行更新学习率 ,这里会给定初始学习率和最低学习率取值 ,然后将会按照给定的衰减方式将学习率从初始值衰减到最低值,其更新规则如下式所示 。
g
l
o
b
a
l
_
s
t
e
p
=
m
i
n
(
g
l
o
b
a
l
_
s
t
e
p
,
d
e
c
a
y
_
s
t
e
p
s
)
d
e
c
a
y
e
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
=
(
l
e
a
r
n
i
n
g
_
r
a
t
e
−
e
n
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
)
∗
(
1
−
g
l
o
b
a
l
_
s
t
e
p
d
e
c
a
y
_
s
t
e
p
s
)
p
o
w
e
r
+
e
n
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
global{\_}step=min(global{\_}step,decay{\_}steps) \\ decayed{\_}learning{\_}rate =(learning{\_}rate-end{\_}learning{\_}rate)* \left( 1-\frac{global{\_step}}{decay{\_}steps}\right)^{power} \\ +end{\_}learning{\_}rate
global_step=min(global_step,decay_steps)decayed_learning_rate=(learning_rate−end_learning_rate)∗(1−decay_stepsglobal_step)power+end_learning_rate需要注意的是,有两个机制 ,降到最低学习率后 ,到训练结束可以一直使用最低学习率进行更新,另一个是再次将学习率调高 ,使用 decay_steps 的倍数 ,取第一个大于 global_steps 的结果 ,如下式所示.它是用来防止神经网络在训练的后期由于学习率过小而导致的网络一直在某个局部最小值附近震荡 ,这样可以通过在后期增大学习率跳出局部极小值 。
d
e
c
a
y
_
s
t
e
p
s
=
d
e
c
a
y
_
s
t
e
p
s
∗
c
e
i
l
(
g
l
o
b
a
l
_
s
t
e
p
d
e
c
a
y
_
s
t
e
p
s
)
decay{\_}steps = decay{\_}steps*ceil \left( \frac{global{\_}step}{decay{\_}steps}\right)
decay_steps=decay_steps∗ceil(decay_stepsglobal_step)
如下图所示 ,红色线代表学习率降低至最低后 ,一直保持学习率不变进行更新 ,绿色线代表学习率衰减到最低后 ,又会再次循环往复的升高降低。3.6 余弦衰减(Cosine Annealing Decay)
余弦衰减就是采用余弦的相关方式进行学习率的衰减 ,衰减图和余弦函数相似 。该方法为论文SGDR:Stochastic Gradient Descent with Warm Restarts中cosine annealing动态学习率 。其更新机制如下式所示:
g
l
o
b
a
l
_
s
t
e
p
=
m
i
n
(
g
l
o
b
a
l
_
s
t
e
p
,
d
e
c
a
y
_
s
t
e
p
s
)
c
o
s
i
n
e
_
d
e
c
a
y
=
0.5
∗
(
1
+
c
o
s
(
π
∗
g
l
o
b
a
l
_
s
t
e
p
d
e
c
a
y
_
s
t
e
p
s
)
)
d
e
c
a
y
e
d
=
(
1
−
α
)
∗
c
o
s
i
n
e
_
d
e
c
a
y
+
α
d
e
c
a
y
e
d
_
l
e
a
r
n
i
n
g
_
r
a
t
e
=
l
e
a
r
n
i
n
g
_
r
a
t
e
∗
d
e
c
a
y
e
d
global{\_}step=min(global{\_}step,decay{\_}steps) \\ cosine{\_}decay=0.5*\left( 1+cos\left( \pi* \frac{global{\_}step}{decay{\_}steps}\right)\right) \\ decayed=(1-\alpha)*cosine{\_}decay+\alpha \\ decayed{\_}learning{\_}rate=learning{\_}rate*decayed
global_step=min(global_step,decay_steps)cosine_decay=0.5∗(1+cos(π∗创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!