【机器学习杂记】牛顿法与拟牛顿法

1.牛顿法

牛顿法可以用来解方程或者解决最优化问题。二者的本质是一样的。
假设我们要求解如下最优化问题:
min ⁡ x ∈ R n f ( x ) \min_{x\in R^n } f(x) xRnminf(x)
注意 x ∈ R n x\in R^n xRn,直接讨论多维的情形。
为了便于理解,假设 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=x1x1(0), Δ x 2 = x 2 − x 2 ( 0 ) \Delta x_2=x_2-x_2^{(0)} Δx2=x2x2(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)=[xixj2f]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(xx(k))+21(xx(k))TH(x(k))(xx(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=(x1f,,xnf)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))(xx(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)H1(x(k))gk
以上式作为迭代公式的方法就是牛顿法。
但是有的时候求Hesse矩阵很复杂,尤其是高维的情形,于是又引出了拟牛顿法。

2.拟牛顿法

前面说计算Hasse矩阵的逆矩阵非常复杂,所以考虑用一个n阶矩阵 G ( x ( k ) ) G(x^{(k)}) G(x(k))来代替 H − 1 ( x ( k ) ) H^{-1}(x^{(k)}) H1(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))(xx(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+1gk=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+1gk,δ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=Hk1yk
因此我们要找近似的 G k G_k Gk时,也必须满足上式的条件,即:
δ k = G k − 1 y k \delta _k=G_k^{-1}y_k δk=Gk1yk
因此在拟牛顿法中每次迭代中可以更新矩阵:
G k + 1 = G k + Δ G k G_{k+1}=G_k+\Delta G_k Gk+1=Gk+ΔGk
至于如何具体地实现更新,又有了许多算法,例如DFP、BFGS、Broyden类算法等,有时间我再学习更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值