框架
该总结框架来自知乎文章:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
给定参数 w w w,损失函数 f ( w ) f(w) f(w), 学习率 α \alpha α,对于第 t t t个step:
- 计算目标函数关于当前参数的梯度: g t = ∇ f ( w t ) g_{t}=\nabla f\left(w_{t}\right) gt=∇f(wt)
- 根据历史梯度,计算一阶动量和二阶动量:
一阶动量: m t = ϕ ( g 1 , g 2 , ⋯ , g t ) m_{t}=\phi\left(g_{1}, g_{2}, \cdots, g_{t}\right) mt=ϕ(g1,g2,⋯,gt)
二阶动量: V t = ψ ( g 1 , g 2 , ⋯ , g t ) V_{t}=\psi\left(g_{1}, g_{2}, \cdots, g_{t}\right) Vt=ψ(g1,g2,⋯,gt) - 计算当前时刻的下降梯度: η t = α ⋅ m t / V t \quad \eta_{t}=\alpha \cdot m_{t} / \sqrt{V_{t}} ηt=α⋅mt/Vt
- 根据下降梯度更新参数: w t + 1 = w t − η t w_{t+1}=w_{t}-\eta_{t} wt+1=wt−ηt
其中:
一阶动量:当前时刻梯度值的指数移动平均
m
t
=
ϕ
(
g
1
,
g
2
,
⋯
,
g
t
)
=
β
m
t
−
1
+
(
1
−
β
)
g
t
m_{t}=\phi\left(g_{1}, g_{2}, \cdots, g_{t}\right) =\beta m_{t-1}+(1-\beta) g_{t}
mt=ϕ(g1,g2,⋯,gt)=βmt−1+(1−β)gt
二阶动量:之前所有时刻梯度值的平方和
V t = ψ ( g 1 , g 2 , ⋯ , g t ) = ∑ i = 1 t g i 2 V_{t}=\psi\left(g_{1}, g_{2}, \cdots, g_{t}\right)=\sum_{i=1}^{t} g_{i}^{2} Vt=ψ(g1,g2,⋯,gt)=∑i=1tgi2