优化算法之牛顿法

牛顿法

和梯度下降法一样,都是解无约束优化问题,也是迭代算法,有收敛速度快的优点。每一步迭代都要求解目标函数的海塞矩阵,计算比较复杂,拟牛顿法通过正定矩阵来近似海塞矩阵的逆矩阵或海塞矩阵,简化了计算。

二阶泰勒展开

假设 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(xx(k))+21(xx(k))TH(x(k))(xx(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)=[xixj2f]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(xx(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)Hk1gk或者
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} Hk1gk=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 ∥ &lt; ε \|g_k\|&lt;\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=Hk1gk,要求 H k − 1 H_{k}^{-1} Hk1,计算比较复杂,所以有了拟牛顿法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值