美文网首页
神经网络的参数更新

神经网络的参数更新

作者: WZFish0408 | 来源:发表于2017-09-02 18:46 被阅读579次

这个需要翻墙的外国网站写的很好:
http://ruder.io/optimizing-gradient-descent/index.html#momentum

SGD遇到的问题

当两个方向上的梯度相差过大的时候会出现剧烈的震荡,如图:

在这个图中,垂直方向的梯度要远大于水平方向的梯度,这个时候在保证正确迭代的情况下,水平方向逐渐减小,而垂直方向开始剧烈震动,使得收敛的很慢。为了解决这个问题,提出了许多梯度下降的方法,有很好的效果。

Momentum

Momentum是为了解决剧烈震动提出的一种方法,效果如图所示:


它主要是通过添加一个参数γ在上一步的更新方向上。实现的方法是下面的式子:


η是学习速率,γ取值一般为0.9.
对于这种方法我们可以理解为我们对于前一步的变化进行了衰减,衰减率为γ,而且计算了现在的梯度,如果当前的梯度和上一次的方向一致,那么久增大这种变化,而如果方向相反则减小这种变化,参照上面的图的垂直方向,我们可以认为在垂直方向上第一次更新方向是往上的,假设变化了10,而第二次的梯度是往下的与第一次相反,在衰减后在进行调整可以认为向下移动只有5,从而减小了垂直方向的变化,达到减小震动效果。

Nestrov Momentum

Nestrov是根据Momentum进行的改进,它使得更新更加的智能更加具有前瞻性,通过公式我们可以与Momentum进行以下比较:

两者主要的区别在于梯度的计算,Momentum计算的参数在当前位置的梯度,而Nestrov首先估计了参数在更新后的大致位置,那就是参数在向上一步的方向继续运动,也就是θ-γvt-1然后计算该位置的梯度作为对更新方向的纠正,一张很形象的图是:

其中较长的蓝色的线是前一步的梯度,而棕色线是先向该方向进行移动,我认为可以理解为γvt-1,而红色的就是在更新后的位置计算的梯度,对原先的移动进行修正,最后得到当前的v也就是绿色的向量,从而对参数进行更新。
http://www.360doc.com/content/16/1010/08/36492363_597225745.shtml
这篇文章通过对原来公式的变形,可以看出该算法实际上是考虑了二阶导信息,类似于牛顿迭代法从而使得迭代更加快速。

Adagrad

一种自适应学习速率的迭代算法,主体的更新过程就是最基础的


而主要的改变在于学习速率,Adagrad的更新册率如下:

其中η为初始学习速率gt为第t次的梯度,而ε是一个防止除数为0的很小的数,一般是1*10-8,随着逐渐的更新梯度的平方和逐渐在增大,而学习速率在减小。

缺点

1.学习速率单调递减,后期学习速率很小趋近于0。
2.需要手工设置初始学习率。

Adadelta和RMSprop

两者是相同的,都是为了解决Adagrad的缺点,在Adadelta中我们通过衰减来使用最近的梯度的平方,通过使用期望来保证它不会过大而是学习率降为0.而期望的更新是带权的,这个权就是衰减系数,具体的公式如下:

ρ是衰减系数,可以理解为通过每一次的衰减只使用附近的梯度平方,较长时间之前的梯度随着衰减逐渐消失。到这一步是RMSprop,但是仍然存在超参数初始学习速率,Hinton建议学习速率为0.001γ定为0.9

Adadelta的推导

Adadelta解决了超参学习速率的问题,证明来自于:
http://www.cnblogs.com/neopenx/p/4768388.html

特点

1.训练初中期,加速效果不错,很快
2.训练后期,反复在局部最小值附近抖动

Adam

目前最好的更新方法,一般就用它。

来自:https://zhuanlan.zhihu.com/p/22252270
矩估计就是数学期望。。。。

特点:

1.结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
2.对内存需求较小
3.为不同的参数计算不同的自适应学习率
4.也适用于大多非凸优化 - 适用于大数据集和高维空间

Nadam

类似带有Nesterov动量项的Adam,公式:

能用Adam的用Nadam效果更好一点。

相关文章

  • Tensorflow简单神经网络

    神经网络参数与Tensorflow变量 tf.Variable作用是保存和更新神经网络中的参数 其它生成器 函数随...

  • 调参

    参数更新 神经网络的学习目的是找到使损失函数尽可能小的参数,即解决一个最优化问题.但是由于神经网络参数空间过于复杂...

  • 预备知识及优化器

    神经网络预备知识 目标:学会神经网络优化过程,使用正则化减少过拟合,使用优化器更新网络参数 预备知识 神经网络复杂...

  • 神经网络的参数更新

    这个需要翻墙的外国网站写的很好:http://ruder.io/optimizing-gradient-desce...

  • tf.control_dependencies

    在训练神经网络模型时,每过一遍数据都要反向传播来更新网络参数,但有时候我们还想做其他操作,比如:更新参数的滑动平均...

  • 优化方法总结

    优化算法框架 神经网络模型中有多种优化算法,优化算法的作用用来优化更新参数。对于优化算法而言,主要的框架如下。参数...

  • 深度学习入门--超参数优化

    神经网络中,除了权重偏置等参数,超参数也是一个很重要的概念。权重偏置可以通过学习自动更新,而超参数必须人为设定。 ...

  • 优化器

    一、优化器定义 优化器是tensorflow中的梯度下降的策略,用于更新神经网络中数以百万的参数。除了不断更新神经...

  • 深度学习之参数更新方法

    参数的更新 神经网络的学习目的是找到使损失函数的值尽可能小的参数,解决这个问题的过程称为最优化(optimizat...

  • CS231n 神经网络 第3部分: 学习和评估(下)

    神经网络 第3部分: 学习和评估(下) 神经网络 第3部分: 学习和评估(下)1.学习(接上文)1.4 参数更新1...

网友评论

      本文标题:神经网络的参数更新

      本文链接:https://www.haomeiwen.com/subject/bsugdxtx.html