这里写目录标题
一、牛顿法vs.梯度下降
牛顿法和梯度下降都是优化算法,用于寻找函数的最小值(或最大值),但它们在原理、收敛速度和适用场景上有显著不同。以下是它们的核心区别:
1. 基本思想
(1)梯度下降(Gradient Descent)
-
目标:找到函数 f ( x ) f(x) f(x) 的最小值。
-
方法:沿负梯度方向(最陡下降方向)迭代更新参数:
x k + 1 = x k − α ∇ f ( x k ) x_{k+1} = x_k - \alpha \nabla f(x_k) xk+1=xk−α∇f(xk)- ∇ f ( x k ) \nabla f(x_k) ∇f(xk) 是梯度(一阶导数)。
- α \alpha α 是学习率(步长),需手动设定。
-
特点:
- 只使用一阶导数(梯度)。
- 适用于大规模数据(计算量小)。
- 收敛速度较慢(线性收敛)。
(2)牛顿法(Newton’s Method)
-
目标:同样寻找 f ( x ) f(x) f(x) 的最小值,但利用二阶导数信息。
-
方法:在当前位置用二次函数近似 f ( x ) f(x) f(x),并直接跳到极小点:
x k + 1 = x k − H − 1 ( x k ) ∇ f ( x k ) x_{k+1} = x_k - H^{-1}(x_k) \nabla f(x_k) xk+1=xk−H−1(xk)∇f(xk)- H ( x k ) H(x_k) H(xk) 是 Hessian 矩阵(二阶导数矩阵)。
- H − 1 ( x k ) H^{-1}(x_k) H−1(xk) 是 Hessian 的逆矩阵。
-
特点:
- 使用二阶导数(Hessian 矩阵)。
- 收敛速度更快(二次收敛)。
- 计算成本高(需计算和存储 Hessian 矩阵及其逆)。
2. 关键区别
特性 | 梯度下降(Gradient Descent) | 牛顿法(Newton’s Method) |
---|---|---|
导数信息 | 一阶(梯度) | 二阶(Hessian 矩阵) |
更新公式 | x k + 1 = x k − α ∇ f ( x k ) x_{k+1} = x_k - \alpha \nabla f(x_k) xk+1=xk−α∇f(xk) | x k + 1 = x k − H − 1 ∇ f ( x k ) x_{k+1} = x_k - H^{-1} \nabla f(x_k) xk+1=xk−H−1∇f(xk) |
收敛速度 | 线性收敛(较慢) | 二次收敛(更快) |
计算复杂度 | 低(仅需梯度) | 高(需 Hessian 矩阵及其逆) |
适用场景 | 大规模优化(如深度学习) | 小规模、精确优化(如数值计算) |
步长调整 | 需手动设定学习率 α \alpha α | 自动计算最优步长(Hessian 调整) |
鲁棒性 | 对初始点不敏感 | 对初始点敏感,可能发散 |
3. 直观对比
(1)梯度下降
- 像“盲人下山”:只感知当前最陡的方向(梯度),一步步往下走。
- 缺点:
- 如果学习率 α \alpha α 太大,可能震荡甚至发散。
- 如果 α \alpha α 太小,收敛极慢。
(2)牛顿法
- 像“用地图下山”:不仅知道当前坡度(梯度),还知道曲率(Hessian),能预测最低点并直接跳过去。
- 优点:
- 收敛极快(通常 5-10 步就能接近最优解)。
- 缺点:
- 计算 Hessian 矩阵及其逆矩阵成本高( O ( n 3 ) O(n^3) O(n3) 复杂度)。
- 如果 Hessian 矩阵不正定(非凸函数),可能发散。
4. 适用场景
算法 | 适用情况 | 不适用情况 |
---|---|---|
梯度下降 | - 高维数据(如深度学习) - 计算资源有限 | - 需要高精度解 - 函数曲率变化剧烈 |
牛顿法 | - 低维、光滑函数 - 需要快速收敛 | - 高维数据(Hessian 计算困难) - 非凸优化(可能发散) |
5. 改进算法
由于牛顿法计算成本高,后续发展了一些改进方法:
- 拟牛顿法(Quasi-Newton Methods)(如 BFGS、L-BFGS):用近似 Hessian 矩阵,避免直接计算逆矩阵。
- 共轭梯度法(Conjugate Gradient):结合梯度下降和牛顿法的思想,适用于大规模优化。
总结
- 梯度下降:简单、通用,适合大规模问题,但收敛慢。
- 牛顿法:计算复杂,但收敛极快,适合小规模精确优化。
- 实际应用:
- 深度学习(参数多)→ 梯度下降或其变种(如 Adam)。
- 数值优化(参数少)→ 牛顿法或拟牛顿法(如 BFGS)。
用牛顿法求解无约束极值问题
例题一
解: min f ( X ) = x 1 2 + x 2 2 + x 3 2 , X ( 0 ) = ( 2 , − 2 , 1 ) T \min f(\mathbf{X}) = x_1^2 + x_2^2 + x_3^2, \mathbf{X}^{(0)} = (2, -2, 1)^T minf(X)=x12+x22+x32,X(0)=(2,−2,1)T
∇ f ( X ) = ( 2 x 1 , 2 x 2 , 2 x 3 ) T , ∇ f ( X ( 0 ) ) = ( 4 , − 4 , 2 ) T \nabla f(\mathbf{X}) = (2x_1, 2x_2, 2x_3)^T, \nabla f(\mathbf{X}^{(0)}) = (4, -4, 2)^T ∇f(X)=(2x1,2x2,2x3)T,∇f(X(0))=(4,−4,2)T
因为 H ( X ( 0 ) ) = [ 2 0 0 0 2 0 0 0 2 ] H(\mathbf{X}^{(0)}) = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 2 \end{bmatrix} H(X(0))= 200020002
所以 H ( X ( 0 ) ) − 1 = [ 1 2 0 0 0 1 2 0 0 0 1 2 ] H(\mathbf{X}^{(0)})^{-1} = \begin{bmatrix} \frac{1}{2} & 0 & 0 \\ 0 & \frac{1}{2} & 0 \\ 0 & 0 & \frac{1}{2} \end{bmatrix} H(X(0))−1= 210002100021
X = X ( 0 ) − H ( X ( 0 ) ) − 1 ∇ f ( X ( 0 ) ) \mathbf{X} = \mathbf{X}^{(0)} - H(\mathbf{X}^{(0)})^{-1} \nabla f(\mathbf{X}^{(0)}) X=X(0)−H(X(0))−1∇f(X(0))
= [ 2 − 2 1 ] − [ 1 2 0 0 0 1 2 0 0 0 1 2 ] [ 4 − 4 2 ] = [ 0 0 0 ] = \begin{bmatrix} 2 \\ -2 \\ 1 \end{bmatrix} - \begin{bmatrix} \frac{1}{2} & 0 & 0 \\ 0 & \frac{1}{2} & 0 \\ 0 & 0 & \frac{1}{2} \end{bmatrix} \begin{bmatrix} 4 \\ -4 \\ 2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix} = 2−21 − 210002100021 4−42 = 000
目标函数的值为 f ( X ) = 0 2 + 0 2 + 0 2 = 0 f(\mathbf{X}) = 0^2 + 0^2 + 0^2 = 0 f(X)=02+02+02=0。
验证结果:
-
当前点 X 1 = ( 0 , 0 , 0 ) \mathbf{X}_1 = (0, 0, 0) X1=(0,0,0)。
-
计算梯度:
∇ f ( X 1 ) = [ 2 × 0 2 × 0 2 × 0 ] = [ 0 0 0 ] \nabla f(\mathbf{X}_1) = \begin{bmatrix} 2 \times 0 \\ 2 \times 0 \\ 2 \times 0 \end{bmatrix} \\ = \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix} ∇f(X1)= 2×02×02×0 = 000
梯度为零,说明 X 1 \mathbf{X}_1 X1 是极小值点。 -
函数值:
f ( X 1 ) = 0 2 + 0 2 + 0 2 = 0 f(\mathbf{X}_1) = 0^2 + 0^2 + 0^2 = 0 f(X1)=02+02+02=0
这是全局最小值。
例题二