Adadelta 优化器

2025年6月8日 | 4 分钟阅读

TensorFlow 中的优化器通过修改模型中的重要变量来降低损失并提高准确性。使用 TensorFlow 时,您应该通过 tf.keras.optimizers 来访问优化器,并在编译模型时选择您想要使用的优化器。

Adadelta 是一种先进的算法,它建立在 AdaGrad 和 RMSProp 的思想之上。它更新了步长的计算方式,使得学习率始终保持不变,因此在训练模型时无需固定它。

在本教程中,您将看到如何逐步创建 Adadelta 优化算法。在本教程结束时,您将能够:

  • Adadelta 使用梯度的衰减平均值,允许梯度下降为每个参数使用自适应的步长。
  • 如何独立使用 Adadelta,将其与目标函数连接,并探索结果。

理解 Adadelta

Adadelta 的开发者通过修正 Adagrad 在训练期间学习率下降过快的问题,改进了 Adagrad。由于 Adagrad 在适应平方梯度后无法再次提高学习率,Adadelta 引入了两个新步骤来应对这一挑战。

现在,不断增长的平方梯度的累积情况被转化为一个指数级轻微下降的平均值。因此,优化器根据新的变化更新其行为,同时仍然逐渐丢弃过时的数据。

接下来,一个新参数 ρ (rho) 有助于平衡步长和过去梯度平方下降的平均速率。因此,Adadelta 能够持续自我改进,并在学习过程中减少问题。

Adadelta 算法

Adadelta 是一种通过自动更新学习率来改进梯度下降法的方法。在题为《ADADELTA:一种自适应学习率方法》的论文中,Matthew Zeiler 介绍了它,以解决先前的优化器 AdaGrad 和 RMSProp 所面临的挑战,即学习率变化快且总是降低,并且需要人为设置初始学习率。

从梯度下降到 Adadelta

在梯度下降中,模型参数使用梯度进行更新以减少误差。然而,这种方法对全球所有节点使用一个固定的学习率,这在现实世界中可能并不总是有效。

与梯度下降不同,AdaGrad 为每个参数设置不同的学习率,并用其梯度的平方和来调整它们。因此,您可以更频繁地更新不常变化的参数。AdaGrad 的步长计算公式为:

在此项中,s(t) 等于从时间 0 到时间 t 的所有平方梯度之和,引入 ε 是为了防止数字低于零。虽然 AdaGrad 很好地适应了学习率,但最终会因累积和中的值变得过大而导致学习率衰减得太多。

RMSProp 通过取先前平方梯度的指数衰减平均值解决了这个问题。因此,每个因素的值不会随着周期的增加而减少。

这里,ρ 设置为 0.9,f'(x(t)) 表示成本函数在时间 t 相对于 x(t) 的移动速度(即速率)。

Adadelta 的主要进展

Adadelta 取消了固定的全局学习率,并对更新规则进行了归一化,使其单位保持不变。它增加了一个额外的项:每次参数变化的平方平均值,命名为 Δ(t)。

分步机制

1. 梯度平方移动平均

与 RMSProp 类似,Adadelta 更新梯度的平方平均值。

2. 确定每次迭代的步长

在 Adadelta 中,更新基于最新的梯度信息以及先前的更新。

其中

Δ(t) 显示了 TVM 模型中先前平方变化的平均值。

使用一个小的常数 ε 来确保计算的稳定性。

3. 更新参数

在这一点上,计算出参数的更新值。

4. 更新平方变化平均值

5. 对参数进行必要的更新

接下来,使用以下公式更改参数:

使用 TensorFlow 将 Adadelta 添加到 Python 程序中

接下来,我们将探讨使用 PythonTensorFlow 应用 Adadelta 优化的步骤。该项目包含 Adadelta 的实现,它是 tf.keras.optimizers 模块的一部分,可以添加到任何训练脚本中。

结论

Adadelta 和 RMSProp 通过具有自适应性,提供了对标准梯度下降法的改进。在训练过程中调整学习率,使得深度神经网络能够更快、更有效地达到适当的状态。在 Python 中理解和使用优化器,可以确保您能让您的深度学习模型表现得更好。