Gradient Descent/zh: Difference between revisions
(Force re-parse after Math source-mode rollout (v1.2.0)) Tags: ci-deploy Reverted |
(Pass 2 force re-parse) Tags: ci-deploy Reverted |
||
| Line 115: | Line 115: | ||
[[Category:Introductory]] | [[Category:Introductory]] | ||
<!--v1.2.0 cache-bust--> | <!--v1.2.0 cache-bust--> | ||
<!-- pass 2 --> | |||
Revision as of 07:00, 24 April 2026
| Article | |
|---|---|
| Topic area | Optimization |
| Difficulty | Introductory |
梯度下降(Gradient Descent)是一种用于求解可微函数局部最小值的一阶迭代优化算法。它是几乎所有现代机器学习训练过程的基础,从简单的线性回归(Linear Regression)到拥有数十亿参数的深度神经网络。
直觉理解
想象你站在浓雾弥漫的山坡上。你看不到谷底,但能感受到脚下的坡度。最自然的策略就是朝最陡峭的下坡方向迈出一步,然后重新评估。梯度下降正是将这一想法形式化:在每一步中,算法计算函数最陡上升方向(即梯度),然后朝相反方向移动。
每步的大小由一个标量控制,称为学习率(Learning Rate)(通常记为 $ \eta $)。较大的学习率前进速度快,但有越过最小值的风险;较小的学习率收敛更可靠,但可能需要过多的步数。
数学公式
给定一个可微的目标函数 $ f:\mathbb{R}^n \to \mathbb{R} $,梯度下降通过以下更新规则生成一系列迭代点:
- $ \theta_{t+1} = \theta_t - \eta \, \nabla f(\theta_t) $
其中 $ \nabla f(\theta_t) $ 是在当前点 $ \theta_t $ 处计算的梯度向量,$ \eta > 0 $ 是学习率。
在一维情况下,公式简化为:
- $ \theta_{t+1} = \theta_t - \eta \, f'(\theta_t) $
梯度 $ \nabla f $ 指向最陡上升方向,因此减去它会使迭代点向下移动。
批量、随机和小批量变体
当目标函数具有数据点平均值的形式时,
- $ f(\theta) = \frac{1}{N}\sum_{i=1}^{N} \ell(\theta;\, x_i, y_i) $
三种常见策略在用多少数据来估计梯度方面有所不同:
| 变体 | 梯度计算范围 | 每步计算成本 | 梯度噪声 |
|---|---|---|---|
| 批量(全量)梯度下降 | 所有 $ N $ 个样本 | 高 | 无 |
| 随机梯度下降(SGD) | 1个随机样本 | 低 | 高 |
| 小批量梯度下降(Mini-batch Gradient Descent) | $ B $ 个随机样本($ 1 < B < N $) | 中 | 中 |
全量批量梯度下降计算精确梯度,因此沿着平滑轨迹向最小值移动。随机梯度下降使用单个样本来估计梯度,大幅减少每步计算量,但代价是轨迹更加嘈杂。小批量梯度下降在两者之间取得平衡,是实践中最常见的选择,典型的批量大小在32到512之间。
收敛性
凸函数
对于具有利普希茨连续梯度(常数 $ L $)的凸函数(Convex Function),使用固定学习率 $ \eta \leq 1/L $ 的梯度下降以 $ O(1/t) $ 的速率收敛。如果函数还具有参数 $ \mu > 0 $ 的强凸性,则收敛加速为线性(指数)速率:
- $ f(\theta_t) - f(\theta^*) \leq \left(1 - \frac{\mu}{L}\right)^t \bigl(f(\theta_0) - f(\theta^*)\bigr) $
比值 $ \kappa = L / \mu $ 称为条件数(Condition Number),它决定了算法收敛的速度。病态问题(较大的 $ \kappa $)收敛缓慢。
非凸函数
大多数深度学习目标函数是非凸的。在这种情况下,梯度下降只能保证收敛到驻点(Stationary Point)(其中 $ \nabla f = 0 $),这可能是局部最小值、鞍点(Saddle Point),甚至是局部最大值。在实践中,高维空间中鞍点比局部最小值更成问题。
学习率选择
选择学习率是最重要的实际决策之一:
- 过大 — 迭代点振荡或发散。
- 过小 — 收敛速度慢得无法接受。
- 学习率调度(Learning Rate Schedule) — 许多实践者从较大的学习率开始,随时间逐渐减小(阶梯衰减、指数衰减、余弦退火)。
- 线搜索(Line Search) — 经典数值方法在每步选择 $ \eta $ 以满足沃尔夫条件或阿米霍条件等,但这在深度学习中很少使用。
一种常用的启发式方法是在对数尺度上尝试多个值(例如 $ 10^{-1}, 10^{-2}, 10^{-3} $),然后选择在不产生不稳定性的前提下损失下降最快的那个。
扩展与改进
几种重要的改进方法解决了原始梯度下降的局限性:
- 动量(Momentum) — 从过去的梯度中积累速度向量,帮助在峡谷状地形中加速收敛。
- 涅斯捷罗夫加速梯度(Nesterov Accelerated Gradient) — 一种动量变体,在前瞻位置评估梯度,具有更好的理论收敛速率。
- 自适应方法(Adaptive Methods)(Adagrad、RMSProp、Adam)— 根据梯度历史为每个参数维护自适应学习率。
- 二阶方法(Second-order Methods) — 如牛顿法和L-BFGS等算法使用曲率信息(海森矩阵或其近似)以加速收敛,但对大规模问题通常计算成本过高。
实践技巧
- 特征缩放(Feature Scaling) — 归一化输入特征使其具有相似的范围可以显著改善收敛性,因为损失曲面变得更加各向同性。
- 梯度裁剪(Gradient Clipping) — 限制梯度的范数以防止过大的更新。
- 随机初始化 — 从合理的随机初始化开始(例如神经网络中的Xavier或He初始化)可以避免对称性破缺问题。
- 监控损失曲线 — 绘制训练损失随迭代次数的变化是最简单的诊断方法:平滑下降的曲线表示训练健康;振荡则表明学习率过高。
应用
梯度下降及其变体广泛应用于科学和工程领域:
- 训练机器学习模型(线性模型、神经网络、支持向量机)
- 信号处理与控制系统
- 物理和成像中的逆问题
- 运筹学和物流优化
- 经济学和博弈论均衡计算
参见
- Stochastic Gradient Descent
- Backpropagation
- Loss Functions
- Neural Networks
- Overfitting and Regularization
参考文献
- Cauchy, A. (1847). "Méthode générale pour la résolution des systèmes d'équations simultanées". Comptes Rendus de l'Académie des Sciences.
- Boyd, S. and Vandenberghe, L. (2004). Convex Optimization. Cambridge University Press.
- Ruder, S. (2016). "An overview of gradient descent optimization algorithms". arXiv:1609.04747.
- Goodfellow, I., Bengio, Y. and Courville, A. (2016). Deep Learning, Chapter 8. MIT Press.