lec6 训练神经网络2

来源:互联网 发布:oracle 数据库备份 编辑:程序博客网 时间:2024/06/05 12:45

参数的更新:

详见 http://blog.csdn.net/fffupeng/article/details/72771325

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

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

Momentum update:

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

Nesterov Momentum update:

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

clipboard

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

AdaGrad update:

clipboard

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

RMSProp update:

clipboard

Adam update:

clipboard[1]

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

Dropout:

clipboard[2]

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

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

原创粉丝点击