Gradient Descent/zh

    From Marovi AI
    Languages: English | Español | 中文
    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初始化)可以避免对称性破缺问题。
    • 监控损失曲线 — 绘制训练损失随迭代次数的变化是最简单的诊断方法:平滑下降的曲线表示训练健康;振荡则表明学习率过高。

    应用

    梯度下降及其变体广泛应用于科学和工程领域:

    • 训练机器学习模型(线性模型、神经网络、支持向量机)
    • 信号处理与控制系统
    • 物理和成像中的逆问题
    • 运筹学和物流优化
    • 经济学和博弈论均衡计算

    参见

    参考文献

    • 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.