AdaGrad优化器(理论、公式、代码实现)

AdaGrad是一种自适应学习率的梯度下降算法,通过历史梯度的平方和调整参数学习率。它在稀疏数据中表现出色,但存在学习率衰减和内存开销问题。后续的RMSProp和Adam等算法对此进行了优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AdaGrad(Adaptive Gradient Algorithm)是一种自适应学习率的梯度下降算法,于2011年由Duchi等人提出。这个算法主要是为了解决标准的梯度下降算法中学习率一成不变的问题。在标准的梯度下降算法中,如果学习率过大,可能会导致算法在最小值附近震荡而不收敛;如果学习率过小,又会导致收敛速度过慢。AdaGrad算法通过自适应调整每个参数的学习率,尝试解决这个问题。

理论

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

AdaGrad的参数更新公式如下:

  • while 条件:
    • g = ∇ θ k − 1 L ( θ ) g = \nabla_{\theta_{k-1}} L(\theta) g=θk1L(θ)
    • r k = r k − 1 + g ⊙ g r_{k} = r_{k-1} + g \odot g rk=rk1+gg
    • η = η r k + ϵ \eta = \frac{\eta}{\sqrt{r_{k} + \epsilon}} η=rk+ϵ η
    • θ k = θ − η g \theta_{k} = \theta - \eta g θk=θηg

符号解释:

  • g = ∇ θ k − 1 L ( θ ) g = \nabla_{\theta_{k-1}} L(\theta) g=θk1L(θ): g g g 代表损失函数 L ( θ ) L(\theta) L(θ) 关于参数 θ \theta θ θ k − 1 \theta_{k-1} θk1点的梯度,其中 ∇ θ \nabla_{\theta} θ表示梯度运算符, θ k − 1 \theta_{k-1} θk1表示上一步的参数值。
  • r k = r k − 1 + g ⊙ g r_{k} = r_{k-1} + g \odot g rk=rk1+gg: r k r_{k} rk 代表到当前迭代为止所有梯度平方的累积和, ⊙ \odot 表示元素乘法(即Hadamard乘积)。这里 r k r_{k} rk 用于调整学习率,以适应不同参数的不同梯度值。
  • η = η r k + ϵ \eta = \frac{\eta}{\sqrt{r_{k} + \epsilon}} η=rk+ϵ η: 这里通过累积梯度平方和 r k r_{k} rk 来调整学习率 η \eta η ϵ \epsilon ϵ 是一个很小的常数,用于防止分母为零。这样的调整使得学习率对于出现频繁的特征会更小,而对于稀疏特征会更大,有助于提高模型在稀疏数据上的性能。
  • θ k = θ − η g \theta_{k} = \theta - \eta g θk=θηg: 这是参数更新的步骤,新的参数 θ k \theta_{k} θk 通过从当前参数 θ \theta θ 减去学习率 η \eta η 乘以梯度 $g 来计算。这一步是基于梯度下降算法的,目的是减少损失函数 $ L(\theta) $ 的值。

代码示例

一个简单的AdaGrad算法的Python代码示例如下:

import numpy as np

# AdaGrad optimizer function
def adagrad_optimizer(grad, params, sqr_grads, learning_rate=0.01, epsilon=1e-8):
    sqr_grads += grad ** 2
    adjusted_grad = grad / (np.sqrt(sqr_grads) + epsilon)
    params -= learning_rate * adjusted_grad

# Example usage
params = np.array([1.0, 2.0])  # Initial parameters
grads = np.array([0.2, -0.3])  # Example gradients
sqr_grads = np.zeros_like(params)  # Initialize square gradients sum

adagrad_optimizer(grads, params, sqr_grads)
print(params)  # Updated parameters

优缺点

优点

  1. 自适应学习率:对于每个参数,AdaGrad根据其历史梯度的平方和自适应调整学习率,减少了手动调节学习率的需要。
  2. 适用于稀疏数据:对于稀疏特征,AdaGrad能够自动提高其学习率,使得模型更快地学习到这些特征的重要性。

缺点

  1. 学习率持续衰减:由于累积的平方梯度持续增加,学习率会持续衰减,最终导致学习率过小,从而使得训练后期模型难以收敛
  2. 存储梯度平方和:需要为每个参数存储一个累积的梯度平方和,这在参数很多时会增加额外的内存开销。

AdaGrad算法在处理稀疏数据和不同频率特征的调整上具有优势,但在长期训练中可能会遇到学习率过小的问题。为了克服这个问题,后续研究者提出了AdaGrad的改进版本,如RMSProp和Adam,这些算法在各种机器学习任务中得到了广泛的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值