公式推导
牛顿法使用泰勒级数展开来逐步逼近目标函数的根(方程求解)或极值点(优化问题)。在机器学习中,它就是寻找损失函数导数为0的地方(但是有时候这不是最低点)。
这个方法的核心思想是,通过利用目标函数在当前估计点附近的局部线性近似来快速找到目标函数的根或极值点。以下是牛顿法的工作原理:
假设我们想要找到一个函数f(x)的根,也就是解方程 f ( x ) = 0 f(x) = 0 f(x)=0,或者找到函数f(x)的极小值点。
在牛顿法的每一次迭代中,我们选择一个初始估计值 x 0 x_0 x0。
针对当前的估计值 x k x_k xk,我们计算目标函数 f ( x k ) f(x_k) f(xk)的一阶导数(梯度) f ′ ( x k ) f'(x_k) f′(xk) 和二阶导数(Hessian矩阵) f ′ ′ ( x k ) f''(x_k) f′′(xk)。
然后,我们使用泰勒级数展开,以局部线性近似来表示函数f(x)在x_k附近的行为。泰勒级数展开通常如下所示:
f ( x ) ≈ f ( x k ) + f ′ ( x k ) ∗ ( x − x k ) + 0.5 ∗ f ′ ′ ( x k ) ∗ ( x − x k ) 2 f(x) ≈ f(x_k) + f'(x_k) * (x - x_k) + 0.5 * f''(x_k) * (x - x_k)^2 f(x)≈f(xk)+f′(xk)∗(x−xk)+0.5∗f′′(xk)∗(x−xk)2
接下来,我们将泰勒级数展开的右侧等于零,以找到下一个估计值 x k + 1 x_{k+1} xk+1,即 f ( x k + 1 ) = 0 f(x_{k+1}) = 0 f(xk+1)=0(用于方程求解)或 f ′ ( x k + 1 ) = 0 f'(x_{k+1}) = 0 f′(xk+1)=0(用于优化问题)。这可以通过解以下方程来实现:
f ( x k ) + f ′ ( x k ) ∗ ( x k + 1 − x k ) + 0.5 ∗ f ′ ′ ( x k ) ∗ ( x k + 1 − x k ) 2 = 0 f(x_k) + f'(x_k) * (x_{k+1} - x_k) + 0.5 * f''(x_k) * (x_{k+1} - x_k)^2 = 0 f(xk)+f′(xk)∗(xk+1−xk)+0.5∗f′′(xk)∗(xk+1−xk)2=0
最后,我们将 x k + 1 x_{k+1} xk+1作为下一次迭代的估计值,并重复步骤3至步骤5,直到满足收敛条件(例如,目标函数值足够接近零或梯度足够接近零)。
具体步骤
牛顿法的基本思想是使用一个初始估计值来不断改进,以接近问题的解。它的迭代更新公式如下:
x k + 1 = x k − [ f ′ ( x k ) / f ′ ′ ( x k ) ] x_{k+1} = x_k - [f'(x_k) / f''(x_k)] xk+1=xk−[f′(xk)/f′′(xk)]
其中:
-
x k x_k xk 是第k次迭代的估计值。
-
f ( x k ) f(x_k) f(xk) 是目标函数。
-
f ′ ( x k ) f'(x_k) f′(xk) 是目标函数在x_k处的一阶导数(梯度)。
-
f ′ ′ ( x k ) f''(x_k) f′′(xk) 是目标函数在x_k处的二阶导数(Hessian矩阵)。
牛顿法的步骤如下:
- 初始化一个估计值 x 0 x_0 x0。
- 通过使用上述迭代公式计算下一个估计值 x k + 1 x_{k+1} xk+1。
- 重复步骤2,直到收敛到目标的解或达到预定的停止条件。
牛顿法的优势在于它可以在较少的迭代次数内快速收敛到解决方案,尤其是当初始估计值接近真实解时。
缺点:牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定的下降,严重时甚至会失败。还有就是牛顿法要求函数一定是二阶可导的。而且计算Hessian矩阵的逆复杂度很大。
拟牛顿法: 不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法称为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆使得表达式满足拟牛顿条件。主要有DFP法(逼近Hession的逆)、BFGS(直接逼近Hession矩阵)、 L-BFGS(可以减少BFGS所需的存储空间)。