优化算法SGD+Momentum、AdaGrad、RMSprop、Adam——史上超级全,解释详细

鞍点既不是极大值也不是极小值的临界点,一个方向是极小值,另一个方向是极大值,

2.一维问题中:局部极小值和鞍点的梯度均为0

高维问题中:从局部极小值点向附近任意方向运动,损失函数都会增大很多;若从鞍点出发,会存在许多方向向上增大的情况。这个问题在参数量大的神经网络愈发凸显,局部极小值问题反而少一些。

大部分点集中在鞍点附近,故在靠近鞍点附近移动时,前进都会非常缓慢。

为了解决2.问题,加入了一个带动量的SGD,即SGD+Momentum:有机会跳出局部最小值点

有梯度噪声存在时,动量会使曲线更加平稳的到达最小值点,而不会直线之字形曲线,因为加入动量会使得有效减少朝敏感方向增加。
优化算法SGD+Momentum、AdaGrad、RMSprop、Adam——史上超级全,解释详细_第1张图片

在速度的方向上向前走,而不是在梯度的方向上向前走。超参数rho与摩擦系数相关,即每一步都使用旧的速度然后通过摩擦系数衰减,然后再加上当前的梯度,可以看作是最近梯度平均的平滑移动。并且在梯度上有一个能够及时回来的指数衰减权重。

形式如下:
v t + 1 = ρ v t + ▽ f ( x t ) x t + 1 = x t − α v t + 1 v_{t+1}=\rho v_{t}+ \bigtriangledown f(x_{t})\\ x_{t+1}=x_{t}-\alpha v_{t+1} vt+1=ρvt+f(xt)xt+1=xtαvt+1

加入了动量以后,下降速度会超快,而且通过梯度为零的局部最优和鞍点,仍旧有速度。
如何处理条件比较差的点,当梯度比较小时,如果p表现很好,那么就会快速通过条件比较差的点。

1.高条件数问题:该点是海森矩阵最大奇异值和最小奇异值之比,在某个方向敏感,但在其他方向则不敏感。

出现Nesterov Momentum:不会那么剧烈的通过局部极小值点

在取得速度的方向上继续走,若速度有一点点的速度,加入梯度信息。
优化算法SGD+Momentum、AdaGrad、RMSprop、Adam——史上超级全,解释详细_第2张图片
v t + 1 = ρ v t − α ▽ f ( x t + ρ v t ) x t + 1 = x t + v t + 1 v_{t+1}=\rho v_{t}-\alpha \bigtriangledown f(x_{t}+\rho v_{t})\\ x_{t+1}=x_{t}+v_{t+1} vt+1=ρvtαf(xt+ρvt)xt+1=xt+vt+1

无法同时计算损失函数和梯度,用还原法改进此公式得到
x ~ t = x t + ρ v t v t + 1 = ρ v t − α ▽ f ( x ~ t ) x ~ t + 1 = x ~ t + v t + 1 + ρ ( v t + 1 − v t ) \widetilde{x}_{t}=x_{t}+\rho v_{t}\\ v_{t+1}=\rho v_{t}-\alpha \bigtriangledown f(\widetilde{x}_{t})\\ \widetilde{x}_{t+1}=\widetilde{x}_{t}+v_{t+1}+\rho (v_{t+1}-v_{t}) x t=xt+ρvtvt+1=ρvtαf(x t)x t+1=x t+vt+1+ρ(vt+1vt)
对比之前的,有一定的正修正,且不会如此激烈地越过局部极小值点

如果经过两边坡度极陡的局部极小点,那么是否有足够的速度爬出这个局部极小点(坏点)呢?

事实上,出现这样的情况,代表你的数据已经过拟合了,若提高训练集的数量,如此窄的也会消失。

AdaGrad:可以更好的避开鞍点

