牛顿法
和梯度下降法一样,都是解无约束优化问题,也是迭代算法,有收敛速度快的优点。每一步迭代都要求解目标函数的海塞矩阵,计算比较复杂,拟牛顿法通过正定矩阵来近似海塞矩阵的逆矩阵或海塞矩阵,简化了计算。
二阶泰勒展开
假设
f
(
x
)
f(x)
f(x)具有二阶连续偏导数,若第k次迭代值为
x
(
k
)
x^{(k)}
x(k),则可将
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)点进行二阶泰勒展开。
(1)
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)})^{T}H(x^{(k)})(x-x^{(k)})\tag{1}
f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(k))(1)这里,
g
k
=
g
(
x
(
k
)
)
=
∇
f
(
x
(
k
)
)
g_{k}=g(x^{(k)})=\nabla f(x^{(k)})
gk=g(x(k))=∇f(x(k)),即
f
(
x
)
f(x)
f(x)在
x
(
k
)
x^{(k)}
x(k)的梯度,
H
(
x
(
k
)
)
H(x^{(k)})
H(x(k))是
f
(
x
)
f(x)
f(x)的海塞矩阵(Hesse matrix)
H
(
x
)
=
[
∂
2
f
∂
x
i
∂
x
j
]
n
×
n
H(x)=[\frac{\partial ^{2}f}{\partial x_{i}\partial x_{j}}]_{n\times n}
H(x)=[∂xi∂xj∂2f]n×n在点
x
(
k
)
x^{(k)}
x(k)点的值。
牛顿法的迭代公式
函数
f
(
x
)
f(x)
f(x)有极值的必要条件是在极值点处的一阶导数为0,即梯度向量为0。
特别当
H
(
x
)
H(x)
H(x)是正定矩阵时,
f
(
x
)
f(x)
f(x)为严凸函数,函数
f
(
x
)
f(x)
f(x)的极值为全局极小值。
假设第k+1次迭代值
x
(
k
+
1
)
x^{(k+1)}
x(k+1)为目标函数的极小值点,则
(2)
∇
f
(
x
(
k
+
1
)
)
=
0
\nabla f(x^{(k+1)})=0\tag{2}
∇f(x(k+1))=0(2)对公式(1)进行对x求一次梯度得到
(3)
∇
f
(
x
)
=
g
k
+
H
k
(
x
−
x
(
k
)
)
\nabla f(x)=g_{k}+H_{k}(x-x^{(k )})\tag{3}
∇f(x)=gk+Hk(x−x(k))(3)其中
H
k
=
H
(
x
(
k
)
)
H_{k}=H(x^{(k)})
Hk=H(x(k)),这样(2)式变为
g
k
+
H
k
(
x
(
k
+
1
)
−
x
(
k
)
)
=
0
g_{k}+H_{k}(x^{(k+1)}-x^{(k )})=0
gk+Hk(x(k+1)−x(k))=0因此,
x
(
k
+
1
)
=
x
(
k
)
−
H
k
−
1
g
k
x^{(k+1)}=x^{(k )}-H_{k}^{-1}g_{k}
x(k+1)=x(k)−Hk−1gk或者
x
(
k
+
1
)
=
x
(
k
)
+
p
k
x^{(k+1)}=x^{(k )}+p_{k}
x(k+1)=x(k)+pk其中,
−
H
k
−
1
g
k
=
p
k
-H_{k}^{-1}g_{k}=p_{k}
−Hk−1gk=pk,即
H
k
p
k
=
−
g
k
H_{k}p_{k}=-g_{k}
Hkpk=−gk
这就是牛顿法的迭代公式。
算法步骤
input:目标函数
f
(
x
)
f(x)
f(x),梯度函数
g
(
x
)
=
∇
f
(
x
)
g(x)=\nabla f(x)
g(x)=∇f(x),海塞矩阵
H
(
x
)
H(x)
H(x),精度要求
ε
\varepsilon
ε;
output:
f
(
x
)
f(x)
f(x)的极小点
x
∗
x^*
x∗
(1)取初始点
x
(
0
)
x^{(0)}
x(0),置k=0
(2)计算
g
k
=
g
(
x
(
k
)
)
g_{k}=g(x^{(k)})
gk=g(x(k))
(3)若
∥
g
k
∥
<
ε
\|g_k\|<\varepsilon
∥gk∥<ε,则停止计算,得近似解
x
∗
=
x
(
k
)
x^*=x^{(k)}
x∗=x(k)
(4)计算
H
k
=
H
(
x
(
k
)
)
H_{k}=H(x^{(k)})
Hk=H(x(k)),并求
p
k
p_{k}
pk
H
k
p
k
=
−
g
k
H_{k}p_{k}=-g_{k}
Hkpk=−gk(5)置
x
(
k
+
1
)
=
x
(
k
)
+
p
k
x^{(k+1)}=x^{(k )}+p_{k}
x(k+1)=x(k)+pk
(6)置
k
=
k
+
1
k=k+1
k=k+1,转(2)
注意
在步骤(4)中要求求 p k p_{k} pk, p k = − H k − 1 g k p_{k}=-H_{k}^{-1}g_{k} pk=−Hk−1gk,要求 H k − 1 H_{k}^{-1} Hk−1,计算比较复杂,所以有了拟牛顿法。