AdaDelta是一种自适应学习率优化算法,专为训练神经网络而设计。它由Matthew D. Zeiler于2012年在论文《ADADELTA:一种自适应学习率方法》中提出。该方法在RMSProp的基础上发展而来,去除了用户指定初始学习率的需求,转而从过去梯度和参数更新的窗口中推导出每个参数的步长。这使得它在难以调整全局学习率或损失函数在不同参数间变化显著的情况下特别有用。
AdaDelta的核心创新在于使用两个指数衰减平均值:一个用于平方梯度,另一个用于平方参数更新。与依赖固定或计划学习率的随机梯度下降变体不同,AdaDelta将步长计算为近期更新的均方根与近期梯度的均方根之比。该比值是无量纲的,并自动适应梯度的尺度,这使得算法无需人工干预即可在深度网络的不同层中保持一致的行为。
历史背景与动机
AdaDelta出现在深度学习优化技术快速发展的时期。在2010年代初期,训练深度网络因梯度消失或爆炸以及学习率计划的敏感性等问题而极具挑战性。动量和梯度裁剪等方法提供了部分解决方案,但仍需仔细调整超参数。RMSProp由Geoffrey Hinton在2012年前后的讲义中提出,通过使用平方梯度的运行平均值来归一化更新,解决了梯度尺度问题,但仍需要学习率。
Zeiler当时在谷歌工作(尽管该研究是独立完成的),他寻求创建一种对学习率选择具有鲁棒性的优化器。其动机是实际的:在大规模实验中,找到合适的学习率往往消耗大量时间和计算资源。AdaDelta的设计旨在使优化器自我调整,减少从业者的负担,并在不同问题上实现更可重复的结果。
该论文于2012年6月发布在arXiv上,并迅速引起了机器学习社区的关注。它是首批提出完全自适应的逐维学习率且无需任何全局步长超参数的方法之一,这一概念后来影响了其他优化器,如Adam(后者仍需要学习率,但默认值为0.001)。
数学表述
AdaDelta为每个参数θ维护两个状态变量:平方梯度的指数移动平均值,记为E[g²]_t,以及平方参数更新的指数移动平均值,记为E[Δθ²]_t。在每个时间步t,算法计算损失相对于θ的梯度g_t。
第一个平均值更新如下:
E[g²]_t = ρ E[g²]_{t-1} + (1 - ρ) g_t²
其中ρ是衰减常数,通常设为0.95。这与RMSProp中的更新相同。
第二个平均值跟踪平方更新,但使用当前步的参数变化进行更新。参数更新的均方根(RMS)计算如下:
RMS[Δθ]_{t-1} = sqrt(E[Δθ²]_{t-1} + ε)
其中ε是一个小常数(通常为1e-6),以避免除以零。参数更新则为:
Δθ_t = - (RMS[Δθ]_{t-1} / RMS[g]_t) * g_t
其中RMS[g]_t = sqrt(E[g²]_t + ε)。应用更新后,算法使用新计算的Δθ_t更新E[Δθ²]_t:
E[Δθ²]_t = ρ E[Δθ²]_{t-1} + (1 - ρ) Δθ_t²
该表述确保步长是近期更新的均方根与近期梯度的均方根之比。由于分子和分母具有相同的单位(平方参数值),所得步长是无量纲的,这就是该方法不需要学习率的原因。衰减常数ρ控制移动平均值的窗口大小,较大的值赋予过去历史更多权重。
与RMSProp和Adam的比较
AdaDelta常被描述为RMSProp的扩展,因为它使用相同的梯度缩放机制。关键区别在于,RMSProp将梯度除以梯度的均方根,然后乘以固定学习率η。相比之下,AdaDelta用过去参数更新的均方根替换了该固定η。这种替换使步长不仅适应梯度幅度,还适应损失函数的曲率,这反映在实际采取的更新中。
与2015年由Diederik Kingma和Jimmy Ba提出的Adam相比,AdaDelta共享了使用梯度二阶矩的思想。然而,Adam还通过一阶矩估计引入了动量,并对初始时间步进行偏差校正。Adam仍需要学习率,尽管其默认值0.001在许多应用中效果良好。相比之下,AdaDelta没有学习率超参数,这在最优学习率未知或在不同任务间变化时可能是一个优势。
实证研究表明,在许多标准基准上,AdaDelta的表现通常与Adam相当,但在梯度幅度随时间剧烈变化的情况下可能更稳定。然而,Adam的动量项在某些非凸问题中可能更有效地帮助逃离局部最小值。截至2020年代中期,Adam及其变体(如AdamW)在实践中使用更广泛,特别是在训练Transformer和大型语言模型时,但AdaDelta仍然是一个相关的基线,并在某些其特性有益的场景中继续使用。
实现细节与变体
在实践中,实现AdaDelta需要为每个参数存储两个额外的向量,与普通SGD相比,这使内存占用翻倍。这与Adam的内存需求类似。衰减常数ρ通常设为0.95,epsilon ε设为1e-6等小值以确保数值稳定性。一些实现使用略有不同的epsilon放置方式,将其加在平方根内部而非外部,但效果可忽略不计。
一个常见的变体是将AdaDelta与权重初始化方案和批归一化结合使用,以进一步稳定训练。该方法还与数据增强和课程学习策略兼容。在分布式训练设置中,AdaDelta可用于同步或异步更新,但移动平均值必须在工作节点间同步以避免发散。
包括TensorFlow、PyTorch和JAX在内的多个深度学习框架提供了AdaDelta的内置实现。例如,PyTorch的torch.optim.Adadelta允许用户指定rho和eps参数,默认值分别为0.9和1e-6(注意PyTorch中的默认rho为0.9,与原始论文中的0.95不同)。这种差异可能导致不同的行为,因此从业者应注意所选框架中的具体默认值。
应用与使用场景
AdaDelta已应用于广泛的机器学习任务,包括图像分类、语音识别和自然语言处理。在2010年代初期,它被用于在CIFAR-10和ImageNet等数据集上训练深度卷积网络,与带动量的SGD相比,在较少超参数调整的情况下取得了有竞争力的结果。它还在序列建模的循环神经网络中得到应用,其中梯度幅度在不同时间步间可能显著变化。
AdaDelta的一个显著优势是其对初始参数选择的鲁棒性。由于它不需要学习率,因此常被用作自动化机器学习管道或基准测试新架构时的默认优化器。例如,多伦多大学和斯坦福AI实验室的研究人员在比较优化算法的研究中使用了AdaDelta,尽管它在尖端的生成式AI模型中不太常见,这些模型通常更青睐Adam。
在强化学习中,AdaDelta已被用于训练连续控制任务的策略,其中奖励信号可能嘈杂且梯度尺度变化。其自适应步长有助于在无需手动调度的情况下保持稳定更新。然而,近年来,更先进的优化器如Adam和LAMB在大规模训练中变得更受欢迎,部分原因是它们与学习率预热和梯度裁剪技术的兼容性。
理论性质与局限性
从理论角度来看,AdaDelta可以被视为一种对角预条件梯度下降方法,其中预条件器基于梯度和更新的历史在线更新。这类似于自然梯度方法,但采用更简单的近似。该方法保证步长始终为正且有界,假设梯度有界,这有助于凸设置中的收敛。然而,对于非凸目标的正式收敛证明有限,这在自适应方法中很常见。
AdaDelta的一个局限性是它对ρ的选择敏感。如果ρ太小,移动平均值会快速遗忘过去信息,导致更新不稳定;如果太大,算法可能对损失函数的变化响应缓慢。缺乏学习率也意味着用户对整体步长的控制较少,这在已知特定步长效果良好时可能是一个劣势。
另一个问题是,AdaDelta的更新规则在训练初期有时会导致步长非常小,因为初始E[Δθ²]为零。这通过epsilon项得到缓解,但可能最初减缓收敛。一些实现将E[Δθ²]初始化为小的正值以避免此问题,但这引入了额外的超参数。
遗产与影响
AdaDelta的引入促进了深度学习中自适应优化方法的更广泛趋势。它证明了学习率可以完全消除,这启发了后续对无超参数优化器的研究。虽然它没有达到Adam的广泛采用程度,但它仍然是优化工具包中的重要组成部分,并经常在关于深度学习技术的教科书和综述论文中被引用。
该方法还因其原始论文中清晰简洁的阐述而著称,其中包括详细的推导和多个基准任务的实验。Zeiler的工作影响了后来的发展,如Adam和AMSGrad,这些方法解决了自适应方法的一些理论缺陷。截至2020年代,AdaDelta仍包含在主要深度学习库中,并在需要无学习率优化器的研究中偶尔使用,尽管其实际使用相对于更现代的替代方案有所下降。
总之,AdaDelta代表了神经网络优化算法演变中的重要一步,提供了一种无需手动调整即可自适应步长的原则性方法。其遗产在后续优化器的设计以及对稳健、自我调整训练过程的持续追求中得以延续。