一、神经网络优化
SGD的问题
随机梯度下降可能是在机器学习和深度学习中应用最为广泛的优化算法,但其有时学习会非常慢,特别是当梯度在水平和竖直方向上不均衡时,如下图所示:
在竖直方向上,梯度下降很快,而在水平方向上,梯度下降比较慢。这样,当采用随机梯度下降时,它会在竖直方向上下降的快而在水平方向上收敛的慢,这样优化路线就会如上如所示在窄轴上来回震荡。
动量
因为随机梯度下降算法所存在的问题,人们又引入了动量算法。带动量的SGD算法更新规则如下:
从形式上看,动量算法引入了变量v充当速度角色——它代表参数在参数空间移动的方向和速率。
为学习速率,
为超参数,取值范围在0,1之间,
的值决定了之前梯度贡献衰减的有多快(保留多少之前的梯度)
为梯度。动量算法在我看来或许可以理解为加速度和速度的关系,只使用随机梯度下降相当于只在加速度方向上降低,而引入速度概念后,加速度和速度之间一般会有一个夹角,实际的下降方向会在速度和加速度之间,如下图:
其中的
就相当于阻力或者摩擦力,如果不加
的话,速度一致不会衰减,后面的梯度相当于加速度。这样运用了动量后,优化过程中,梯度变化比加大的方向依旧会震荡(因为在梯度变化大