梯度下降法
梯度下降法是一种用于寻找函数局部最小值的迭代优化算法。它通过沿着函数梯度(即最陡下降方向)的反方向逐步调整参数来逼近最小值点。这个方法在机器学习和运筹学中应用广泛,特别是在处理大规模优化问题时。
第一步:理解梯度的概念
梯度是一个向量,包含函数在各个方向上的偏导数。对于一个多元函数 \(f(x_1, x_2, \dots, x_n)\),其梯度记为 \(\nabla f\),定义为:
\[\nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n} \right) \]
梯度指向函数值增长最快的方向,而负梯度(\(-\nabla f\))则指向函数值下降最快的方向。例如,若 \(f(x, y) = x^2 + y^2\),则梯度为 \((2x, 2y)\),在点 (1,1) 处,梯度指向 (2,2)(上升方向),负梯度指向 (-2,-2)(下降方向)。
第二步:梯度下降法的基本原理
算法的核心思想是:从初始点 \(x^{(0)}\) 开始,迭代更新参数:
\[x^{(k+1)} = x^{(k)} - \alpha \nabla f(x^{(k)}) \]
其中:
- \(x^{(k)}\) 是第 \(k\) 次迭代的参数值。
- \(\alpha\) 是学习率(步长),控制每次更新的幅度。
- \(\nabla f(x^{(k)})\) 是当前点的梯度。
每次迭代沿负梯度方向移动一小步,逐步逼近局部最小值。例如,对于函数 \(f(x) = x^2\),梯度为 \(2x\),从 \(x=3\) 开始,若 \(\alpha=0.1\),则迭代过程为:
\(x^{(1)} = 3 - 0.1 \times 6 = 2.4\),
\(x^{(2)} = 2.4 - 0.1 \times 4.8 = 1.92\),
逐渐收敛到最小值点 \(x=0\)。
第三步:学习率的选择
学习率 \(\alpha\) 是关键超参数:
- 若 \(\alpha\) 太小,收敛速度慢,需要大量迭代(如图1左)。
- 若 \(\alpha\) 太大,可能越过最小值点,导致振荡甚至发散(如图1右)。
- 自适应学习率策略(如Adam算法)可动态调整 \(\alpha\),提高效率。
第四步:梯度下降法的变种
根据数据使用方式,可分为三类:
- 批量梯度下降:每次迭代使用全部数据计算梯度。优点是精度高,但计算成本高。
- 随机梯度下降:每次随机选择一个样本计算梯度。计算快,但收敛不稳定。
- 小批量梯度下降:折中方案,每次使用一小批样本(如32个)。兼顾稳定性和效率,最为常用。
第五步:收敛性与停止条件
梯度下降法在函数凸且光滑时保证收敛到全局最小值。非凸函数可能陷入局部极小值。常用停止条件:
- 梯度范数小于阈值(如 \(\| \nabla f \| < 10^{-6}\))。
- 相邻迭代点变化很小(如 \(\| x^{(k+1)} - x^{(k)} \| < \epsilon\))。
- 达到最大迭代次数。
第六步:实际应用中的注意事项
- 特征缩放:若输入特征量纲差异大(如年龄 vs. 收入),需标准化(如Z-score)以加速收敛。
- 非凸问题:结合动量法(如加入惯性项)避免卡在局部极小值。
- 正则化:在机器学习中,常加入L1/L2正则项防止过拟合。
通过以上步骤,梯度下降法成为一个灵活且强大的工具,可用于训练神经网络、拟合逻辑回归模型等复杂任务。其核心优势在于简单通用,尤其适合大规模数据场景。