gpt4 book ai didi

tensorflow - TensorFlow 中的梯度下降、Adagrad 与 Momentum

转载 作者:行者123 更新时间:2023-12-02 23:23:17 32 4
gpt4 key购买 nike

我正在研究TensorFlow以及如何使用它,即使我不是神经网络和深度学习方面的专家(只是基础知识)。

根据教程,我不明白这三个优化器之间的真正和实际的差异。我看API我了解原理,但我的问题是:

<强>1。什么时候最好使用其中一种而不是其他?

<强>2。有需要了解的重要差异吗?

最佳答案

根据我的理解,简单解释一下:

  • 势头 helps SGD 沿着相关方向导航并软化不相关的振荡。它只是将上一步的方向的一部分添加到当前步骤。这实现了正确方向上的速度放大并软化了错误方向上的振荡。该分数通常在 (0, 1) 范围内。使用自适应动量也是有意义的。在学习之初,大的动量只会阻碍你的进步,因此使用 0.01 之类的值是有意义的,一旦所有高梯度消失,你就可以使用更大的动量。动量有一个问题:当我们非常接近目标时,大多数情况下我们的动量非常高,而且它不知道应该放慢速度。这可能会导致它错过最小值或在最小值附近振荡
  • nesterov 加速梯度通过提早开始减速来克服这个问题。在动量中,我们首先计算梯度,然后在该方向上跳​​跃,该方向被我们之前拥有的任何动量放大。 NAG 做同样的事情,但顺序不同:首先我们根据存储的信息进行大跳跃,然后计算梯度并进行小修正。这种看似无关紧要的变化带来了显着的实际加速。
  • AdaGrad 或自适应梯度允许学习率根据参数进行调整。它对不频繁的参数执行较大的更新,对频繁的参数执行较小的更新。因此,它非常适合稀疏数据(NLP 或图像识别)。另一个优点是它基本上消除了调整学习率的需要。每个参数都有自己的学习率,并且由于算法的特殊性,学习率是单调递减的。这导致了最大的问题:在某个时间点学习率太小以至于系统停止学习。
  • AdaDelta resolves AdaGrad 中学习率单调递减的问题。在 AdaGrad 中,学习率的计算方式大致为 1 除以平方根之和。在每个阶段,您都会向总和添加另一个平方根,这会导致分母不断增加。在 AdaDelta 中,它不是对所有过去的平方根求和,而是使用滑动窗口,这允许总和减少。 RMSprop 与 AdaDelta 非常相似
  • Adam 或自适应动量是一种类似于 AdaDelta 的算法。但除了存储每个参数的学习率之外,它还单独存储每个参数的动量变化。

    一个few visualizations : enter image description here enter image description here

我想说 SGD、Momentum 和 Nesterov 不如后 3 个。

关于tensorflow - TensorFlow 中的梯度下降、Adagrad 与 Momentum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162180/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com