【优化器】Adagrad 、RMSPorp、Adam详解

张开发
2026/4/14 8:56:44 15 分钟阅读

分享文章

【优化器】Adagrad 、RMSPorp、Adam详解
文章目录AdagradRMSPorpAdamAdagrad 存在的问题RMSProp 对 Adagrad 的优化1. 梯度累积方式优化2. 优化效果AdagradAdagrad 优化算法被称为自适应学习率优化算法。之前我们讲的随机梯度下降算法对所有参数都是使用相同的、固定的学习率进行优化的但是不同参数的梯度差异可能很大使用相同的学习率效果不会很好。举例说明假设损失函数是f ( x ) x 1 2 10 x 2 2 f(x)x_1^2 10x_2^2f(x)x12​10x22​x xx和y yy的初始值分别为x 1 40 , x 2 20 x_140, x_220x1​40,x2​20(通过观察我们即可知道x 1 0 x_10x1​0和x 2 0 x_20x2​0就是两个参数的极点)对x 1 x_1x1​求偏导∂ l o s s ∂ x 1 2 x 1 \frac{\partial loss}{\partial x_1} 2x_1∂x1​∂loss​2x1​代入初始值x 1 40 x_140x1​40得∂ l o s s ∂ x 1 80 \frac{\partial loss}{\partial x_1} 80∂x1​∂loss​80对x 2 x_2x2​求偏导∂ l o s s ∂ x 2 20 x 2 \frac{\partial loss}{\partial x_2} 20x_2∂x2​∂loss​20x2​代入初始值x 2 20 x_220x2​20得∂ l o s s ∂ x 2 400 \frac{\partial loss}{\partial x_2} 400∂x2​∂loss​400x 1 x_1x1​将要移动的幅度小于x 2 x_2x2​将要移动的幅度而x 1 x_1x1​距离极值点x 1 0 x_10x1​0是较远的所以我们使用梯度下降法效果并不好Adagrad 思想对于不同参数设置不同学习率方法对于每个参数初始化一个累计平方梯度r 0 r0r0然后每次将该参数的梯度平方求和累加到这个变量r rr上r ← r g 2 r \leftarrow r g^2r←rg2然后再更新这个参数的时候学习率变为η r δ \frac{\eta}{\sqrt{r\delta}}rδ​η​权重更新w ← w − η r δ ∗ g w \leftarrow w - \frac{\eta}{\sqrt{r\delta}} * gw←w−rδ​η​∗g其中g gg为梯度r rr为累积平方梯度初始为0η \etaη为学习率δ \deltaδ为小参数避免分母为0一般取值10 − 10 10^{-10}10−10。这样不同的参数由于梯度不同它们对应的r rr大小也就不同所以学习率就不同这也就实现了自适应的学习率。总结Adagrad 的核心想法就是如果一个参数的梯度一直都非常大那么其对应的学习率就变小一点防止震荡而一个参数的梯度一直都非常小那么这个参数的学习率就变大一点使得其能够更快地更新这就是 Adagrad 算法加快深层神经网络训练速度的核心。RMSPorpRMSPropRoot Mean Square Propagation 均方根传播RMSProp 是在 Adagrad 的基础上进一步在学习率的方向上优化。累计平方梯度更新r ← λ r ( 1 − λ ) g 2 r \leftarrow \lambda r (1 - \lambda)g^2r←λr(1−λ)g2权重更新w ← w − η r δ ∗ g w \leftarrow w - \frac{\eta}{\sqrt{r\delta}} * gw←w−rδ​η​∗g其中g gg为梯度r rr为累积平方梯度初始为0λ \lambdaλ为衰减系数η \etaη为学习率δ \deltaδ为小参数避免分母为0。Adam在 Gradient Descent 的基础上做了如下几个方面改进梯度方面增加了 momnentum 使用累积梯度v ← α v ( 1 − α ) g v \leftarrow \alpha v (1 - \alpha)gv←αv(1−α)g同RMSProp 优化算法一样对学习率进行优化使用累积平方梯度r ← λ r ( 1 − λ ) g 2 r \leftarrow \lambda r (1 - \lambda)g^2r←λr(1−λ)g2偏差纠正t tt表示迭代次数v ^ v 1 − α t , r ^ r 1 − λ t \hat{v} \frac{v}{1-\alpha^t}, \quad \hat{r} \frac{r}{1-\lambda^t}v^1−αtv​,r^1−λtr​在如上三点改进的基础上权重更新w ← w − η r ^ δ ∗ v ^ w \leftarrow w - \frac{\eta}{\sqrt{\hat{r}\delta}} * \hat{v}w←w−r^δ​η​∗v^为啥要偏差纠正第1次更新时v 1 ← α v 0 ( 1 − α ) g 1 v_1 \leftarrow \alpha v_0 (1 - \alpha)g_1v1​←αv0​(1−α)g1​由于v 0 v_0v0​的初始是0且α \alphaα值一般会设置为接近于1因此t tt较小时v vv的值是偏向于0的。Adagrad 存在的问题Adagrad 虽然实现了自适应学习率但存在一个明显缺陷累积平方梯度r rr会一直累加、单调递增r ← r g 2 r \leftarrow r g^2r←rg2随着训练迭代次数增多r rr会越来越大导致有效学习率η r δ \frac{\eta}{\sqrt{r\delta}}rδ​η​持续不断减小后期几乎趋近于 0参数更新停滞模型无法继续收敛。RMSProp 对 Adagrad 的优化RMSProp 核心改进引入指数滑动平均EMA只累积近期梯度避免历史梯度无限累积。1. 梯度累积方式优化Adagradr ← r g 2 r \leftarrow r g^2r←rg2RMSPropr ← λ r ( 1 − λ ) g 2 r \leftarrow \lambda r (1-\lambda)g^2r←λr(1−λ)g2λ \lambdaλ衰减系数通常取 0.9 左右历史梯度按指数衰减只保留近期梯度信息r rr不会无限增大学习率不会持续衰减到接近 02. 优化效果解决 Adagrad 后期学习率过小、收敛停滞的问题训练更稳定收敛速度更快更适合深度神经网络、非凸优化场景参数更新公式保持类似形式w ← w − η r δ ⋅ g w \leftarrow w - \frac{\eta}{\sqrt{r\delta}} \cdot gw←w−rδ​η​⋅g本文参考https://www.bilibili.com/video/BV1jh4y1q7ua/?spm_id_from333.1387.favlist.content.clickvd_sourcecf0b4c9c919d381324e8f3466e714d7a

更多文章