SGD:(沿着梯度负方向更新参数)

神经网络更新权重是指的什么 神经网络梯度更新_缩放

神经网络更新权重是指的什么 神经网络梯度更新_过拟合_02

在上图中x方向的长度远大于其他方向,损失函数在水平方向上比较浅,在垂直方向上比较深。如上图,很明显下降的速度比较慢。

Momentum update:

神经网络更新权重是指的什么 神经网络梯度更新_损失函数_03

动量更新不仅考虑了当前的动量-learning_rate*dx,还考虑了之前的动量v,注意到这是两个矢量相加。换句话来理解:如果当前的速度和之前更新的速度方向相同,则变化较大,反之变化较小。如下图所示:

神经网络更新权重是指的什么 神经网络梯度更新_缩放_04

Nesterov Momentum update:

神经网络更新权重是指的什么 神经网络梯度更新_损失函数_05

这和之前Momentum更新的区别在于,将dx替换为

神经网络更新权重是指的什么 神经网络梯度更新_损失函数_06

x是当前的位置,dx也就是当前位置的梯度,现在通过上一次的位置和上一次的动量估计出本次的位置,也就是说计算的是估计目的位置的梯度。

神经网络更新权重是指的什么 神经网络梯度更新_缩放_07

AdaGrad update:

神经网络更新权重是指的什么 神经网络梯度更新_神经网络更新权重是指的什么_08

相比于SGD只是在分母上多除了一个式子,这可以看作是对learing_rate的缩放,也就是说现在的学习率是动态的。如果dx梯度越大,学习率越小。Adagrad的一大优势时可以避免手动调节学习率,比如设置初始的缺省学习率为0.01,然后就不管它,另其在学习的过程中自己变化。当然它也有缺点,就是它计算时要在分母上计算梯度平方的和,由于所有的参数平法必为正数,这样就造成在训练的过程中,分母累积的和会越来越大。

RMSProp update:

神经网络更新权重是指的什么 神经网络梯度更新_神经网络更新权重是指的什么_09

Adam update:

神经网络更新权重是指的什么 神经网络梯度更新_缩放_10

训练多个模型,对测试结果取平均,提升2%效果。但是训练多个模型非常消耗时间。就有了接下来的dropout

Dropout:

神经网络更新权重是指的什么 神经网络梯度更新_损失函数_11

在训练的过程中,神经元以一定概率失活,这样就可以看作一个全新的模型。在测试时候所有的神经元都参与计算,计算的结果乘以相应的dropout概率。

dropout可以防止过拟合并减少计算参数的数量。一般来讲网络前面几层dropout数量比后面的几层少。