1.牛顿法
牛顿法可以用来解方程或者解决最优化问题。二者的本质是一样的。
假设我们要求解如下最优化问题:
min
x
∈
R
n
f
(
x
)
\min_{x\in R^n } f(x)
x∈Rnminf(x)
注意
x
∈
R
n
x\in R^n
x∈Rn,直接讨论多维的情形。
为了便于理解,假设
f
(
x
)
f(x)
f(x)是二元函数,则其在
x
(
0
)
=
(
x
1
(
0
)
,
x
2
(
0
)
)
T
x^{(0)} = (x_1^{(0)},x_2^{(0)})^T
x(0)=(x1(0),x2(0))T处的泰勒展开为
其中
Δ
x
1
=
x
1
−
x
1
(
0
)
\Delta x_1=x_1-x_1^{(0)}
Δx1=x1−x1(0),
Δ
x
2
=
x
2
−
x
2
(
0
)
\Delta x_2=x_2-x_2^{(0)}
Δx2=x2−x2(0).
如果写成矩阵形式:
同理,对于多维的情况,如果我们令
H
(
x
)
=
[
∂
2
f
∂
x
i
∂
x
j
]
n
×
n
H(x)=[\frac{\partial^2f}{\partial x_i \partial x_j}]_{n\times n}
H(x)=[∂xi∂xj∂2f]n×n
则假设
f
(
x
)
f(x)
f(x)具有二阶连续偏导数,其在
x
(
k
)
x^{(k)}
x(k)处的二阶泰勒展开可表示为
f
(
x
)
=
f
(
x
(
k
)
)
+
g
k
T
(
x
−
x
(
k
)
)
+
1
2
(
x
−
x
(
k
)
)
T
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
f(x)=f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})
f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(k))
其中
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))称作Hesse矩阵,
g
k
T
=
(
∂
f
∂
x
1
,
…
,
∂
f
∂
x
n
)
∣
x
(
k
)
g_k^T=(\frac{\partial f}{\partial x_1},\dots , \frac{\partial f}{\partial x_n})|_{x^{(k)}}
gkT=(∂x1∂f,…,∂xn∂f)∣x(k),即
f
(
x
)
f(x)
f(x)的梯度向量在
x
(
k
)
x^{(k)}
x(k)处的值。
当
x
x
x是极小点时,必有
∇
f
(
x
)
=
0
\nabla f(x)=0
∇f(x)=0
因此最优化问题仍然是解方程问题,这就是为何开头说最优化和解方程本质上是一样的。
假设第k次迭代过程从
x
(
k
)
x^{(k)}
x(k)开始,求目标函数的极小点。作为第
k
+
1
k+1
k+1次迭代值
x
(
k
+
1
)
x^{(k+1)}
x(k+1),假设其满足:
∇
f
(
x
(
k
+
1
)
)
=
0
\nabla f(x^{(k+1)})=0
∇f(x(k+1))=0
根据
f
(
x
)
f(x)
f(x)的泰勒展开式,得其梯度(可以看成是对向量
x
x
x求导):
∇
f
(
x
)
=
g
k
+
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
\nabla f(x)=g_k +H(x^{(k)}) (x-x^{(k)})
∇f(x)=gk+H(x(k))(x−x(k))
于是有
g
k
+
H
(
x
(
k
)
)
(
x
(
k
+
1
)
−
x
(
k
)
)
=
0
g_k +H(x^{(k)}) (x^{(k+1)}-x^{(k)})=0
gk+H(x(k))(x(k+1)−x(k))=0
x
(
k
+
1
)
=
x
(
k
)
−
H
−
1
(
x
(
k
)
)
g
k
x^{(k+1)}=x^{(k)}-H^{-1}(x^{(k)})g_k
x(k+1)=x(k)−H−1(x(k))gk
以上式作为迭代公式的方法就是牛顿法。
但是有的时候求Hesse矩阵很复杂,尤其是高维的情形,于是又引出了拟牛顿法。
2.拟牛顿法
前面说计算Hasse矩阵的逆矩阵非常复杂,所以考虑用一个n阶矩阵
G
(
x
(
k
)
)
G(x^{(k)})
G(x(k))来代替
H
−
1
(
x
(
k
)
)
H^{-1}(x^{(k)})
H−1(x(k)).
前面推导出下式:
∇
f
(
x
)
=
g
k
+
H
(
x
(
k
)
)
(
x
−
x
(
k
)
)
\nabla f(x)=g_k +H(x^{(k)}) (x-x^{(k)})
∇f(x)=gk+H(x(k))(x−x(k))
令其中的
x
=
x
(
k
+
1
)
x=x^{(k+1)}
x=x(k+1),得
∇
f
(
x
(
k
+
1
)
)
=
g
k
+
1
=
g
k
+
H
(
x
(
k
)
)
(
x
(
k
+
1
)
−
x
(
k
)
)
\nabla f(x^{(k+1)})=g_{k+1}=g_k +H(x^{(k)}) (x^{(k+1)}-x^{(k)})
∇f(x(k+1))=gk+1=gk+H(x(k))(x(k+1)−x(k))
即
g
k
+
1
−
g
k
=
H
(
x
(
k
)
)
(
x
(
k
+
1
)
−
x
(
k
)
)
g_{k+1}-g_k =H(x^{(k)}) (x^{(k+1)}-x^{(k)})
gk+1−gk=H(x(k))(x(k+1)−x(k))
令
y
k
=
g
k
+
1
−
g
k
,
δ
k
=
x
(
k
+
1
)
−
x
(
k
)
y_k=g_{k+1}-g_k,\delta _k=x^{(k+1)}-x^{(k)}
yk=gk+1−gk,δk=x(k+1)−x(k),则
y
k
=
H
k
δ
k
y_k=H_k\delta _k
yk=Hkδk
或
δ
k
=
H
k
−
1
y
k
\delta _k=H_k^{-1}y_k
δk=Hk−1yk
因此我们要找近似的
G
k
G_k
Gk时,也必须满足上式的条件,即:
δ
k
=
G
k
−
1
y
k
\delta _k=G_k^{-1}y_k
δk=Gk−1yk
因此在拟牛顿法中每次迭代中可以更新矩阵:
G
k
+
1
=
G
k
+
Δ
G
k
G_{k+1}=G_k+\Delta G_k
Gk+1=Gk+ΔGk
至于如何具体地实现更新,又有了许多算法,例如DFP、BFGS、Broyden类算法等,有时间我再学习更新。