Adam优化算法是一种自适应学习率的优化算法,其计算步骤如下:
- 初始化参数
- 计算梯度
- 更新动量
- 更新方差
- 更新参数
这里对动量和方差进行了偏差修正,以避免初始阶段的不稳定;对新参数更新的时候加上了,以避免除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