📉 梯度下降的困境与破局:指数加权平均到底在做什么?
- 一、原生梯度下降:看似完美,实则脆弱
- 1.1 平缓区域:梯度太小,更新慢到 “龟速”
- 1.2 鞍点:梯度直接归零,彻底 “卡死”
- 1.3 局部极小值:误以为 “到谷底”,实则还在山腰
- 二、破局关键:指数移动加权平均(EWMA)
- 2.1 先分清:它不是优化器,是优化器的 “地基”
- 2.2 算术平均 vs 指数加权平均
- 三、指数移动加权平均:公式与直观理解
- 3.1 核心公式
- 3.2 直观展开:历史梯度的 “惯性叠加”
- 四、β 的影响:平缓度与灵敏度的平衡
- 4.1 Mermaid 趋势对比图
- 五、代码直观演示:指数加权平均的平滑效果
- 六、指数加权平均如何解决梯度下降痛点?
- 6.1 解决平缓区域
- 6.2 解决鞍点
- 6.3 解决局部极小值
- 七、总结:EWMA—— 优化器的 “隐形引擎”
在深度学习的参数优化旅程中,梯度下降是我们最熟悉的基石算法。一句经典公式贯穿始终:
w t e x t n e w = w t e x t o l d − e t a c d o t n a b l a J ( w ) w_{text{new}} = w_{text{old}} - eta cdot nabla J(w)wtextnew=wtextold−etacdotnablaJ(w)
它简洁、直观,却暗藏着难以避开的优化陷阱。当模型在高维空间中一路 “下坡” 时,总会遇到平缓地带、停滞拐点,甚至被困在局部谷底。这篇文章,我们就从梯度下降的痛点出发,彻底讲透指数移动加权平均—— 这个撑起动量法、AdaGrad、RMSProp、Adam 四大优化器的底层核心。
一、原生梯度下降:看似完美,实则脆弱
原生梯度下降只做一件事:用当前时刻的梯度,直接更新参数。
但在真实的损失曲面中,它会频繁遭遇三类致命问题👇
1.1 平缓区域:梯度太小,更新慢到 “龟速”
损失曲面并非全程陡峭,一旦进入平缓区域,梯度值会变得极小。
学习率e t a = 0.01 eta=0.01eta=0.01,梯度g = 1 g=1g=1→ 单次更新量仅0.01 0.010.01
学习率e t a = 0.001 eta=0.001eta=0.001,梯度g = 1 g=1g=1→ 单次更新量仅0.001 0.0010.001
梯度不为 0,但更新幅度微乎其微,模型长时间停滞不前。
1.2 鞍点:梯度直接归零,彻底 “卡死”
鞍点(Saddle Point)是优化路上的 “陷阱”。
此处梯度严格等于0,代入公式后:
w t e x t n e w = w t e x t o l d − e t a c d o t 0 w_{text{new}} = w_{text{old}} - eta cdot 0wtextnew=wtextold−etacdot0
参数完全不更新,模型直接原地 “摆烂”,无法继续下降。
1.3 局部极小值:误以为 “到谷底”,实则还在山腰
损失曲面布满局部极小值。
用原生梯度下降,一旦走到此处,梯度趋近于 0,更新停止,模型误以为已收敛到最优,却错失了真正的全局最小值。
二、破局关键:指数移动加权平均(EWMA)
面对以上困境,我们需要一个“惯性机制”—— 不只看当前梯度,还要参考历史梯度的趋势。
这就是**指数移动加权平均 ** 的核心价值。
2.1 先分清:它不是优化器,是优化器的 “地基”
很多同学会混淆概念:
❌ 指数加权平均 ≠ 梯度下降优化方法
✅ 它是动量法、AdaGrad、RMSProp、Adam这四大优化器的底层公式依赖
没有它,主流自适应优化器都无法实现。
2.2 算术平均 vs 指数加权平均
我们先从最朴素的平均说起:
算术平均:所有权重相等
t e x t M e a n = f r a c y 1 + y 2 + . . . + y n n text{Mean} = frac{y_1 + y_2 + ... + y_n}{n}textMean=fracy1+y2+...+ynn指数加权平均:越近的数据权重越大,越远权重指数级衰减
预测未来时,最近的信息最关键。
例:预测明天气温 → 今天权重 > 昨天权重 > 前天权重 > …
三、指数移动加权平均:公式与直观理解
3.1 核心公式
S t = ( 1 − b e t a ) c d o t y t + b e t a c d o t S t − 1 S_t = (1 - beta) cdot y_t + beta cdot S_{t-1}St=(1−beta)cdotyt+betacdotSt−1
符号定义:
y t y_tyt:t 时刻的梯度(当前值)
S t S_tSt:t 时刻的指数加权平均值
b e t a betabeta:权重衰减系数,常取0.9
S 0 = 0 S_0 = 0S0=0(初始状态)
3.2 直观展开:历史梯度的 “惯性叠加”
以b e t a = 0.9 beta=0.9beta=0.9展开第 100 次迭代:
最终展开为:
S 100 = 0.1 y 100 + 0.09 y 99 + 0.081 y 98 + 0.0729 y 97 + . . . S_{100} = 0.1y_{100} + 0.09y_{99} + 0.081y_{98} + 0.0729y_{97} + ...S100=0.1y100+0.09y99+0.081y98+0.0729y97+...
✅ 越近的梯度,权重越高
✅ 越远的梯度,权重按0.9 n 0.9^n0.9n快速衰减
✅ 历史梯度形成持续惯性
四、β 的影响:平缓度与灵敏度的平衡
b e t a betabeta直接决定曲线平滑程度,我们用一组对比清晰说明:
| β 值 | 对当前梯度依赖 | 对历史梯度依赖 | 曲线形态 | 适用场景 |
|---|---|---|---|---|
| 0.5 | 高(50%) | 低 | 波动大、陡峭 | 需快速响应变化 |
| 0.9 | 低(10%) | 高 | 平稳、顺滑 | 标准训练场景 |
4.1 Mermaid 趋势对比图
图表说明:β 越大,曲线越平滑,越能抵抗局部抖动与鞍点停滞;β 越小,响应越快但震荡更强。
五、代码直观演示:指数加权平均的平滑效果
用 Python 模拟 30 天随机气温,对比不同 β 的表现:
importnumpyasnpimportmatplotlib.pyplotasplt# 生成30天随机气温np.random.seed(233)t=np.arange(30)y=np.random.randint(15,30,size=30)+np.random.randn(30)*2defewma(y,beta=0.9):s=np.zeros_like(y)s[0]=y[0]foriinrange(1,len(y)):s[i]=(1-beta)*y[i]+beta*s[i-1]returns# 计算不同beta结果s1=ewma(y,beta=0.5)s2=ewma(y,beta=0.9)# 绘图plt.figure(figsize=(10,4))plt.plot(t,y,'o-',label='raw',alpha=0.4)plt.plot(t,s1,'s-',label='beta=0.5')plt.plot(t,s2,'D-',label='beta=0.9')plt.legend()plt.title('EWMA under different beta')plt.grid(alpha=0.3)plt.show()运行结论:
β=0.5:紧跟原始数据,波动明显
β=0.9:高度平滑,滤除高频抖动
六、指数加权平均如何解决梯度下降痛点?
回到最开始的三大问题,它的作用一目了然:
6.1 解决平缓区域
历史梯度提供持续更新动力,不会因当前梯度小而彻底停滞。
6.2 解决鞍点
即使当前梯度y t = 0 y_t=0yt=0:
S t = 0 + b e t a c d o t S t − 1 S_t = 0 + beta cdot S_{t-1}St=0+betacdotSt−1
加权平均值不为 0,参数依然能继续更新,直接跳过鞍点。
6.3 解决局部极小值
历史梯度形成“冲量”,帮助模型 “冲出” 局部谷底,向更优方向前进。
七、总结:EWMA—— 优化器的 “隐形引擎”
原生梯度下降易卡在平缓区、鞍点、局部极小值
指数加权平均 =历史梯度的指数衰减累加
公式:S t = ( 1 − b e t a ) y t + b e t a S t − 1 S_t=(1-beta)y_t + beta S_{t-1}St=(1−beta)yt+betaSt−1,β 常用0.9
β 越大 → 越平滑 → 抗干扰、越稳定
它是动量法、Adam等顶级优化器的地基,理解它,才算真正懂深度学习优化
在后续的文章中,我们将基于指数加权平均,依次拆解Momentum、AdaGrad、RMSProp、Adam的完整逻辑,带你彻底吃透深度学习优化的核心脉络。