Tensorflow 张量流中的梯度下降vs Adagrad vs动量

Tensorflow 张量流中的梯度下降vs Adagrad vs动量,tensorflow,deep-learning,Tensorflow,Deep Learning,我正在学习TensorFlow以及如何使用它,即使我不是神经网络和深度学习(只是基础知识)方面的专家 在教程之后,我不理解这三个loss优化器之间的实际区别。我看了这本书,理解了其中的原则,但我的问题是: 1。什么时候最好使用一个而不是其他? 2。有重要的区别需要了解吗?根据我的理解,这里有一个简短的解释: 动量SGD沿相关方向导航,并减弱不相关方向的振荡。它只是将上一步方向的一小部分添加到当前步骤。这可以实现正确方向上的速度放大,并减弱错误方向上的振荡。这个分数通常在(0,1)范围内。使用自

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

在教程之后,我不理解这三个loss优化器之间的实际区别。我看了这本书,理解了其中的原则,但我的问题是:

1。什么时候最好使用一个而不是其他?


2。有重要的区别需要了解吗?

根据我的理解,这里有一个简短的解释:

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

    A:


我想说,SGD、Momentum和Nesterov不如前3种方法。

已经解释了一些流行方法(即优化器)之间的差异,但我将尝试对它们进行更多的阐述。
(请注意,我们的答案在某些方面存在分歧,尤其是在ADAGRAD方面。)

经典动量(CM)与Nesterov加速梯度(NAG) (主要基于本文第2节。)

CM和NAG中的每个步骤实际上由两个子步骤组成:

  • 动量子步骤-这只是最后一步的一小部分(通常在
    [0.9,1)
    范围内)
  • 一个与梯度相关的子步骤-这与通常的步骤类似-它是学习速率和与梯度相反的向量的乘积,而梯度是在该子步骤开始的地方计算的
CM首先采取梯度子步骤,而NAG首先采取动量子步骤

下面是一个演示:

所以NAG似乎更好(至少在图中是这样),但为什么呢?

需要注意的重要一点是,动量子步骤何时到来并不重要——无论哪种方式都是一样的。因此,如果动量子步骤已经被执行,我们可能会表现得更好。

因此,问题实际上是:假设梯度子步骤是在动量子步骤之后进行的,我们是否应该计算梯度子步骤,就好像它在动量子步骤之前或之后的位置开始一样?

“之后”似乎是正确的答案,一般来说,某个点的梯度
θ
大致指向从
θ
到最小值的方向(具有相对正确的大小),而另一个点的梯度不太可能指向从
θ
到最小值的方向(具有相对正确的大小)。

下面是一个演示(来自下面的gif):

  • 最小值是恒星所在的位置和曲线所在的位置。(有关轮廓线的解释以及它们垂直于渐变的原因,请参阅视频和传奇人物的文章。)
  • (长)紫色箭头是动量子步骤
  • 如果在动量子步骤之前开始,则透明红色箭头为渐变子步骤
  • 如果在动量子步骤之后开始,则黑色箭头为渐变子步骤
  • CM最终会进入深红色箭头的目标
  • NAG最终会成为黑箭的目标
请注意,NAG更好的原因与算法是否接近最小值无关。
总的来说,NAG和CM通常都会遇到积累更多动量的问题,因此
              learning_rate 
- --------------------------------------- * gradient_i_t
  norm((gradient_i_1, ..., gradient_i_t))
                   learning_rate
- ------------------------------------------------ * gradient_i_t
  sqrt(exp_decay_avg_of_squared_grads_i + epsilon)
  sqrt(exp_decay_avg_of_squared_steps_i + epsilon)
- ------------------------------------------------ * gradient_i_t
  sqrt(exp_decay_avg_of_squared_grads_i + epsilon) 
                   learning_rate
- ------------------------------------------------ * exp_decay_avg_of_grads_i
  sqrt(exp_decay_avg_of_squared_grads_i) + epsilon