Python中的ADAM算法

2025年1月5日 | 阅读 4 分钟

Adam(**Adaptive Moment Estimation** 的缩写)优化算法是训练机器学习模型(尤其神经网络)的一种广泛使用的优化技术。它融合了另外两种流行优化算法:RMSprop 和 Momentum 的概念。Adam 的核心思想是自适应地调整训练过程中每个参数的学习率。

ADAM Algorithm in Python

以下是 Adam 算法的详细解释

  1. 初始化: Adam 需要初始化两个动量平均参数 m 和 v,它们最初都设置为零。这些参数用于估计梯度的第一和第二矩。
  2. 超参数: Adam 有几个超参数需要在训练前设置
    • 学习率 (α):一个小的正值,用于确定优化过程中的步长。
    • β₁ (beta1):一个超参数,控制第一矩估计的指数衰减(通常设置为 0.9 这样的值)。
    • β₂ (beta2):一个超参数,控制第二矩估计的指数衰减(通常设置为 0.999 这样的值)。
    • ε (epsilon):一个小的常数,用于防止除零错误(通常设置为 1e-7 这样的小值)。
  3. 迭代: 对于每一次训练迭代,Adam 都会更新模型的参数。
  4. 计算梯度: 计算损失相对于模型参数的梯度。
  5. 更新第一矩估计 (m): Adam 使用以下公式计算梯度的指数加权平均值(第一矩)
    m = β₁ * m + (1 - β₁) * gradient
  6. 更新第二矩估计 (v): Adam 使用以下公式计算平方梯度的指数加权平均值(第二矩)
    v = β₂ * v + (1 - β₂) * gradient^2
  7. 偏差校正: 为了防止 m 和 v 过度偏向零,Adam 执行偏差校正
    m_hat = m / (1 - β₁^t)
    v_hat = v / (1 - β₂^t)
    这里,t 表示当前的训练迭代次数。
  8. 更新模型参数: 使用以下公式更新模型参数
    parameter = parameter - α * m_hat / (sqrt(v_hat) + ε)
    这里,α 是学习率,m_hat 是偏差校正后的第一矩估计,v_hat 是偏差校正后的第二矩估计,ε 是一个小的常数,用于防止除零错误。
  9. 重复: 重复步骤 4-8,直到达到预定义的训练迭代次数或满足收敛标准。

Adam 之所以受欢迎,是因为它有效地结合了 Momentum(平滑优化路径)和 RMSprop(为每个参数自适应学习率)的优点。这种自适应性通常能带来更快速、更稳定的实际收敛效果。

  1. 自然语言处理 (NLP): 在文本分类、情感分析、机器翻译和语言建模等 NLP 任务中,Adam 常用于优化 LSTM 和 Transformer 等模型。
  2. 计算机视觉: 在图像分类、目标检测和图像分割等计算机视觉任务中,Adam 常用于优化卷积神经网络 (CNN)。
  3. 强化学习: 在强化学习应用中,智能体通过与环境交互来学习做出决策,Adam 可用于优化 DDPG 和 A3C 等算法中的策略网络和价值网络。
  4. 生成对抗网络 (GAN): 训练 GAN(涉及生成器和判别器两个神经网络)通常受益于 Adam 的快速收敛。
  5. 推荐系统: 协同过滤和基于内容的推荐系统通常使用 Adam 进行优化。深度学习模型可以提高推荐质量。
  6. 时间序列预测: Adam 用于优化循环神经网络 (RNN) 来进行时间序列预测任务,例如股票价格预测和天气预报。
  7. 语义分割: 在像素级分类任务中(例如医学图像分析或自动驾驶),Adam 有助于优化深度学习模型。

Python 中 Adam 算法的实现

输出

Optimal parameters: 2.2536755401522207e-06

提供的 Python 代码是 Adam 优化算法的一个简单实现,用于最小化二次损失函数。它包含以下关键组件

  1. adam_optimizer 函数: 这是主要的优化器函数。它接受一个梯度函数(计算损失相对于参数的梯度)、初始参数、学习率、beta 值 (β₁ 和 β₂)、epsilon (ε) 以及迭代次数作为输入。
  2. loss_function: 定义了一个简单的二次损失函数。在此示例中,损失与参数的平方成正比。
  3. gradient_function: 定义了计算损失函数梯度的梯度函数。
  4. initial_parameters: 提供了参数的初始猜测值。
  5. 使用梯度和损失函数调用 **adam_optimizer** 函数,它会迭代地更新参数以最小化损失。然后打印出最优参数。

代码的输出是使提供的二次损失函数最小的最优参数值。具体值可能因选择的超参数和初始猜测值而异。此代码作为 Adam 优化器在实践中如何工作的简化示例。


下一个主题Python 中的缩略词