了解RMSprop——更快的神经网络学习!

点击上方关注,All in AI中国

本文假定正在阅读的你已经拥有了有关神经网络优化算法的基本知识。特别是,有关SGD和SGD的知识将对理解这篇文章非常有帮助。

一.导言

RMSprop-是专为神经网络设计的未发表的优化算法,最一开始是由Geoff Hinton在其在线课程《神经网络机器学习》的第6讲中提出。 RMSprop在自适应学习率方法领域,近年来越来越受欢迎,但也受到一些批评。它以没有出面世而闻名,大多数深度学习框架包含开箱即用的实施。

有两种方法可以引入RMSprop。首先,将其视为适用于小批量学习的rprop算法。这是开发此算法的最初动机。另一种方法是看看它与Adagrad 的相似之处,并将RMSprop视为一种处理其急剧下降的学习率的方法。我会尝试点击两个点,以便更清楚算法的工作原理。

二.RPROP

让我们从了解弹性反向传播(rprop) 算法开始,该算法用于完整批量优化。 Rprop 试图解决梯度在幅度上可能变化很大的问题。一些梯度可能很小而其他梯度可能很大,这导致非常困难的问题:试图找到算法的单一全局学习速率。如果我们使用全批量学习,我们只需使用梯度的符号就可以解决这个问题。这样,我们可以保证所有权重更新都具有相同的尺寸。

这种调整有助于大大提高鞍点和高原,因为我们采取足够大的步骤,即使是微小的渐变。请注意,我们不能仅仅通过提高学习率来做到这一点,因为我们采用大梯度的步骤将会更大,这将导致分歧。 Rprop结合了仅使用渐变符号的想法和为每个权重单独调整步长的想法。因此,我们不会查看渐变的大小,而是查看为该特定权重定义的步长。并且该步长随着时间的推移而单独调整,以便我们在所需的方向上加速学习。要调整某些权重的步长,请使用以下算法:

首先,我们看一下权重最后两个梯度的迹象。

如果它们具有相同的符号,那意味着,我们正朝着正确的方向前进,并且应该将其加速一小部分,这意味着我们应该乘以增量步长(例如,增加1.2倍)。如果它们不同,那意味着我们做了太大的步骤并跳过局部最小值,因此我们应该乘法地减小步长(例如0.5倍)。

然后,我们限制两个值之间的步长。这些值实际上取决于您的应用程序和数据集,默认值为50和百万分之一的良好值,这是一个良好的开端。

现在我们可以应用权重更新。

注意,作者定义了不同版本的rprop算法。我介绍了最简单的一个让你熟悉它。虽然我喜欢用方程式正式定义优化算法,但这个算法通过代码表达得更好;所以最简单的版本rprop更新规则可以如下所示:

了解RMSprop——更快的神经网络学习!

三. 从Rprop到RMSprop

当我们拥有非常大的数据集并且需要执行小批量权重更新时,Rprop并不真正起作用。为什么它不适用于小批量?人们其实已经尝试过了,但发现很难让它发挥作用。它不起作用的原因在于它违反了随机梯度下降背后的核心思想,即当我们具有足够小的学习率时,它会对连续的小批量的梯度取平均值。考虑权重,在9个小批量上获得梯度0.1,在十分之一小批量上获得-0.9的梯度。我们想要的是梯度大致相互抵消,使得停留大致相同。但这不是rprop会发生的。使用rprop,我们将权重增加9倍并且仅减少一次,因此权重增长得更大。

为了结合Rprop的稳健性(通过使用梯度的符号),我们从小批量中获得效率,以及允许以正确的方式组合梯度的小批量进行平均,我们必须从不同的角度来看rprop。 Rprop相当于使用梯度,但也要除以梯度的大小,因此无论特定梯度有多大,我们都会得到相同的幅度。

小批量的问题是我们每次都按不同的梯度划分,那么为什么不强制我们除以相邻的小批量相似的数字呢? RMSprop的核心思想则是保持每个权重的平方梯度的移动平均值。然后我们将梯度除以平均值的平方根。这就是为什么它被称为RMSprop(均方根反向传播)。使用数学方程式,更新规则如下所示:

了解RMSprop——更快的神经网络学习!

E [g] - 平方梯度的移动平均值。 dC / dw - 成本函数相对于权重的梯度。 n - 学习

从上面的等式可以看出,我们通过除以平方梯度的根来调整学习率,但由于我们只有当前小批量的梯度估计,所以我们需要使用它的移动平均值。您可以在项目中使用的移动平均参数的默认值为0.9。它适用于大多数应用程序。在代码中,算法可能如下所示:

了解RMSprop——更快的神经网络学习!

E [g] - 平方梯度的移动平均值。 dC / dw - 成本函数相对于权重的梯度。 n - 学习

四.与Adagrad相似

Adagrad 是自适应学习速率算法,看起来很像RMSprop。Adagrad根据每个维度中的历史平方和添加梯度的元素缩放。这意味着我们保持一个连续的平方梯度总和。然后我们通过将学习率除以该总和来调整学习率,在代码中我们可以这样表达:

了解RMSprop——更快的神经网络学习!

在训练过程中会发生什么?步长变得越来越小,因为我们不断更新平方梯度在训练中的增长。所以我们每次除以更大的数字。在凸优化中,这很有意义,因为当我们接近minina时我们想要减速。在非凸的情况下,它的情况很糟糕,因为我们可能会陷入鞍点。我们可以将RMSprop看作是能够解决这个问题的算法。

使用RMSprop,我们仍然可以保持平方梯度的估计值,但是,不是让这个估计值不断累积在训练上,而是保持它的移动平均值。

五.结果

我发现了很棒的可视化效果,可以用于不同的优化算法,显示了它们在不同情况下的行为方式。

了解RMSprop——更快的神经网络学习!

正如您所看到的,在鞍点的情况下,RMSprop直线向下,无论梯度有多小并不重要,RMSprop会缩放学习速率,因此算法比大多数算法更快地通过鞍点。

了解RMSprop——更快的神经网络学习!

在这种情况下,算法从具有非常大的初始梯度的点开始。 RMSprop几乎是最佳路径,而动量方法则超过了很多。

六.结论

RMSprop是一款优秀、快速且非常流行的优化器。 Andrej Karpathy的《机器学习趋势一瞥》表明它是深度学习中最流行的优化算法之一,其受欢迎程度仅次于Adam。如果您想了解有关深度学习优化的更多信息,请查看以下一些来源:正如您所看到的,在鞍点的情况下,RMSprop(黑线)直线向下,梯度有多小并不重要,RMSprop会缩放学习速率,因此算法比大多数算法更快地通过鞍点。

在这种情况下,算法从具有非常大的初始梯度的点开始。 RMSprop几乎是最佳路径,而动量方法则超过了很多。

RMSprop是一款优秀、快速且非常流行的优化器。 Andrej Karpathy的《机器学习趋势一窥》表明它是深度学习中最流行的优化算法之一,其受欢迎程度仅次于Adam 。如果您想了解有关深度学习优化的更多信息,请查看以下一些来源:

  1. Sebastian Ruder的博客有几篇关于深度学习优化趋势的文章。(http://ruder.io/optimizing-gradient-descent/index.html#fn:15)
  2. fast.ai是一个关于深度学习的好课程,他们通过最流行的优化算法,在excel表上解释它们。(http://www.fast.ai/)
  3. 吴恩达在coursera上的第二门深度学习专业课也涉及到一些流行的算法,并用了非常清晰的方式解释它们。(https://www.coursera.org/learn/deep-neural-network/home/welcome)
了解RMSprop——更快的神经网络学习!


分享到:


相關文章: