优化器的框架:
- 目标函数关于当前参数的梯度
;
- 根据历史梯度计算一阶动量与二阶动量:
;
;
- 计算当前时刻的下降梯度:
;
- 根据
更新参数:
;
现在我们来一个个分析现有的优化器,如何套入以上的框架。
简单来说,它们的区别就在于和
的定义。
SGD
特点:没有使用动量,收敛慢,容易陷入局部极值。
因为SGD没有利用动量,那它的梯度更新 直接等于
; 没有利用动量
;
SGD with Momentum带动量的SGD
特点:利用了梯度的动量,收敛比SGD快
;利用了上一次到这一次的梯度的变化动量
;
SGD+Nesterov
后面的跟SGD一样了。这里的的更新原理利用了Nesterov,可以达到什么效果呢?
AdaGrad
特点:使用了二阶动量,可以自适应地调整步长,但是它的二阶动量是累计全部历史,可能会提前停止学习。
在第3步中,公式中的
在这里的定义是:
.(从这个公式可以看出这里是累计的二阶动量的全部历史)
通常在中添加平滑项
,
,当
越大,则
越小,则容易引起提前停止学习。
AdaDelta/RMSProp
特点:使用了二阶动量,但是其更新方式跟AdaGrad有所不同,AdaGrad是累计了全部历史二阶动量,AdaDelta是累计了一部分。可以避免提前结束学习。
(这个公式是不是和SGD with momentum的更新公式类似呢)
Adam/Nadam
Adam结合了一阶动量与二阶动量,大大加速了收敛速度。
它的一阶动量更新方法跟SGD with momentum相同,即:
;利用了上一次到这一次的梯度的变化动量
它的二阶动量更新方式跟AdaGrad的相同,即:
(这个公式是不是和SGD with momentum的更新公式类似呢)
Nesterov+Adam = Nadam
它的更新方式就是在Adam的基础上,使用Nesterov来更新


本文总结了深度学习中的优化器,包括SGD、带动量的SGD、Nesterov、AdaGrad、AdaDelta/RMSProp、Adam及Nadam的工作原理。这些优化器通过不同方式调整学习率,如动量、二阶动量的累积和自适应调整,以提升模型训练效率和避免局部最优。
&spm=1001.2101.3001.5002&articleId=105731980&d=1&t=3&u=d7430c3de3814cc0b5df7605b3e8dbe4)
5142

被折叠的 条评论
为什么被折叠?



