我正在研究在我正在编写的神经网络项目中实现 RMSProp。
我还没有找到任何已发表的论文来参考规范版本 - 我首先从Geoffrey Hinton 提出的 Coursera 课程中偶然发现了这个想法(我认为是第 6 讲)。尽管许多梯度下降优化库都有一个名为“RMSProp”的选项,但我认为该方法从未正式发布过。此外,我的搜索显示了原始想法的一些变体,目前尚不清楚它们为什么不同,或者是否有明确的理由使用一个版本而不是另一个版本。
RMSProp 背后的总体思路是通过当前梯度幅度的移动平均值来缩放学习率。在每个更新步骤中,现有的平方梯度被平均为一个运行平均值(它“衰减”一个因子),当网络权重参数更新时,更新除以这些平均平方梯度的平方根。这似乎是通过随机“感受”成本函数的二阶导数来实现的。
天真地,我将按如下方式实现:
参数:
- [0,1] 中平均的几何速率
- 防止被零除的数值稳定性/平滑项,通常很小,例如 1e-6
- 学习率
条款:
- 网络权重
- 权重梯度,即 对于特定的小批量
- 运行平均平方权重的 RMSProp 矩阵
初始化:
- (即所有矩阵单元设置为 1)
对于每个小批量:
- (按元素平方,而不是矩阵相乘)
- (所有元素方面)
我之前已经实现并使用了与此类似的版本,但那次我做了一些不同的事情。而不是更新 与单 从小批量(即小批量的梯度求和,然后平方),我总结了小批量中每个单独的示例梯度的平方。再读一遍,我猜那是错误的。但它运作得相当好,比简单的动力要好。虽然可能不是一个好主意,因为需要所有这些额外的元素平方和总和,如果不需要,它的效率会降低。
所以现在我发现了似乎有效的进一步变化。他们称自己为 RMSProp,除了“这行得通”之外,似乎没有人有太多理由。例如,Pythonclimin库似乎实现了我上面的建议,但随后建议进一步结合动量与预告片“在某些情况下,添加动量项 β 是有益的”,并部分解释了可适应的步率 - 我猜在完全理解它们是什么之前,我需要更多地参与该库。在另一个例子中,下坡库的 RMSProp 实现结合了两个移动平均线——一个与上面相同,但另一个,
我真的很想了解更多关于这些替代 RMSProp 版本的信息。它们来自哪里,提出替代公式的理论或直觉在哪里,为什么这些库使用它们?有没有更好的表现的证据?