CS231n李飞飞计算机视觉 神经网络训练细节part2上

神经网络训练细节part2上

参数更新机制

  1. SGD
  2. Momentum update
  3. Nesterov Momentum update
  4. AdaGrad update
  5. RMSProp update
  6. Adam update

SGD

随机梯度下降:

x += - learning_rate * dx

特点:如果在水平方向上梯度较小,而在垂直方向上梯度较大,会造成在水平方向更新较慢,而在垂直方向上造成上下抖动。收敛速度慢。

Momentum update

动量更新

v = mu*v - learning_rate * dx
x += v

借用物理学动量的思想,给参数更新加上一个动量。其中mu是超参数,通常设置在0.5到0.9之间,v的初始值为0。

特点:(1)收敛速度比SGD快。(2)从实现可以看出动量更新会逐渐放慢速度,最终停下来。

Nesteriov Momentum update

不同于动量更新,动量更新是当前的梯度加上当前的动量值,得到实际更新的方向,而Nestreriov Momentum update是用当前的动量加上预测的梯度得到更新的方向。

左边:

v_t=\mu v_{t-1}-learning\; rate\bigtriangledown f(\Theta _{t-1})\\ \theta_{t}=\theta _{t-1}+v_t

右边:

v_t=\mu v_{t-1}-learning\: rate\bigtriangledown f(\Theta _{t-1}+\mu v_{t-1})\\ \theta_{t}=\theta _{t-1}+v_t

特点:比前面两种更新速度更快地向最优解靠近。

AdaGrad update

cache += dx**2
x += learning_rate * dx / (np.sqrt(cache) + 1e-7 )

在更新时,考虑到了数据每一维的规模。其中1e-7是为了防止分母为0的情况出现。

特点:(1)补偿措施。比如垂直方向上梯度较大,水平方向上梯度较大,在用AdaGrad进行更新参数时,就会用垂直方向上的梯度除以对应的cache会使更新的梯度值较小,而同理会使水平方向上的梯度值较大,这在一定程度上是一种补偿措施。因为网络很多情况下需要在梯度大的方向上得到梯度叫较小的更新。(2)网络最终会停止。因为cache会不断变大,会使更新步长越来越小,最终会使网络停止更新,而网络需要不断更新。

RMSProp update

cache = dacay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + 1e-7)

该方法对AdaGrad的最终停止更新做出了改善,decay_rate是一个超参数,名为衰减率,一般设置为0.99。

特点:具备AdaGrad的全部优点,并且不会过早停止。

Adam update

m = beta1*m + (1-beta1)*dx
v = beta1*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + 1e-7)

是动量和RMSProp的一种结合。

实际上实现的时候会有偏置矫正,一开始的时候数据可能不正确,在最初几次更新中,使m和v较大,不会过小。

m = beta1*m + (1-beta1)*dx
v = beta1*v + (1-beta2)*(dx**2)
m /= 1-beta1**t
v /= 1-beta2**t
x += - learning_rate * m / (np.sqrt(v) + 1e-7)

学习率:最初使用较高的学习率,然后逐渐减小学习率。

猜你喜欢

转载自blog.csdn.net/wangchy29/article/details/86755056
今日推荐