其实是收集梯度地平方项,然后再去除以这个梯度平方项总和,这会导致梯度较小的地方,除后的数反而变大,即加速在梯度维度上的学习速度,反之变化小,随着时间的递增,步长会逐渐减小,这在凸函数中理论证明是有效的。
g r a d _ s q u a r e d = 0 w h i l e T r u e :    d x = c o m p u t e r _ g r a d i e n t ( x )    g r a d _ s q u a r e d + = d x ∗ d x    x − = l e a r n i n g _ r a t e ∗ d x / ( n p . s q r t ( g r a d _ s q u a r e d ) + 1 e − 7 ) grad\_squared = 0\\ while True:\\ \ \ dx=computer\_gradient(x)\\ \ \ grad\_squared+=dx*dx\\ \ \ x-=learning\_rate*dx/(np.sqrt(grad\_squared)+1e-7) grad_squared=0whileTrue:  dx=computer_gradient(x)  grad_squared+=dxdx  x=learning_ratedx/(np.sqrt(grad_squared)+1e7)

但是随着时间的增加,你会逐渐慢下来,然后收敛,因为梯度平方项累加是不断增大的。

变形得到RMSProp:加上了动量

并不是给梯度本身加上了动量,而是给梯度平方项加上了动量,改进的目的是让grad_squared按照一定比率下降。
g r a d _ s q u a r e d = 0 w h i l e T r u e :    d x = c o m p u t e r _ g r a d i e n t ( x )    g r a d _ s q u a r e d + = d e c a y _ r a t e ∗ g r a d _ s q u a r e d + ( 1 − d e c a y _ r a t e ) ∗ d x ∗ d x    x − = l e a r n i n g _ r a t e ∗ d x / ( n p . s q r t ( g r a d _ s q u a r e d ) + 1 e − 7 ) grad\_squared = 0\\ while True:\\ \ \ dx=computer\_gradient(x)\\ \ \ grad\_squared+=decay\_rate*grad\_squared+(1-decay\_rate)*dx*dx\\ \ \ x-=learning\_rate*dx/(np.sqrt(grad\_squared)+1e-7) grad_squared=0whileTrue:  dx=computer_gradient(x)  grad_squared+=decay_rategrad_squared+(1decay_rate)dxdx  x=learning_ratedx/(np.sqrt(grad_squared)+1e7)

由于梯度平方项被衰减,可能造成训练总是一直变慢,但是它可以在每一个维度进行调整,在每个维度上做优化,更好的避开鞍点。

结合RMSProp和动量 Adam:

g r a d _ s q u a r e d = 0 g r a d _ s q u a r e d 2 = 0 w h i l e T r u e :    d x = c o m p u t e r _ g r a d i e n t ( x )    g r a d _ s q u a r e d + = d e c a y _ r a t e 1 ∗ g r a d _ s q u a r e d + ( 1 − d e c a y _ r a t e 1 ) ∗ d x    g r a d _ s q u a r e d 2 + = d e c a y _ r a t e 2 ∗ g r a d _ s q u a r e d 2 + ( 1 − d e c a y _ r a t e 2 ) ∗ d x ∗ d x    x − = l e a r n i n g _ r a t e ∗ g r a d _ s q u a r e d / ( n p . s q r t ( g r a d _ s q u a r e d 2 ) + 1 e − 7 ) grad\_squared = 0\\ grad\_squared2 = 0\\ while True:\\ \ \ dx=computer\_gradient(x)\\ \ \ grad\_squared+=decay\_rate1*grad\_squared+(1-decay\_rate1)*dx\\ \ \ grad\_squared2+=decay\_rate2*grad\_squared2+(1-decay\_rate2)*dx*dx\\ \ \ x-=learning\_rate*grad\_squared/(np.sqrt(grad\_squared2)+1e-7) grad_squared=0grad_squared2=0whileTrue:  dx=computer_gradient(x)  grad_squared+=decay_rate1grad_squared+(1decay_rate1)dx  grad_squared2+=decay_rate2grad_squared2+(1decay_rate2)dxdx  x=learning_rategrad_squared/(np.sqrt(grad_squared2)+1e7)

优化算法SGD+Momentum、AdaGrad、RMSprop、Adam——史上超级全,解释详细_第3张图片

N-Adam:RMSProp+Nesterov Momentum

你可能感兴趣的:(算法,神经网络,随机梯度下降)