机器学习-牛顿法和拟牛顿法

介绍牛顿法和拟牛顿法

数值分析

牛顿法

牛顿法是解方程 f ( x ) = 0 f(x)=0 的一种方法,取根附近的一点 x 0 x_0 做为初值,反复迭代得到最终近似解。迭代方法如下:
首先将 f ( x ) f(x) 泰勒展开
f ( x ) f ( x 0 ) + f ( x 0 ) ( x x 0 ) f(x)\approx f(x_0)+f^{'}(x_0)(x-x_0)
于是方程可以近似表示为
x x 0 f ( x 0 ) f ( x 0 ) x \approx x_0-\frac{f(x_0)}{f^{'}(x_0)}
将此f(x)比f(x_0)更接近0(严格上需要数学证明收敛性,这里略)
得到递推公式:
x k + 1 = x k f ( x k ) f ( x k ) x_{k+1} =x_k-\frac{f(x_k)}{f^{'}(x_k)}
下面用一个例子加深理解:
解方程: x e x 1 = 0 xe^x-1=0
迭代公式为:
x k + 1 = x k x k e x k 1 x k e x k + e x k x_{k+1} =x_k-\frac{x_ke^{x_k}-1}{x_ke^{x_k}+e^{x_k}}
x 0 = 0.5 x_0=0.5代入计算得到每次结果: 在这里插入图片描述同样对于多变量 f ( x 1 , x 2 , . . . . x n ) f(x_1,x_2,....x_n) 也有自己的泰勒公式,具体推导过程略复杂,笔者在这里不给出,有兴趣的可以参考从一阶泰勒公式到高维泰勒公式。高维泰勒展开公式为:
f ( X ) f ( X 0 ) + ( X X 0 ) f ( X 0 ) + 1 2 ( X X 0 ) H ( f ( x 0 ) ) ( X X 0 ) T f(X)\approx f(X_0)+(X-X_0)\nabla f(X_0)+\frac{1}{2}(X-X_0)H(f(x_0))(X-X_0)^T
其中 f ( X 0 ) \nabla f(X_0) f f X 0 X_0 处梯度=( f ( x 1 , x 2 , . . . . x n ) x 1 , f ( x 1 , x 2 , . . . . x n ) x 2 , . . . . . . f ( x 1 , x 2 , . . . . x n ) x n \frac{\partial f(x_1,x_2,....x_n)}{x_1},\frac{\partial f(x_1,x_2,....x_n)}{x_2},......\frac{\partial f(x_1,x_2,....x_n)}{x_n}
H(X)是著名的黑塞矩阵
在这里插入图片描述
只是高维牛顿法目标求 f ( X ) f(X) 的极值点,而不是找到 f ( X ) = 0 f(X)=0 的点。 两边同时对 X X 求导(作用一个 \nabla )。
f ( X ) = f ( X 0 ) + ( X X 0 ) H ( f ( X 0 ) ) \nabla f(X)=\nabla f(X_0)+(X-X_0)H(f(X_0))
令左边等于0,得到牛顿法高阶表达式:
X k + 1 = X k H 1 ( f ( X 0 ) ) f ( X 0 ) X_{k+1}=X_k-H^{-1}(f(X_0))*\nabla f(X_0)

拟牛顿法

高阶牛顿法求最极值点时,每一次迭带都要求一次黑塞矩阵计算量超级大,还不一定可逆,可逆了还要求逆,这都是计算机不想做的事情,于是聪明的数学家们就想着用一个矩阵(不用求导不用求逆)来代替黑塞矩阵。
首先要确定什么样的的矩阵可以用来代替黑塞矩阵,也称为拟牛顿条件

(1) 拟牛顿条件

f ( X k + 1 ) = f ( X k ) + ( X k + 1 X k ) H k X k \nabla f(X_{k+1})=\nabla f(X_k)+(X_{k+1}-X_k)H_kX_k
f ( X k + 1 ) f ( X k ) = y k , X k + 1 X k = δ k \nabla f(X_{k+1})-\nabla f(X_{k})=y_k,X_{k+1}-X_k=\delta_k
在这里插入图片描述

拟牛顿算法一:DFP算法

在这里插入图片描述

拟牛顿算法二:BFGS算法

在这里插入图片描述

拟牛顿算法三:L-BFGS算法

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39529891/article/details/104459244