ARTICLE

gradient descent

梯度下降 (Gradient Descent) 梯度下降(Gradient Descent)是一种通过迭代方式寻找可微函数局部(或全局)极小值的一阶优化算法。其核心思想是:在当前点沿函数梯度的反方向(即函数值下降最快的方向)移动一步,反复迭代直至收敛到某个极小点。作为机器学习、深度学习和计量经济学中参数估计的基石算法,梯度下降支撑着从线性回归的普通最小二乘法

浏览 0 更新 2025-10-26

梯度下降 (Gradient Descent)

梯度下降(Gradient Descent)是一种通过迭代方式寻找可微函数局部(或全局)极小值的一阶优化算法。其核心思想是:在当前点沿函数梯度反方向(即函数值下降最快的方向)移动一步,反复迭代直至收敛到某个极小点。作为机器学习深度学习计量经济学中参数估计的基石算法,梯度下降支撑着从线性回归普通最小二乘法到深度神经网络的反向传播训练等几乎所有现代数据驱动模型的求解。

直观理解与基本迭代

考虑一个定义在 Rn\mathbb{R}^n 上的可微目标函数 f:RnRf: \mathbb{R}^n \to \mathbb{R}。在任意点 θRn\boldsymbol{\theta} \in \mathbb{R}^n,梯度 f(θ)\nabla f(\boldsymbol{\theta}) 指向函数值增长最快的方向,其模长衡量了该方向上的变化率。因此,沿梯度的反方向 f(θ)-\nabla f(\boldsymbol{\theta}) 移动,函数值将以局部最快速度下降。

基本迭代公式为:

θt+1=θtηf(θt)\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \cdot \nabla f(\boldsymbol{\theta}_t)

其中,θt\boldsymbol{\theta}_t 是第 tt 步迭代的参数向量,η>0\eta > 0学习率(Learning Rate,亦称步长),f(θt)\nabla f(\boldsymbol{\theta}_t) 是在 θt\boldsymbol{\theta}_t 处的梯度。算法持续迭代直至梯度充分接近零向量(即 f(θt)<ε\|\nabla f(\boldsymbol{\theta}_t)\| < \varepsilon),或达到预设的最大迭代次数。

这一朴素迭代背后的直觉与物理世界中的"沿山坡最陡方向下山"完全一致:站在山腰某处,环顾四周识别最陡的下坡方向,朝该方向迈出一小步,然后在新位置重新判断方向——重复此过程,最终将抵达谷底。

数学基础:为何是负梯度方向

泰勒展开可以严格论证负梯度方向是局部最优下降方向。对 ffθ\boldsymbol{\theta} 处进行一阶展开:

f(θ+Δθ)f(θ)+f(θ)Δθf(\boldsymbol{\theta} + \Delta\boldsymbol{\theta}) \approx f(\boldsymbol{\theta}) + \nabla f(\boldsymbol{\theta})^\top \Delta\boldsymbol{\theta}

为了使 ff 下降最多,我们希望选择方向 Δθ\Delta\boldsymbol{\theta} 使得内积 f(θ)Δθ\nabla f(\boldsymbol{\theta})^\top \Delta\boldsymbol{\theta} 尽可能为负且绝对值大。在 Δθ=1\|\Delta\boldsymbol{\theta}\| = 1 的约束下(考虑方向而非步长),由柯西-施瓦茨不等式

f(θ)Δθf(θ)Δθ\nabla f(\boldsymbol{\theta})^\top \Delta\boldsymbol{\theta} \ge -\|\nabla f(\boldsymbol{\theta})\| \cdot \|\Delta\boldsymbol{\theta}\|

等号成立当且仅当 Δθ\Delta\boldsymbol{\theta}f(θ)\nabla f(\boldsymbol{\theta}) 方向完全相反。因此 Δθ=f(θ)/f(θ)\Delta\boldsymbol{\theta} = -\nabla f(\boldsymbol{\theta}) / \|\nabla f(\boldsymbol{\theta})\| 是使得一阶近似下降最快的单位方向,这便证明了负梯度方向的最优性。

三种典型变体

根据每次迭代使用多少数据来计算梯度,梯度下降有以下三种主要变体:

批量梯度下降 (Batch Gradient Descent, BGD)

每次迭代使用全部训练数据来计算目标函数的梯度,然后更新参数。对于均方误差最小化问题(如线性回归),目标函数为:

f(θ)=1Ni=1N(θ;xi,yi)f(\boldsymbol{\theta}) = \frac{1}{N} \sum_{i=1}^{N} \ell(\boldsymbol{\theta}; \mathbf{x}_i, y_i)

其梯度为:

\nabla f(\boldsymbol{\theta}) = \frac{1}{N} \sum_{i=1}^{N} \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}; \mathbf{x}_i, y_i)

BGD 的优点是每次更新方向精确,对凸函数能在适当学习率下保证收敛到全局极小值;缺点是当 NN 巨大时,每次迭代的计算代价高昂,且无法有效利用在线学习或流式数据场景。

随机梯度下降 (Stochastic Gradient Descent, SGD)

SGD 每次迭代仅使用一个随机抽样的样本 (xi,yi)(\mathbf{x}_i, y_i) 计算梯度:

\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \cdot \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}_t; \mathbf{x}_i, y_i)

由于单个样本梯度的期望等于真实梯度(即 E[i]=f\mathbb{E}[\nabla \ell_i] = \nabla f),SGD 在期望意义下沿正确方向前进,属于随机逼近(Stochastic Approximation)的经典特例——Robbins-Monro算法。SGD 的最大优势在于计算轻量、可在线更新,并能利用其随机性逃离鞍点和浅层局部极小值;代价是更新方向带有较大噪声,收敛路径呈现锯齿状波动,即使在极小值附近也不断振荡。

小批量梯度下降 (Mini-Batch Gradient Descent)

这是实际应用中最常用的方案:每次迭代使用一个小批量(Mini-Batch)的 mm 个样本(通常 mm 取 32、64 或 128)计算梯度:

\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \cdot \frac{1}{m} \sum_{i=1}^{m} \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}_t; \mathbf{x}_i, y_i)

Mini-Batch 在 BGD 的稳定性和 SGD 的效率之间取得折中:一方面,利用向量化运算在 GPU 上高效计算;另一方面,保持适度的随机性以跳出不良局部极小值。现代深度学习框架(如 PyTorch、TensorFlow)均默认采用 Mini-Batch 策略。

学习率的关键角色

学习率 η\eta 是梯度下降中最重要的超参数,其选择直接影响收敛速度与稳定性:

  • η\eta 过大:可能导致参数在极小值附近振荡甚至发散,损失函数不降反升;
  • η\eta 过小:收敛极其缓慢,可能陷入高原区域(Plateau)迟迟无法前进;
  • 最优策略:通常采用学习率衰减(Learning Rate Decay)或自适应学习率方法,在训练初期使用较大学习率快速逼近极小值,后期逐步缩小以精细收敛。

动量法与自适应优化器

为克服朴素 SGD 的振荡和收敛缓慢问题,研究者提出了一系列改进方案:

动量法(Momentum) 借鉴物理学中惯性的概念,引入一个速度变量 vt\mathbf{v}_t 累积历史梯度信息:

vt+1=γvt+ηf(θt)θt+1=θtvt+1\begin{aligned} \mathbf{v}_{t+1} &= \gamma \mathbf{v}_t + \eta \nabla f(\boldsymbol{\theta}_t) \\ \boldsymbol{\theta}_{t+1} &= \boldsymbol{\theta}_t - \mathbf{v}_{t+1} \end{aligned}

其中 γ[0,1)\gamma \in [0,1) 为动量系数(通常取 0.9)。动量法在梯度方向一致时加速前进,在方向反复震荡时通过平滑效应抑制波动,显著加快了在峡谷地形(Ravine)中的收敛速度。

