def METHOD_NAME(
    param,
    g_t,
    t,
    m,
    v,
    m_cache,
    alpha=0.001,
    beta1=0.9,
    beta2=0.999,
    epsilon=1e-8,
):
    mu_t = beta1 * (1 - 0.5 * 0.96 ** (0.004 * (t + 1)))
    mu_t_1 = beta1 * (1 - 0.5 * 0.96 ** (0.004 * (t + 2)))
    m_cache_t_1 = m_cache * mu_t_1
    g_prime_t = g_t / (1 - m_cache)
    m_t = beta1 * m + (1 - beta1) * g_t
    v_t = beta2 * v + (1 - beta2) * g_t * g_t
    m_prime_t = m_t / (1 - m_cache_t_1)
    v_prime_t = v_t / (1 - beta2 ** (t + 1))
    m_bar_t = (1 - mu_t) * g_prime_t + mu_t_1 * m_prime_t
    param_t = param - alpha * m_bar_t / (np.sqrt(v_prime_t) + epsilon)
    return param_t, m_t, v_t