牛顿法求极值

无约束优化算法可以分为线搜索类算法信赖域类算法两类,他们都是对 f ( x ) f(\bold x) f(x)在局部进行近似,前者用得更加普遍。而线搜索类算法根据搜索方向选择的不同可以分为梯度算法、牛顿算法、拟牛顿算法、拟牛顿算法

本文目的是介绍牛顿法。平常我们说牛顿法,一般指的是用牛顿法求方程根,因而先复习牛顿法求根的原理,然后扩展到用牛顿法求极值,再进一步扩展到多元函数牛顿法求极值

1. 一元函数牛顿法求根

复杂方程的根很难直接求得,最开始用牛顿法迭代来求方程的根。方法是给 一个初值 x 1 x_{1} x1 ,在 x 1 x_{1} x1 处用一阶泰勒展式来近似表示函数 f ( x ) f(x) f(x)
f ( x ) = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) + O ( x − x 1 ) f(x)=f\left(x_{1}\right)+f^{\prime}\left(x_{1}\right)\left(x-x_{1}\right) + \mathcal{O}(x-x_1) f(x)=f(x1)+f(x1)(xx1)+O(xx1)
f ( x ) = 0 f(x)=0 f(x)=0 带入上式, 求得与 x x x 轴交点横坐标 x = x 1 − f ( x 1 ) / f ′ ( x 1 ) x=x_{1}-f\left(x_{1}\right) / f^{\prime}\left(x_{1}\right) x=x1f(x1)/f(x1), 这个 x x x 点并不是函数 f ( x ) f(x) f(x) 的根, 但是距离真正的根更近了一点,不断迭代优化,有如下步骤

x n + 1 = x n − f ( x n ) / f ′ ( x n ) x_{n+1}=x_{n}-f\left(x_{n}\right) / f^{\prime}\left(x_{n}\right) xn+1=xnf(xn)/f(xn)
最终求得的 x x x 值变化小于一个阈值就认为这个 x x x 值是函数 f ( x ) f(x) f(x) 的近似根, 这时牛顿法收敛

2. 一元函数牛顿法求极值

牛顿法用于求函数极值。对于 f ( x ) f(x) f(x) 的极值点也就是求 f ′ ( x ) f^{\prime}(x) f(x) 的根, 那么也就是如上面介绍的 求 f ′ ( x ) = 0 f^{\prime}(x)=0 f(x)=0 的解。给定初值 x 1 , x_{1} , x1 x 1 x_{1} x1 处用二阶泰勒展式见公式 ( 4 ) (4) (4)
f ( x ) = f ( x 1 ) + f ′ ( x 1 ) ( x − x 1 ) + 1 2 f ′ ′ ( x 1 ) ( x − x 1 ) 2 f(x)=f\left(x_{1}\right)+f^{\prime}\left(x_{1}\right)\left(x-x_{1}\right)+\frac{1}{2} f^{\prime \prime}\left(x_{1}\right)\left(x-x_{1}\right)^{2} f(x)=f(x1)+f(x1)(xx1)+21f′′(x1)(xx1)2
f ( x ) f(x) f(x) 求导, 令 f ′ ( x ) = 0 f^{\prime}(x)=0 f(x)=0, 得 x = x 1 − f ′ ( x 1 ) / f ′ ′ ( x 1 ) x=x_{1}-f^{\prime}\left(x_{1}\right) / f^{\prime \prime}\left(x_{1}\right) x=x1f(x1)/f′′(x1), 依次迭代得到递推公式
x n + 1 = x n − f ′ ( x n ) / f ′ ′ ( x n ) x_{n+1}=x_{n}-f^{\prime}\left(x_{n}\right) / f^{\prime \prime}\left(x_{n}\right) xn+1=xnf(xn)/f′′(xn)
当xn的值变化小于阈值时认为算法收敛

3. 多元函数牛顿法求极值

对定义在 R n \mathbb{R}^{n} Rn上的二次可微函数 f ( x ) f(\boldsymbol x) f(x),考虑其在 x k x_k xk处二阶泰勒展开,在其定义域上取 x k , d k ∈ R n x_k,d_k \in \mathbb{R}^{n} xk,dkRn,其中 d k d_k dk靠近 x k x_k xk,有如下式子

f ( x k + d k ) = f ( x k ) + ∇ f ( x k ) T d k + 1 2 ( d k ) T ∇ 2 f ( x k ) d k + O ( ∣ ∣ d k ∣ ∣ 2 ) f(x_k+d_k)=f(x_k)+\nabla f(x_k)^\mathrm{T}d_k + \frac{1}{2}(d_k)^\mathrm{T}\nabla^2f(x_k)d_k+\mathcal{O}(||d_k||^2) f(xk+dk)=f(xk)+f(xk)Tdk+21(dk)T2f(xk)dk+O(∣∣dk2)

忽略高阶无穷小,将上式看作 d k d_k dk的函数,对其求导(求梯度?)后令 f ′ ( x k + d k ) = 0 f'(x_k+d_k)=0 f(xk+dk)=0,化简可得牛顿方程

∇ 2 f ( x k ) d k = − ∇ f ( x k ) \nabla^{2} f\left(x_{k}\right) d_{k}=-\nabla f\left(x_{k}\right) 2f(xk)dk=f(xk)

由上式,可由简单的矩阵运算规则得到优化方向 d k = − ∇ 2 f ( x k ) − 1 ∇ f ( x k ) d_k=-\nabla^{2} f\left(x_{k}\right)^{-1} \nabla f\left(x_{k}\right) dk=2f(xk)1f(xk)

因而可以得到迭代规则

x x + 1 = x k − ∇ 2 f ( x k ) − 1 ∇ f ( x k ) x_{x+1}=x_{k}-\nabla^{2} f\left(x_{k}\right)^{-1} \nabla f\left(x_{k}\right) xx+1=xk2f(xk)1f(xk)
当xn的值变化小于阈值时认为算法收敛

4. 对比

4.1 牛顿法对比

如果把矩阵求逆 ∇ 2 f ( x k ) − 1 \nabla^{2} f\left(x_{k}\right)^{-1} 2f(xk)1在形式上写作分母。将上面三者罗列如下,可见形式完全一样(吐槽:这不废话)

x n + 1 = x n − f ( x n ) / f ′ ( x n ) x_{n+1}=x_{n}-f\left(x_{n}\right) / f^{\prime}\left(x_{n}\right) xn+1=xnf(xn)/f(xn)
x n + 1 = x n − f ′ ( x n ) / f ′ ′ ( x n ) x_{n+1}=x_{n}-f^{\prime}\left(x_{n}\right) / f^{\prime \prime}\left(x_{n}\right) xn+1=xnf(xn)/f′′(xn)
x x + 1 = x k − ∇ f ( x k ) / ∇ 2 f ( x k ) x_{x+1}=x_{k}-\nabla f\left(x_{k}\right)/\nabla^{2} f\left(x_{k}\right) xx+1=xkf(xk)/2f(xk)

4.2 梯度下降与对比

梯度下降
x k + 1 = x k − α k ∇ f ( x k ) x_{k+1}=x_{k}-\alpha_{k}\nabla f(x_k) xk+1=xkαkf(xk)

步长不等于1的牛顿法(也就是优化方向乘以alpha)
x x + 1 = x k − α k ∇ 2 f ( x k ) − 1 ∇ f ( x k ) x_{x+1}=x_{k}-\alpha_k \nabla^{2} f\left(x_{k}\right)^{-1} \nabla f\left(x_{k}\right) xx+1=xkαk2f(xk)1f(xk)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值