Adam优化算法是一种自适应学习率的优化算法,其计算步骤如下:

  1. 初始化参数
  2. 计算梯度
  3. 更新动量
  4. 更新方差
  5. 更新参数

这里对动量和方差进行了偏差修正,以避免初始阶段的不稳定;对新参数更新的时候加上了,以避免除0错误。

标准代码如下

def adam_optimizer(f, grad, x0, learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8, num_iterations=10):
    x = x0
    m = np.zeros_like(x)
    v = np.zeros_like(x)

    for t in range(1, num_iterations + 1):
        g = grad(x)
        m = beta1 * m + (1 - beta1) * g
        v = beta2 * v + (1 - beta2) * g**2
        m_hat = m / (1 - beta1**t)
        v_hat = v / (1 - beta2**t)
        x = x - learning_rate * m_hat / (np.sqrt(v_hat) + epsilon)

    return x