牛客题解 | Adam优化器

题目

题目链接

Adam优化器是一种常用的优化算法,用于训练深度学习模型。它结合了动量法和自适应学习率的方法,能够有效地加速模型的训练过程。其步骤如下:

1. 初始化参数:

  • 初始化一阶动量 \(m_0\) 和二阶动量 \(v_0\),通常设为 0。
  • 初始化学习率 \(\eta\)
  • 初始化动量衰减系数 \(\beta_1\)\(\beta_2\),通常设为 0.9 和 0.999。
  • 初始化小常数 \(\epsilon\),通常设为 \(10^{-8}\)

2. 计算梯度:

  • 计算损失函数 \(L\) 对参数 \(\theta\) 的梯度 \(g\)
  • 数学表达式为:

\[g = \nabla L(\theta) \]

3. 更新一阶动量和二阶动量:

  • 更新一阶动量 \(m_t\) 和二阶动量 \(v_t\)
  • 数学表达式为:

\[m_t = \beta_1 m_{t-1} + (1-\beta_1)g \]

\[v_t = \beta_2 v_{t-1} + (1-\beta_2)g^2 \]

  • 此外,需要计算偏差修正后的动量和方差,以确保算法的稳定性。
  • 数学表达式为:

\[m_t = \frac{m_t}{1-\beta_1^t} \]

\[v_t = \frac{v_t}{1-\beta_2^t} \]

4. 更新参数:

  • 更新参数 \(\theta\)
  • 数学表达式为:

\[\theta = \theta - \eta \frac{m_t}{\sqrt{v_t} + \epsilon} \]

标准代码如下

def adam_optimizer(parameter, grad, m, v, t, learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8):
    m = beta1 * m + (1 - beta1) * grad
    v = beta2 * v + (1 - beta2) * (grad**2)
    m_hat = m / (1 - beta1**t)
    v_hat = v / (1 - beta2**t)
    update = learning_rate * m_hat / (np.sqrt(v_hat) + epsilon)
    parameter = parameter - update
    return np.round(parameter,5), np.round(m,5), np.round(v,5)
posted @ 2025-03-12 12:33  wangxiaoxiao  阅读(89)  评论(0)    收藏  举报