本文来自:https://blog.youkuaiyun.com/qq_36330643/article/details/78003952
在第2部分求最优化的地方做了更改。
牛顿法有两个应用方向:
1.求方程的根
2.最优化
1.求方程的根
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。
原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f’(x0)
求解方程f(x)=0,即f(x0)+(x-x0)f’(x0)=0,求解x = x1=x0-f(x0)/f’(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f’(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f’(x(n)),通过迭代,这个式子必然在f(x)=0的时候收敛。整个过程如下图:
2.牛顿法用于最优化
在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f’=0的问题,这样求可以把优化问题看成方程求解问题(f’=0)。剩下的问题就和第一部分提到的牛顿法求解很相似了。
为了求解
f
′
=
0
f'=0
f′=0的根,把
f
(
x
)
f(x)
f(x)泰勒展开,展开至2阶形式:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
1
2
f
′
′
(
x
0
)
(
x
−
x
0
)
2
f(x) = f(x_0)+f'(x_0)(x-x_0)+\frac{1}{2}f''(x_0)(x-x_0)^2
f(x)=f(x0)+f′(x0)(x−x0)+21f′′(x0)(x−x0)2
对上式求导,并令
f
′
(
x
)
=
0
f'(x)=0
f′(x)=0,得到:
f
′
(
x
0
)
+
f
′
′
(
x
0
)
(
x
−
x
0
)
=
0
f'(x_0)+f''(x_0)(x-x_0)=0
f′(x0)+f′′(x0)(x−x0)=0
即:
x
=
x
0
−
f
′
(
x
0
)
f
′
′
(
x
0
)
x=x_0-\frac{f'(x_0)}{f''(x_0)}
x=x0−f′′(x0)f′(x0)
得到迭代公式:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
x_{n+1}=x_n-\frac{f'(x_n)}{f''(x_n)}
xn+1=xn−f′′(xn)f′(xn)
一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。
在上面讨论的是2维情况,高维情况的牛顿迭代公式是:
其中H是hessian矩阵,定义为:
高维情况依然可以用牛顿迭代求解,但是问题是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了解决这个问题的办法就是Quasi-Newton methond,不再直接计算hessian矩阵,而是每一步的时候使用梯度向量更新hessian矩阵的近似。