跳转至

🔥AI副业赚钱星球

点击下面图片查看

郭震AI

Adam 优化器原理及其与 SGD 的不同

编辑日期: 2024-07-16 文章阅读:

Adam 优化器原理

Adam(Adaptive Moment Estimation)是一个结合了动量和 RMSProp 优点的优化算法。它利用梯度的一阶矩估计和二阶矩估计动态调整学习率,适用于处理稀疏梯度问题和大规模数据集。Adam 通过计算梯度的一阶和二阶矩的移动平均值来实现这一点。

算法步骤

Adam 算法的更新规则如下:

第一,初始化参数

\(m_0 = 0\)(一阶矩估计的初始值)

\(v_0 = 0\)(二阶矩估计的初始值)

\(t = 0\)(时间步)

设置学习率 \(\alpha\)、一阶矩估计的衰减率 \(\theta_1\)、二阶矩估计的衰减率 \(\theta_2\),以及防止分母为零的小常数 \(\epsilon\)

第二,梯度计算

计算损失函数 \(L(\theta)\) 对参数 \(\theta\) 的梯度 \(g_t = \nabla L(\theta_t)\)

第三,更新一阶矩估计

\[ m_t = \theta_1 \cdot m_{t-1} + (1 - \theta_1) \cdot g_t \]

第四,更新二阶矩估计

\[ v_t = \theta_2 \cdot v_{t-1} + (1 - \theta_2) \cdot g_t^2 \]

第五,计算偏差校正

\[ \hat{m}_t = \frac{m_t}{1 - \theta_1^t} \]
\[ \hat{v}_t = \frac{v_t}{1 - \theta_2^t} \]

第六,参数更新

\[ \theta_{t+1} = \theta_t - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \]

用法示例

import torch
import torch.nn as nn
import torch.optim as optim

# 假设我们有一个简单的线性模型
model = nn.Linear(10, 1)

# 定义损失函数
criterion = nn.MSELoss()

# 使用 Adam 优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 一个训练步骤的示例
inputs = torch.randn(32, 10)  # 假设有 32 个样本,每个样本有 10 个特征
targets = torch.randn(32, 1)  # 假设对应的 32 个目标值

# 前向传播
outputs = model(inputs)
loss = criterion(outputs, targets)

# 反向传播和参数更新
optimizer.zero_grad()  # 清空梯度
loss.backward()        # 计算梯度
optimizer.step()       # 更新参数

关键参数

  • params:模型参数,可以是模型的参数列表或模型参数的迭代器。
  • lr:学习率,控制每次参数更新的步长。
  • momentum(可选):动量因子,默认为 0。
  • weight_decay(可选):权重衰减(L2 正则化),默认为 0。
  • dampening(可选):动量的抑制因子,默认为 0。
  • nesterov(可选):布尔值,指示是否使用 Nesterov 动量,默认为 False。

动量

动量(Momentum)是 SGD 的一种扩展,用于加速收敛并减小震荡。其更新规则为:

\[ v_t = \mu v_{t-1} + \eta \nabla L(\theta_{t-1}) \]
\[\theta_t = \theta_{t-1} - v_t \]

其中,\(v_t\) 是动量项,\(\mu\) 是动量因子。

Adam 与 SGD 的不同

1. 梯度动量

  • SGD:标准 SGD 直接使用当前梯度进行参数更新。如果加入动量,SGD 可以通过动量项累积之前的梯度信息,使得优化过程更加平滑。

  • Adam:Adam 结合了一阶矩(动量)和二阶矩(梯度平方的移动平均)来调整每个参数的学习率。这样可以使优化过程更稳定,并且更快地收敛。

2. 学习率调整

  • SGD:通常需要手动调整学习率,学习率在训练过程中保持不变或根据预先设定的计划逐步降低。

  • Adam:学习率根据梯度的一阶和二阶矩动态调整,每个参数都有独立的学习率,适应性更强,通常不需要手动调整。

3. 偏差校正

  • SGD:没有偏差校正。

  • Adam:引入了偏差校正,尤其是在初始阶段,保证了估计值的无偏性。

4. 超参数

  • SGD:主要超参数是学习率 \(\alpha\),如果使用动量,还有动量因子 \(\theta\)

  • Adam:主要超参数包括学习率 \(\alpha\)、一阶矩估计的衰减率 \(\theta_1\)、二阶矩估计的衰减率 \(\theta_2\),以及防止分母为零的小常数 \(\epsilon\)

总结

Adam 优化器通过结合动量和自适应学习率调整机制,提供了比标准 SGD 更加鲁棒和高效的优化方法,特别适合处理稀疏梯度和大规模数据集的问题。两者在应用中的选择取决于具体的任务需求和数据特性。

大家在看

京ICP备20031037号-1 | AI之家 | AI资讯 | Python200 | 数据分析