def METHOD_NAME(param, g_t, t, m, v, lr=0.001, beta1=0.9,
                       beta2=0.999, epsilon=1e-8):
  lr_t = lr * np.sqrt(1 - beta2**t) / (1 - beta1**t)
  m_t = beta1 * m + (1 - beta1) * g_t
  v_t = beta2 * v + (1 - beta2) * g_t * g_t
  param_t = (param - lr_t * m_t / (np.sqrt(v_t) + epsilon) -
             (param * WEIGHT_DECAY))
  return param_t, m_t, v_t