adam优化器yuanli
时间: 2024-12-26 19:21:00 浏览: 5
### Adam优化器工作原理
Adam(Adaptive Moment Estimation)是一种广泛使用的优化算法,在机器学习和深度学习领域特别受欢迎。该方法结合了AdaGrad和RMSProp两种算法的优势,不仅能够处理稀疏梯度还能减少振荡并加速收敛过程[^2]。
#### 参数更新机制
在每次迭代过程中,Adam会基于一阶矩估计(即梯度的指数加权平均)m_t以及二阶矩估计(即梯度平方的指数加权平均)v_t来进行参数θ的更新:
\[ m_{t}=\beta_1*m_{t-1}+(1-\beta_1)*g_t \]
\[ v_{t}=\beta_2*v_{t-1}+(1-\beta_2)*(g_t)^2 \]
其中\( g_t \)表示时间步 t 处的成本函数关于参数 θ 的梯度;\(\beta_1\) 和 \(\beta_2\) 是控制历史信息衰减速度的一组超参,默认设置通常分别为0.9和0.999[^4]。
为了修正初期偏差问题,引入了偏置校正因子:
\[ \hat{m}_t=m_t/(1-\beta^{t}_{1}) \]
\[ \hat{v}_t=v_t/(1-\beta^{t}_{2}) \]
最终参数更新规则如下所示:
\[ \theta_{t+1}=\theta_t-(\alpha*\sqrt{(1-\beta^{t}_{2})}/(1-\beta^{t}_{1})) * (\hat{m}_t/(\sqrt{\hat{v}_t+\epsilon})) \]
这里 α 表示学习速率,ε是一个非常小数用来防止除零错误,一般取值为 \(1e^{-8}\)[^1]。
```python
import numpy as np
class AdamOptimizer:
def __init__(self, params, lr=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8):
self.params = params
self.lr = lr
self.beta1 = beta1
self.beta2 = beta2
self.epsilon = epsilon
self.m = [np.zeros_like(param) for param in params]
self.v = [np.zeros_like(param) for param in params]
self.t = 0
def step(self, grads):
self.t += 1
for i, (param, grad) in enumerate(zip(self.params, grads)):
self.m[i] = self.beta1 * self.m[i] + (1 - self.beta1) * grad
self.v[i] = self.beta2 * self.v[i] + (1 - self.beta2) * (grad ** 2)
m_hat = self.m[i] / (1 - self.beta1 ** self.t)
v_hat = self.v[i] / (1 - self.beta2 ** self.t)
param -= self.lr * m_hat / (np.sqrt(v_hat) + self.epsilon)
```
阅读全文