牛顿法
牛顿法是一种用来求解可微函数的近似解的方法。
首先从几何意义上直观的理解一下牛顿法。
图中
y
=
f
(
x
)
y=f(x)
y=f(x) 是一个可微函数。在点
(
x
n
,
f
(
x
n
)
)
(x_n, f(x_n))
(xn,f(xn))作切线,和
y
y
y轴的交点记为
x
n
+
1
x_{n+1}
xn+1。
Δ
x
=
x
n
+
1
−
x
n
\Delta x = x_{n+1}-x_n
Δx=xn+1−xn。要求方程
f
(
x
)
=
0
f(x)=0
f(x)=0的一个解
x
∗
x^*
x∗。
根据几何性质,
x
n
x_n
xn处的切线斜率
f
′
(
x
n
)
=
f
(
x
n
)
x
n
−
x
n
+
1
f ^\prime(x_n) = \frac{f(x_n)}{x_n-x_{n+1}}
f′(xn)=xn−xn+1f(xn),即
x
n
+
1
=
x
n
−
f
(
x
n
)
f
′
(
x
n
)
x_{n+1} = x_n - \frac{f(x_n)}{f ^\prime(x_n) }
xn+1=xn−f′(xn)f(xn)。
x
n
+
1
x_{n+1}
xn+1比
x
n
x_n
xn更接近
x
∗
x^*
x∗,可以想象不断重复这个过程,对这个过程进行多次的迭代后,最终将会得到方程
f
(
x
)
=
0
f(x)=0
f(x)=0的解
x
∗
x^*
x∗。这就是牛顿法的几何解释。
牛顿法的代数原理是利用泰勒展开求近似解。
对于函数
f
(
x
)
f(x)
f(x),在
x
n
x_n
xn处进行泰勒展开到一阶
f
(
x
)
=
f
(
x
n
+
Δ
x
)
≈
f
(
x
n
)
+
f
′
(
x
n
)
Δ
x
f(x)=f(x_n+\Delta x) \approx f(x_n)+f^\prime(x_n)\Delta x
f(x)=f(xn+Δx)≈f(xn)+f′(xn)Δx
令
f
(
x
)
=
0
≈
f
(
x
n
)
+
f
′
(
x
n
)
Δ
x
f(x) = 0 \approx f(x_n)+f^\prime(x_n)\Delta x
f(x)=0≈f(xn)+f′(xn)Δx,得到近似的
Δ
x
=
−
f
(
x
n
)
f
′
(
x
n
)
\Delta x = -\frac{f(x_n)}{f ^\prime(x_n) }
Δx=−f′(xn)f(xn),即得到了比
x
n
x_n
xn更接近
x
∗
x^*
x∗的一个近似解
x
n
+
1
=
x
n
−
f
(
x
n
)
f
′
(
x
n
)
x_{n+1} = x_n - \frac{f(x_n)}{f ^\prime(x_n) }
xn+1=xn−f′(xn)f(xn)
不断进行迭代,最终结果将收敛到问题
f
(
x
)
=
0
f(x)=0
f(x)=0的解
x
∗
x^*
x∗。
牛顿法求最优化问题
最优化问题即找到一个
x
∗
x^*
x∗使
f
(
x
n
)
f(x_n)
f(xn)具有最大/最小值。根据最优化问题的必要条件,
f
(
x
n
)
f(x_n)
f(xn)为有极大值/极小值时,
f
′
(
x
n
)
=
0
f^\prime(x_n)=0
f′(xn)=0。根据这一性质,可以令
l
(
x
)
=
f
′
(
x
)
l(x) = f^\prime(x)
l(x)=f′(x),带入之前的牛顿法公式,可迭代的计算
x
n
+
1
=
x
n
−
l
(
x
n
)
l
′
(
x
n
)
x_{n+1} = x_n - \frac{l(x_n)}{l ^\prime(x_n) }
xn+1=xn−l′(xn)l(xn)。可以得到牛顿法解优化问题的迭代公式:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
x_{n+1} = x_n - \frac{f^\prime(x_n)}{f ^{\prime\prime}(x_n) }
xn+1=xn−f′′(xn)f′(xn)
现在,我们同样用泰勒展开的方法来推导这个公式。
对于函数
f
(
x
)
f(x)
f(x),在
x
n
x_n
xn处进行二阶泰勒展开
f
(
x
)
=
f
(
x
n
+
Δ
x
)
≈
f
(
x
n
)
+
f
′
(
x
n
)
Δ
x
+
f
′
′
(
x
n
)
2
Δ
x
2
f(x)=f(x_n+\Delta x) \approx f(x_n)+f^\prime(x_n)\Delta x+\frac{f^{\prime\prime}(x_n)}{2}\Delta x^2
f(x)=f(xn+Δx)≈f(xn)+f′(xn)Δx+2f′′(xn)Δx2
根据极值的必要条件,对
Δ
x
\Delta x
Δx求导,令
f
′
(
x
n
)
=
0
f^\prime(x_n) = 0
f′(xn)=0,
0
=
f
′
(
x
)
≈
d
d
Δ
x
(
f
(
x
n
)
+
f
′
(
x
n
)
Δ
x
+
f
′
′
(
x
n
)
2
Δ
x
2
)
=
f
′
(
x
n
)
+
f
′
′
(
x
n
)
Δ
x
0=f^\prime(x)\approx \frac {d}{d\Delta x} (f(x_n)+f^\prime(x_n)\Delta x+\frac{f^{\prime\prime}(x_n)}{2}\Delta x^2)=f^\prime(x_n)+f^{\prime\prime}(x_n)\Delta x
0=f′(x)≈dΔxd(f(xn)+f′(xn)Δx+2f′′(xn)Δx2)=f′(xn)+f′′(xn)Δx
得到
Δ
x
=
−
f
′
(
x
n
)
f
′
′
(
x
n
)
\Delta x = -\frac{f^\prime(x_n)}{f ^{\prime\prime}(x_n) }
Δx=−f′′(xn)f′(xn)
即得到了迭代式
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
x_{n+1} = x_n - \frac{f^\prime(x_n)}{f ^{\prime\prime}(x_n) }
xn+1=xn−f′′(xn)f′(xn)
在高维情况下,即当
f
(
x
⃗
)
f(\vec{x})
f(x)为
R
n
→
R
R^n\to R
Rn→R的函数时,记其在
x
=
x
n
x=x_n
x=xn处一阶梯度
∇
f
(
x
n
⃗
)
=
g
n
\nabla f(\vec{x_n}) = g_n
∇f(xn)=gn,二阶梯度
∇
2
f
(
x
n
)
=
H
n
\nabla^2f(x_n)=H_n
∇2f(xn)=Hn,
g
n
g_n
gn为梯度向量,
H
n
H_n
Hn为黑塞矩阵(之后我将介绍黑塞矩阵)。则此时取得最值得条件变为
∇
f
(
x
n
)
+
∇
2
f
(
x
n
)
Δ
x
\nabla f(x_n)+\nabla^2 f(x_n)\Delta x
∇f(xn)+∇2f(xn)Δx=0,即
g
n
+
H
n
Δ
x
=
0
g_n+H_n\Delta x=0
gn+HnΔx=0。当黑塞矩阵
H
n
H_n
Hn非奇异时,可以得到
Δ
x
=
−
H
n
−
1
⋅
g
n
\Delta x = -H_n^{-1} \cdot g_n
Δx=−Hn−1⋅gn
即递推式为
x
n
+
1
=
x
n
−
H
n
−
1
⋅
g
n
x_{n+1} = x_n- H_n^{-1} \cdot g_n
xn+1=xn−Hn−1⋅gn
牛顿法的优缺点
下图中绿色的线路为梯度下降法的路线,红色为牛顿法的下降路线。
牛顿法具有二次收敛性,因此比普通的梯度下降收敛的更快。
但是虽然牛顿法的收敛速度很快,但是有比较多的限制,比如函数必须具有二阶偏导,黑塞矩阵必须正定。牛顿法需要计算黑塞矩阵及其逆,需要进行大量的运算,计算相当复杂。克服这些问题的方法就是拟牛顿法。关于拟牛顿法我们以后再叙。
参考资料:
https://en.wikipedia.org/wiki/Newton's_method_in_optimization
https://www.cnblogs.com/ljy2013/p/5129294.html