一、常见的三种梯度下降方法
SGD,Batch GD,mini-batch
SGD 训练速度快,收敛慢
Batch GD 训练慢,收敛快
这三种优化方法存在一些问题:
- 选择合适的学习率较为困难
- 每个参数的学习率是一样的,没有加以区分
- 训练中容易困在鞍点,在这种区域所有的优化方向都是0,没有办法继续优化
二、 Momentum
Momentum 是与 SGD 常为结合的一种方法,其不仅会使用当前的梯度,还会积累以前的梯度以确定走向。vt=η∗vt−1−α∗∇θJ(θ)v_t = \eta * v_{t-1}-\alpha * \nabla_\theta J(\theta)vt=η∗vt−1−α∗∇θJ(θ) θ=θ−vt\theta = \theta-v_tθ=θ−vt 可以看到,这一方法观察了历史梯度 vt−1v_{t-1}vt−1 ,如果一致,则当前梯度就会增大,若不一致,当前梯度就会减小。
特点:
- 由于不完全依赖当前时刻的梯度方向,训练会比较稳定
- 学习更快
- 有一定摆脱局部最优的能力(梯度变大直接冲过局部最优值)
三、Nesterov Momentum
整体上看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。
梯度下降法师对每次所处位置上的坡度最大的方向;而牛顿法考虑的不仅是坡度大而且希望走完这一步之后,坡度变得更大(因为目光看的更远)。或者说,牛顿法是用一个二次曲面拟合当前所处位置的局部曲面,而梯度下降则是用平面来拟合。
总的来说,牛顿法看的更为长远,所以少走弯路,SGD 只考虑当前局部的最优,没有全局思想。
vt=γ∗vt−1+α∗∇θJ(θ−γ∗vt−1)v_t =\gamma *v_{t-1} + \alpha * \nabla_\theta J(\theta-\gamma * v_{t-1})vt=γ∗vt−1+α∗∇θJ(θ−γ∗vt−1) θ=θ−vt\theta =\theta -v_tθ=θ−vt
四、AdaGrad
对于更新频率较大的参数使用较小的学习率更新,否则用较大的学习率进行更新
设 gt,ig_{t,i}gt,i 为第 ttt 轮第 iii 个参数的梯度,即 gt,i=∇θJ(θi)g_{t,i}=\nabla_\theta J(\theta_i)gt,i=∇θJ(θi) et,i=et−1,i+gt,i2e_{t,i} = e_{t-1,i}+g_{t,i}^2et,i=et−1,i+gt,i2 θt+1,i=θt,i−αet,i+δ⋅gt,i\theta_{t+1,i}=\theta_{t,i}-\frac{\alpha}{\sqrt{e_{t,i}}+\delta}\cdot g_{t,i}θt+1,i=θt,i−et,i+δα⋅gt,i 其中,αet,i+δ\frac{\alpha}{\sqrt{e_{t,i}}+\delta}et,i+δα 为自适应的学习率,由于 et,ie_{t,i}et,i 的存在,梯度更新的越多,学习率就越小,但是其可能出现提前停止。
五、RMSProp
AdaGrad 在理论上有些较好的性质,但是在实践中表现的并不是很好,其根本原因就是随着训练周期的增长,学习率降低的很快,容易导致提前停止。RMSProp算法就在AdaGrad基础上引入了衰减因子,RMSProp在梯度累积的时候,会对“过去”与“现在”做一个平衡,通过超参数进行调节衰减量。
gt,i=∇θJ(θi)g_{t,i}=\nabla_\theta J(\theta_i)gt,i=∇θJ(θi) et,i=β∗et−1,i+(1−β)∗gt,i2e_{t,i} = \beta *e_{t-1,i} + (1-\beta)* g_{t,i}^2et,i=β∗et−1,i+(1−β)∗gt,i2 θt+1,i=θt,i−αet,i+δ⋅gt,i\theta_{t+1,i}=\theta_{t,i}-\frac{\alpha}{\sqrt{e_{t,i}}+\delta}\cdot g_{t,i}θt+1,i=θt,i−et,i+δα⋅gt,i
其中,β\betaβ 常取作 0.1。
六、Adam
自适应学习率,每次迭代学习率都有个确定的范围。
mt=β1mt−1+(1−β1)gtm_t=\beta_1 m_{t-1}+(1-\beta_1)g_tmt=β1mt−1+(1−β1)gt vt=β2vt−1+(1−β2)gt2v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2vt=β2vt−1+(1−β2)gt2 mt^=mt1−β1t\hat{m_t}=\frac{m_t}{1-\beta_1^t}mt^=1−β1tmt vt^=vt1−β2t\hat{v_t}=\frac{v_t}{1-\beta_2^t}vt^=1−β2tvt θt−1=θt−αvt^+δ⋅mt^\theta_{t-1}=\theta_t-\frac{\alpha}{\sqrt{\hat{v_t}}+\delta}\cdot \hat{m_t}θt−1=θt−vt^+δα⋅mt^
本文介绍了几种常用的深度学习优化算法,包括SGD、Batch GD和mini-batch,以及它们的问题。接着,讨论了Momentum和Nesterov Momentum如何改善SGD的稳定性与速度。然后,提到了AdaGrad和RMSProp,这两种自适应学习率的算法解决了学习率调整的难题。最后,重点讲述了Adam算法,它结合了RMSProp和Momentum的优点,实现自适应学习率并有效避免了早停问题。这些优化方法在训练神经网络时起着关键作用,帮助模型更快地收敛并找到更好的解决方案。
37万+

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



