随机梯度下降是深度学习常用的优化算法,但是在模型优化的过程中,随机梯度下降也可能会失效,,本文主要讨论随机梯度下降及其改进算法。
一、随机梯度下降
1.1 基本概念
参考:辨析梯度下降
1.2 随机梯度下降算法失效的原因
首先,深度学习的优化本身就是一个难解的问题,因为可能会存在很多的局部最优点,此外,还有山谷和鞍点两种特殊情况。
山谷:狭长的山间小道,左右两边都是峭壁;
鞍点:一个方向上两头翘,一个方向上两头垂,而中心区域是近乎水平的平地,如下图所示。
对于山谷,需要非常准确的梯度方向和步长,才能使得优化方向沿山道向下,否则就会造成结果在山壁间来回震荡,使得收敛不稳定或者收敛速度很慢;而在鞍点处,梯度近乎为0,参数几乎没有更新,容易造成优化停滞。
二、改进方法
通过分析梯度下降算法可能失效的具体情形,对应的改进算法主要从惯性保持和环境感知两方面着手提出新的优化算法。
2.1 动量(Momentum)方法
对动量方法的直观理解,想象一个纸团在山谷和鞍点处的运动轨迹:
当纸团在山谷处时,受重力的作用,纸团沿山道向下运动,但是运动中不可避免地会撞到山壁,受弹力影响,纸团会在山谷间来回震荡;而当纸团在鞍点处时,由于质量小,由于缺少动力速度很快减为0。
但如果将纸团替换为重量更大地铁球,当其沿山道向下运动时,不容易受到山壁弹力的影响改变运动方向,当在鞍点处时,在惯性的作用下也有机会冲出平坦区域继续向下运动。
因此,动量方法的提出就考虑到了“惯性”,动量法的参数迭代公式为:
v
t
=
γ
v
t
−
1
+
η
g
t
θ
t
=
θ
t
−
1
−
v
t
v_t = \gamma v_{t-1} + \eta g_t \\ \theta_{t}=\theta_{t-1} - v_t
vt=γvt−1+ηgtθt=θt−1−vt
式中,当前前进步伐
v
t
v_t
vt由两部分组成:(1)学习率
η
\eta
η与当前梯度
g
t
g_t
gt的乘积,(2)衰减系数
γ
\gamma
γ与前一次步伐
v
t
−
1
v_{t-1}
vt−1的乘积,其中,衰减系数相当于阻力。
与随机梯度下降法相比,动量法的收敛速度更快,收敛曲线也更加稳定。
2.2 AdaGrad方法
除了从历史更新记录中,获得上一时刻的更新步伐,也可以根据所有历史更新步伐对不同参数的更新有一个累积的经验性判断。例如,在实际应用中,我们希望赋予更新频率低的参数一个较大的更新步长,而更新频率高的参数期望赋予一个较小的更新步长。AdaGrad方法就是采用“历史梯度平方和”来衡量不同参数的梯度的稀疏性,取值越小表明越稀疏,应当赋予较大的更新步长。
AdaGrad方法的更新公式表示为:
θ
t
+
1
,
i
=
θ
t
,
i
−
η
∑
k
=
0
t
g
k
,
i
2
+
ϵ
g
t
,
i
\theta_{t+1,i}=\theta_{t, i} - \frac{\eta}{\sqrt{\sum_{k=0}^{t}g_{k,i}^2+\epsilon}}g_{t,i}
θt+1,i=θt,i−∑k=0tgk,i2+ϵηgt,i
式中,
θ
t
+
1
,
i
\theta_{t+1, i}
θt+1,i表示
(
t
+
1
)
(t+1)
(t+1)时刻参数向量
θ
t
+
1
\theta_{t+1}
θt+1的第
i
i
i个参数,
g
k
,
i
g_{k,i}
gk,i表示
k
k
k时刻的梯度向量
g
k
g_k
gk的第
i
i
i个维度。分母表示对历史梯度的求和,也实现了“退火”操作,意味着随着时间的推移,学习率越来越小,保证算法最终收敛。
2.3 Adam方法
式中,
m
t
m_t
mt为一阶矩,考虑正负号,即方向性,
v
t
v_t
vt为二阶矩,只考虑大小。且,使用了衰减系数
β
1
,
β
2
\beta_1, \beta_2
β1,β2,表示时间久远的梯度值对当前梯度更新的贡献呈指数衰减。
直观理解,可能出现以下几种情况:
(1)
m
t
m_t
mt与
v
t
v_t
vt均大,说明梯度大且稳定,可能是遇到了一个大坡;
(2)
m
t
m_t
mt趋于0,
v
t
v_t
vt大,说明梯度不稳定,可能是遇到了山谷;
(3)
m
t
m_t
mt与
v
t
v_t
vt均趋于0,说明梯度趋于零,可能到达局部最优点,也可能遇到鞍点;
(4)
m
t
m_t
mt大,
v
t
v_t
vt趋于0,这种情况不会出现。
当 v t v_t vt趋于0时, η v t + ϵ \frac{\eta}{\sqrt{v_t}+\epsilon} vt+ϵη会比较大,有助于跳出局部最优或鞍点。
三、总结
- 随机梯度下降仍然是优化深度学习模型时最常用的算法,但是当遇到局部最优、鞍点、山谷这种特殊情况时可能失效;
- Momentum方法考虑了上一步的前进方向,类似“惯性”,有利于跳出鞍点或者在遇到山谷时保持更平稳的收敛;
- AdaGrad方法通过考虑历史梯度值,对各个参数的优化稀疏性进行衡量,如果历史梯度和比较大,应该减小当前的优化步长,如果历史梯度值较小,应该增加当前的优化步长;
- Adam同时考虑了“惯性”和“环境感知”,有利于跳出鞍点和局部最优。