AdaGrad 对每个参数独立地调整学习率,根据历史梯度平方和进行缩放——对频繁更新的参数减小学习率,对稀疏参数保持较大学习率,尤其适用于稀疏数据的场景(如自然语言处理)。

RMSProp 将 AdaGrad 的累加改为指数加权移动平均,避免学习率过早衰减至零,使算法在非凸优化中表现更为稳健。

Adam(Adaptive Moment Estimation) 将 Momentum 和 RMSProp 的思想相结合,同时维护梯度的一阶矩(均值)和二阶矩(未中心化方差)的指数移动平均,并引入偏差修正项。Adam 以其鲁棒性和较少的超参数调优需求,成为当前深度学习领域最广泛使用的默认优化器。

收敛性分析

梯度下降的收敛性质与目标函数的结构密切相关:

凸函数情形:若 ff凸函数且梯度满足Lipschitz连续性(即 f(x)f(y)Lxy\|\nabla f(\mathbf{x}) - \nabla f(\mathbf{y})\| \le L\|\mathbf{x} - \mathbf{y}\|),则取固定学习率 η1/L\eta \le 1/L 时,批量梯度下降以 O(1/t)\mathcal{O}(1/t) 的速率收敛于全局极小值。对于强凸函数(如岭回归的目标函数),可获得更快的线性收敛速率 O(ρt)\mathcal{O}(\rho^t),其中 ρ<1\rho < 1

非凸函数情形:在深度学习中,损失函数的损失曲面通常是非凸的,充斥着大量鞍点和局部极小值。经典的梯度下降仅能保证收敛到某个驻点(梯度为零),无法区分为极小值、极大值还是鞍点。然而实践中,随机梯度下降的噪声特性使其能有效逃离鞍点,而深度神经网络的过参数化特性使得许多局部极小值在损失值上与全局极小值相差无几——这一现象部分解释了深度学习模型为何能在非凸优化中取得卓越表现。

在经济学与计量经济学中的应用

梯度下降在经济学和计量经济学中有广泛而深远的应用:

极大似然估计(MLE):许多经济模型的似然函数无解析解(如Logit模型Probit模型随机前沿分析),必须借助数值优化方法求解。梯度下降(及其拟牛顿变体,如BFGS算法)是求解 MLE 参数的标准工具。

广义矩估计(GMM):在广义矩估计中,目标函数通常是非线性的二次型 g(θ)Wg(θ)\mathbf{g}(\boldsymbol{\theta})^\top \mathbf{W} \mathbf{g}(\boldsymbol{\theta}),其梯度可解析计算,因而梯度下降类方法可用于迭代求解最优权重矩阵和参数向量。

计算一般均衡(CGE)模型:大规模可计算一般均衡模型的求解涉及高维非线性方程系统的数值求解,梯度下降及其随机变体在求解过程中扮演重要角色。

强化学习与动态规划:在动态随机一般均衡(DSGE)模型的求解和强化学习在经济学中的应用中,策略梯度方法作为梯度下降在随机策略空间中的拓展,正日益成为求解动态经济决策问题的有力工具。

局限与注意事项

尽管梯度下降强大且广泛适用,使用者仍需警惕以下局限:

  1. 局部极小值陷阱:对于高度非凸的函数,朴素梯度下降可能陷入较差的局部极小值而无法找到全局最优解。实际中常通过多次随机初始化(Multi-Start)或使用随机梯度来缓解。
  2. 鞍点问题:在高维优化中,鞍点比局部极小值更为常见。梯度在鞍点处为零,朴素梯度下降可能在此处停滞。动量法和自适应优化器对此有一定的缓解效果。
  3. 梯度消失与爆炸:在深度神经网络的反向传播中,梯度通过链式法则逐层相乘,可能随网络深度呈指数级衰减(梯度消失)或增长(梯度爆炸),导致浅层参数几乎无法更新。ReLU激活函数批归一化残差连接等架构创新正是为解决这一问题而设计。
  4. 超参数敏感性:学习率、动量系数、批量大小等超参数的选择对收敛行为影响显著,通常需要依赖经验法则、网格搜索或贝叶斯优化进行调优。