Adam优化器
2026-03-17
〔note〕
#论文笔记
#optimizer
#adam
#ai
又是一个常常使用,但从来没有深究过原理的技术。最近在了解muon,一并补习了。
Momentum
vt=γvt−1+αgt
θt=θt−1−vt
gt为梯度,γ类似摩擦系数,vt类似速度。
还可以Nestrov化,大概就是先根据当前动量向前看一步,然后再计算梯度,最后按照上面的式子更新参数。
Adam
目标函数L(x;θ),参数θ。初始学习率α,超参数β1=0.9,β2=0.999
迭代过程:
计算梯度
gt=∇θLt(x;θt−1)
更新一阶矩估计(动量,或者也可以看作滑动平均)
mt=β1mt−1+(1−β1)gt
更新二阶矩估计(自适应学习率)
vt=β2vt−1+(1−β2)gt2
偏差校正(由于mt和vt初始化为0)
m^t=1−β1tmt,v^t=1−β2tvt
更新参数
θt=θt−1−α⋅v^t+ϵm^t
关键思想:
- 动量(momentum)
- 目的:加速收敛,减少梯度震荡。
- 方法:计算梯度的一阶矩(指数移动平均),保留历史梯度方向。
mt=β1mt−1+(1−β1)gt
其中
mt
类似“速度”,在梯度方向持续时加速,在梯度方向变化时减速。
- 自适应学习率(RMSProp)
- 目的:为每个参数自动调整学习率,适应稀疏或非平稳梯度。各个参数的更新量尽量平衡
- 方法:计算梯度的二阶矩(平方的指数移动平均),反映梯度幅度的历史变化。
vt=β2vt−1+(1−β2)gt2
学习率按
vt+ϵ1
缩放,梯度大的参数获得更小的更新步长。
- 损失函数缩放常数倍不影响优化轨迹
AdamW
把正则化放进了Adam。更新参数改为
θt=θt−1−α(v^t+ϵm^t+λθt−1)
动机可以从Adam+L2正则化的loss出发
gt=∇[L(θt−1)+2λ∥θt−1∥2=∇L+λθt−1
导致更新的时候,衰减项会被vt缩放。因此把衰减项提出来,让他不受学习率缩放。