梯度下降:核心概念
梯度下降(Gradient Descent)是一种迭代优化算法,用于寻找可微函数的局部最小值。它通过沿函数梯度(导数)的反方向逐步调整参数,最小化目标函数(如机器学习中的损失函数)。
工作原理:分步解析
1. 梯度计算
- 梯度(∇J):目标函数 ( J(\theta) ) 关于参数 ( \theta ) 的偏导数向量,指向函数值上升最快的方向。
- 核心思想:沿梯度反方向(( -\nabla J(\theta) ))更新参数,使函数值下降。
2. 参数更新规则
[
\theta_{\text{new}} = \theta_{\text{old}} - \alpha \cdot \nabla J(\theta_{\text{old}})
]
- ( \theta ):待优化参数(如权重)
- ( \alpha ):学习率(步长),控制更新幅度
- ( \nabla J(\theta) ):当前参数处的梯度
3. 迭代过程
初始化参数 θ
while 未收敛:
计算梯度 ∇J(θ)
更新参数:θ = θ - α * ∇J(θ)
检查收敛条件(如梯度接近0、达到最大迭代次数)
4. 关键概念图解
损失函数曲面:
高点
/|\
| 梯度方向 (上升)
|
θ_new <--- 梯度反方向 (下降)
|
\|/
低点
主要变体及特点
1. 批量梯度下降(Batch GD)
- 原理:每次迭代使用整个训练集计算梯度。
- 优点:梯度方向稳定,收敛到全局最优(凸函数)。
- 缺点:计算开销大,内存要求高,不适合大数据集。
- 更新公式:
[
\theta = \theta - \alpha \cdot \frac{1}{N} \sum_{i=1}^{N} \nabla J(\theta; x_i, y_i)
]
2. 随机梯度下降(SGD)
- 原理:每次迭代随机选一个样本计算梯度。
- 优点:计算快,可在线学习,能跳出局部极小值。
- 缺点:梯度波动大,收敛路径震荡。
- 更新公式:
[
\theta = \theta - \alpha \cdot \nabla J(\theta; x_i, y_i) \quad (\text{随机选 } i)
]
3. 小批量梯度下降(Mini-batch GD)
- 原理:每次迭代使用一小批样本(如32、64个)计算梯度。
- 优点:平衡计算效率和稳定性(深度学习最常用方法)。
- 更新公式:
[
\theta = \theta - \alpha \cdot \frac{1}{B} \sum_{i=1}^{B} \nabla J(\theta; x_i, y_i) \quad (B=\text{批次大小})
]
高级优化变体
1. 动量法(Momentum)
- 原理:引入动量项 ( v ) 模拟惯性,加速收敛并减少震荡。
- 更新规则:
[
v = \beta v + (1 - \beta) \nabla J(\theta) \
\theta = \theta - \alpha v
]
(( \beta ) 通常取0.9,控制历史梯度影响)
2. AdaGrad
- 原理:自适应调整学习率,对稀疏特征加大更新。
- 更新规则:
[
s = s + (\nabla J(\theta))^2 \
\theta = \theta - \frac{\alpha}{\sqrt{s + \epsilon}} \cdot \nabla J(\theta)
]
(( s ) 累积梯度平方,( \epsilon ) 防除零)
3. RMSProp
- 改进:解决 AdaGrad 学习率过早衰减问题,引入衰减系数 ( \rho )。
[
s = \rho s + (1 - \rho) (\nabla J(\theta))^2 \
\theta = \theta - \frac{\alpha}{\sqrt{s + \epsilon}} \cdot \nabla J(\theta)
]
4. Adam(最流行)
- 原理:结合动量法和 RMSProp,自适应学习率。
- 更新规则:
[
m = \beta_1 m + (1 - \beta_1) \nabla J(\theta) \quad \text{(一阶矩)} \
v = \beta_2 v + (1 - \beta_2) (\nabla J(\theta))^2 \quad \text{(二阶矩)} \
\theta = \theta - \alpha \cdot \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon} \quad \text{(偏差校正后)}
]
(推荐值:( \beta_1=0.9, \beta_2=0.999, \epsilon=10^{-8} ))
关键问题与解决方案
问题 | 解决方案 |
---|---|
局部极小值 | 使用动量法、随机梯度下降 |
学习率选择困难 | AdaGrad/RMSProp/Adam 自适应调整 |
鞍点停滞 | 动量法帮助逃离鞍点 |
梯度消失/爆炸 | 结合梯度裁剪、权重初始化技巧 |
直观理解:下山比喻
想象你蒙眼在山顶(高损失点)找山谷(最低点):
- 梯度:用脚探测最陡的下坡方向。
- 学习率:每一步的跨度(太大可能跨过山谷,太小则耗时)。
- 动量:如同带惯性下山,避免来回震荡。
- 小批量:随机选几条小路探路,综合决定方向。
总结
- 本质:通过负梯度方向迭代更新参数。
- 变体选择:
- 大数据集 → 小批量 GD 或 Adam
- 稀疏数据 → AdaGrad
- 非凸优化 → 动量法 或 Adam
- 调参关键:学习率、批次大小、优化器超参数(如 ( \beta ))。