【深度学习】Adam(Adaptive Moment Estimation)优化算法
Adam算法结合了动量法(Momentum)和RMSProp的思想,能够自适应调整每个参数的学习率。通过动态调整每个参数的学习率,在非平稳目标(如深度神经网络的损失函数)中表现优异。
概述
Adam算法结合了动量法(Momentum)和RMSProp的思想,能够自适应调整每个参数的学习率。通过动态调整每个参数的学习率,在非平稳目标(如深度神经网络的损失函数)中表现优异
目录
- 基本原理和公式
- 笼统说明:为什么Adam算法可以帮助模型找到更好的参数
基本概念
- 动量(Momentum):跟踪梯度的指数衰减平均(一阶矩),加速收敛并减少震荡。
- 自适应学习率:跟踪梯度平方的指数衰减平均(二阶矩),调整不同参数的学习率。
设模型参数为 θ\thetaθ,损失函数为 J(θ)J(\theta)J(θ),梯度为 gt=∇θJ(θt)g_t = \nabla_\theta J(\theta_t)gt=∇θJ(θt)。Adam 的更新步骤如下:
步骤 1:计算一阶矩(动量)
mt=β1⋅mt−1+(1−β1)⋅gt m_t = \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t mt=β1⋅mt−1+(1−β1)⋅gt
- 含义:对梯度做指数移动平均(EMA),保留历史梯度方向的信息。
- 作用:缓解梯度震荡,加速收敛(类似物理中的动量)。
- 超参数:β1\beta_1β1(通常设为 0.9),控制历史梯度的衰减速度。
步骤 2:计算二阶矩(自适应学习率)
vt=β2⋅vt−1+(1−β2)⋅gt2 v_t = \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2 vt=β2⋅vt−1+(1−β2)⋅gt2
- 含义:对梯度平方做指数移动平均,反映梯度的变化幅度。
- 作用:对频繁更新的参数减小学习率,对稀疏参数增大学习率。
- 超参数:β2\beta_2β2(通常设为 0.999),控制梯度平方的衰减速度。
步骤 3:偏差修正(Bias Correction)
由于初始时刻 m0=0,v0=0m_0 = 0, v_0 = 0m0=0,v0=0,早期估计会偏向于零。Adam 通过以下修正消除偏差:
m^t=mt1−β1t,v^t=vt1−β2t \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} m^t=1−β1tmt,v^t=1−β2tvt
- 含义:随着时间步 (t) 增大,分母 1−βt1 - \beta^t1−βt逐渐趋近于 1,修正早期估计的偏差。
- 作用:确保训练初期(ttt 较小时)的更新量不会过小。
步骤 4:参数更新
θt+1=θt−α⋅m^tv^t+ϵ \theta_{t+1} = \theta_t - \alpha \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θt+1=θt−α⋅v^t+ϵm^t
- 含义:用修正后的动量 m^t\hat{m}_tm^t除以修正后的梯度平方根v^t\sqrt{\hat{v}_t}v^t,再乘以学习率 α\alphaα。
- 作用:
- m^t\hat{m}_tm^t:提供稳定的更新方向(类似动量)。
- 1v^t+ϵ\frac{1}{\sqrt{\hat{v}_t} + \epsilon}v^t+ϵ1:自适应调整学习率,抑制梯度变化大的参数的学习率。
- 超参数:
- α\alphaα:基础学习率(通常需手动调节)。
- ϵ\epsilonϵ:极小值(如 10−810^{-8}10−8),防止除以零。
为什么 Adam 能帮助模型找到更好的参数?
Adam 的有效性源于以下设计:
1. 自适应学习率
- 对每个参数独立调整学习率:梯度大的参数学习率小,梯度小的参数学习率大。
- 优势:处理稀疏梯度(如 NLP 任务)时效果显著,避免手动调节学习率的麻烦。
2. 动量机制
- 通过一阶矩 mtm_tmt 保留历史梯度方向,加速收敛并减少震荡。
- 优势:在梯度方向变化剧烈时(如鞍点附近),动量帮助参数快速通过平缓区域。
3. 偏差修正
- 修正早期估计的偏差,避免训练初期更新量过小。
- 优势:提升训练稳定性,尤其在前几个 epoch 中。
4. 鲁棒性
- 对超参数选择相对鲁棒(如 β1,β2\beta_1, \beta_2β1,β2通常固定为 0.9 和 0.999)。
- 优势:广泛适用于不同任务(CV、NLP 等),减少调参成本。
更多推荐
所有评论(0)