简介

AdaGrad(Adaptive Gradient Algorithm)是一种自适应学习率的梯度下降算法,由Duchi等人在2011年提出。它的核心思想是对每个参数根据其历史梯度的平方和进行自适应地调整学习率。这意味着对于出现频率高的特征,其学习率会较低;而对于出现频率低的特征,其学习率会较高。这种方式使得模型在稀疏数据上的表现更好。

特点

AdaGrad算法的主要特点包括:

  1. 自适应学习率:AdaGrad算法通过记录每次迭代过程中的梯度方向和大小,对不同的参数使用不同的自适应学习率。具有较大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。

  2. 对稀疏数据的适应性:AdaGrad算法特别适合处理稀疏数据,因为它能够为不常见的特征赋予更大的学习率,从而在更新时给予更多的权重。

  3. 学习率衰减:随着训练的进行,AdaGrad算法中的学习率会逐渐减小,因为累积的梯度平方和会不断增加,导致分母变大,学习率随之减小。

更新公式

AdaGrad的参数更新公式如下:

  • :计算损失函数关于参数的梯度。
  • :累积梯度的平方和。
  • :根据累积的梯度平方和调整学习率,其中是为了数值稳定性而添加的一个小常数。
  • :更新参数。

尽管AdaGrad算法在处理稀疏数据时表现良好,但它也存在一些缺点,比如学习率会随着时间逐渐减小到接近于零,导致训练后期几乎不更新参数,这限制了其在某些任务中的应用。此外,AdaGrad对初始学习率的选择非常敏感,需要仔细调整以获得最佳性能。

离线实验

import math
import torch
import sys
import d2lzh_pytorch as d2l

def adagrad_2d(x1, x2, s1, s2):
    g1, g2, eps = 0.2 * x1, 4 * x2, 1e-6  # 前两项为自变量梯度
    s1 += g1 ** 2
    s2 += g2 ** 2
    x1 -= eta / math.sqrt(s1 + eps) * g1
    x2 -= eta / math.sqrt(s2 + eps) * g2
    return x1, x2, s1, s2

def f_2d(x1, x2):
    return 0.1 * x1 ** 2 + 2 * x2 ** 2

eta = 0.4
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

image_2025-04-18_17-56-14.jpg

AdaGrad(Adaptive Gradient)是一种自适应学习率的优化算法,其核心思想是根据参数的历史梯度动态调整学习率。以下为AdaGrad的梯度更新公式及详细解析:


1. AdaGrad的梯度更新公式

AdaGrad的参数更新规则为:

符号解释

$\theta_{i}^{(t)}$:第$t$次迭代时参数$\theta_i$的值。 • $\eta$:全局学习率(初始学习率),控制整体更新步长。 • $g_{i}^{(t)}$:第$t$次迭代时参数$\theta_i$的梯度,即$g_{i}^{(t)} = \nabla_{\theta_i} f_t$。 • $G_{ii}^{(t)}$:参数$\theta_i$的历史梯度平方累加和,定义为:

该值随着迭代次数增加而不断累积。 • $\epsilon$:极小常数(如$10^{-8}$),用于避免分母为零的数值稳定性问题。


2. 公式解析

(1) 自适应学习率机制

分母$\sqrt{G_{ii}^{(t)} + \epsilon}$
该分母根据参数$\theta_i$的历史梯度调整学习率。
• 若参数$\theta_i$的梯度较大或频繁更新,则$G_{ii}^{(t)}$累积较快,分母增大,导致学习率$\frac{\eta}{\sqrt{G_{ii}^{(t)}}}$减小,更新步长缩小。 • 若参数$\theta_i$的梯度较小或稀疏更新,则$G_{ii}^{(t)}$累积较慢,分母较小,学习率相对较大,更新步长保持较高水平。

(2) 算法特点

优势
自适应调整:无需手动为每个参数设置学习率,特别适合稀疏数据(如自然语言处理中的词向量)。 • 梯度方向稳定性:通过累积梯度平方,抑制梯度方向剧烈波动的参数更新。

局限性
学习率单调衰减:随着$G_{ii}^{(t)}$的持续增加,分母不断增大,学习率趋向于零,可能导致训练后期收敛困难。 • 内存开销:需为每个参数存储梯度平方累积变量$G_{ii}^{(t)}$,参数量大时内存消耗较高。


3. 与RMSprop和Adam的对比

RMSprop:改进AdaGrad的分母设计,引入指数加权移动平均(EMA)替代累加和,避免学习率过早衰减。公式为:

其中$\rho$为衰减系数,通常设为0.9。

Adam:结合动量法(一阶矩估计)和RMSprop(二阶矩估计),同时动态调整学习率和更新方向,适用于非凸优化问题。


4. 应用场景

AdaGrad在以下场景中表现优异:

稀疏数据:如自然语言处理中的词向量训练,稀疏特征对应的参数更新频率低,学习率可保持较大值。 • 非平稳目标函数:梯度分布差异较大的场景,自适应调整机制能提升收敛速度。