非线性规划——无约束最优化方法(三)

无约束最优化问题的解析法主要有:最速下降法、牛顿法、共轭梯度法(DFP法)和变尺度法(变度量法)。这些方法各有千秋,后面的方法都针对前面方法的某个问题做了改进。这些方法的核心就是研究如何确定每一步迭代的方向和步长。

一、无约束最优化问题

最优化问题的一般形式为:

minf(x) s.t.xX

其中 x 为决策变量,f(x) 是目标函数,X 为约束集或可行域。特别地,如果 X=Rn ,则最 优化问题成为无约束最优化问题。
最优化方法通常采用迭代法求它的最优解,其基本思想是:给定一个初始点 x0 ,按照某一迭代规则产品一个点列 {xn} ,使得当 {xn} 是有穷点列时,其最后一个点是最优化模型问题的最优解。迭代规则由迭代公式决定,迭代公式的基本表示形式如下:

xk+1=xk+αkdk

式中, αk 为步长因子, dk 为搜索方向。在最优化算法中,搜索方向 dkfxk 点处的下降方 向, 即:

f(xk+αkdk)<f(xk)

最优化方法的基本结构如下:

  • 给定初始点 x0
  • 确定搜索方向 dk ,即按照一定规则,构造 fxk 点处的下降方向作为搜索方向;
  • 确定步长因子 αk ,使目标函数有某种意义的下降。

二、最速下降法

最速下降法(Gradient Descent Method)的基本思想是:因为连续函数沿着负梯度方向的下降速度是最快的(这一结论由梯度和方向导数的定义可以推出),所以每次迭代我们都从当前点出发,沿着负梯度方向前进一个最优步长,可以期望能较快逼近函数的极值。

最速下降法仅有三个步骤:
设置初始值。设置迭代起点x0Rn,允许误差ϵ>0和迭代变量初值k0
检查终止条件。如果||f(xk)||<ϵ,停止迭代输出xk作为近似最优解;否则转步骤3。
迭代,通过一维搜索求下一个迭代点。取搜索方向为负梯度方向dk=f(x),求λk使得f(xk+λkdk)=minλ0f(xk+λdk)再令xk+1=xk+λdk转步骤2。

步骤中隐含了条件:函数f(x)必须可微,也就是说函数f(x)的梯度必须存在,其中最关键的步骤是求解问题
(1)minλ0f(xk+λdk)
给出它的最优性必要条件
(2)df(xk+λdk)dλ=f(xk+λdk)Tdk=0
f(x)的形式确定,我们可以通过求解这个一元方程来获得迭代步长λ。当此方程形式复杂,解析解不存在,我们就需要使用“一维搜索”来求解λ了。一维搜索是一些数值方法,有0.618法、Fibonacci法、抛物线法等等,这里不详细解释了。

例1:就简单的二次规划为例给出最速下降法求解步骤,即

f(x)=12xTQx+cTx

其中 Q 是对称正定阵。对于目标函数 f(x) ,记当前的迭代点为 xkf(x)xk 处的一阶导数为 fk=Qx+c 。 于是在 xk 处的前进方向即为 fk 。 要确定前进的步长,即要是的下面这个以 α 为决策变量的优化命题取得最小值:

f(xαfk)=12(xαfk)TQ(xαfk)+cT(xαfk)

令上式对 α 的导数为 0 即可求得对应步长为:

αk=fkTfkfkTQfk

因此,每一步更新迭代点的过程为:

xk+1=xkfkTfkfkTQfkfk

因此,最速下降法的迭代轨迹可以用下图描述。

例2: 用最速下降法计算函数 f(x1,x2)=(x12)2+(x22)2 的极小点和极小值, 设初始点为 x0=(0,0)T, 迭代误差为 ε=0.05
解: 因为函数 f(x1,x2) 的梯度等于 f(x1,x2)=(2(x12)2(x21)), 那么在点 x0=(00) 处的梯 度值等于 f(x0)=(44)
d0=f(0,0)=(4,4)T, 则有: x0+αd0=(4α4α),f(x0+αd0)=4(2α1)2 。我们需 要求解 α0, 使其满足 f(x0+α0d0)=minα0{4(2α1)2}
ddα4(2α1)2=8(2α1)=0, 求得 α0=12, 所以下一个迭代点为:

x1=x0+α0d0=(00)+12(44)=(22) 。 

函数 f(x1,x2) 在点 x1 处的梯度为: f(x1)=(00), 由于 f(x1)=00.05, 那么 x1 是局部极小点, 迭代结束。因为 f(x1,x2) 是凸函数, 那么 x1 也是全局极小点, f(x1)=0 是全局极小值。

例3:用最速下降法求解无约束非线性问题minf(x)=x12+2x222x1x22x2的最小值点,其中x=(x1,x2)T,x(0)=(0,0)T
在这里为了直观的理解问题,我们对该问题进行可视化,x1,x2分别取[−10,10],步长为0.2。绘制图像如下:

解:在这里先用精确搜索求出最小值点,其后再用一维搜索进行验证。
(1) f(x)=(2x_12x_2,4x_22x_12)T
(2)f(x(0))=(0,2)T
(3)d(0)=f(x(0))=(0,2)T
(4)运用精确搜索求步长λ
λ=argminf(x(0)+λd(0)),可得λ=1/4
(5)x(1)=x(0)+λd(0)=(0,1)T
  同理转回(2)可以一直迭代回去一直到满足条件为止,得到最优解为x=(1,1)Ty=1

在实际使用中,为了简便,也可以使用一个预定义的常数而不用一维搜索来确定步长λ。这时步长的选择往往根据经验或者通过试算来确定。步长过小则收敛慢,步长过大可能震荡而不收敛。最速下降法是最基本的迭代优化方法。它最简单,最基础,通常是收敛的。可以证明,最速下降法是一阶收敛的,往往需要多次迭代才能接近问题最优解。这是它的不足。

三、牛顿法

牛顿法是从函数的二阶泰勒展开式推导而来,其思想就是利用目标函数二阶近似的解去逼近目标函数的解。将函数f在迭代点xk附近作二阶泰勒展开,有

f(x)ϕ(x)=f(xk)+f(xk)T(xxk)+12(xxk)T2f(xk)(xxk)

为了计算ϕ(x)的极小值,令它的梯度为零,即

ϕ(x)=0

f(xk)+2f(xk)(xxk)=0

从而推出

x=xk[2f(xk)]1f(xk)

我们将这里的x作为第k+1次迭代的估值,就有了迭代公式

xk+1=xk[2(fxk)]1f(xk)

牛顿法(Newton Method)利用了函数的二阶信息,即海塞矩阵,来加速迭代收敛。具有二阶收敛速度是它的显著优势。

牛顿法的步骤为:
设置初始值。给定迭代初值x0Rn,ϵ>0,令k0
检查终止条件。如果||f(x)||<ϵ,迭代终止,xk为近似最优解;否则,转步骤3。
迭代计算。取迭代方向

dk=[2f(xk)]1f(xk)

xk+1=xk+dkkk+1

转步骤2。

牛顿法要求初始点在最优点附近(泰勒展开的前提就是在邻域内),否则可能不收敛。为了使得牛顿法能够全局收敛,提出了阻尼牛顿法(Damped Newton Method)。阻尼牛顿法的改进在于每次的搜索步长不固定为1,而是通过一维搜索来确定步长。

阻尼牛顿法步骤如下:
设置初始值。给定迭代初值x0Rn,ϵ>0,令k0
检查终止条件。如果||f(x)||<ϵ,迭代终止,xk为近似最优解;否则,转步骤3。
取迭代方向

dk=[2f(xk)]1f(xk)

进行一维搜索确定步长λk使得f(xk+λkdk)=minλ0f(xk+λdk)xk+1=xk+λdkkk+1转步骤2。

可以证明,当f(x)具有二阶连续偏导数且2f(x)正定,阻尼牛顿法是全局收敛的。

例4:用 Newton 法计算函数 f(x1,x2)=x12+x233x13x2+5 的极小点, 设初始点为 x0=(01,0.2)T, 允许迭代误差 ε=0.5
解: 因为目标函数的梯度和 Hessian 矩阵分别为:

f(x)=(2x133x223)2f(x)=(2006x2)

而在点 x0=(0.10.2) 的梯度和 Hessian 矩阵就等于:

f(x0)=(2.82.88)2f(x0)=(2001.2)

由于 2f(x)1=(120011.2), 在点 x0 的 Newton 方向为:

d0=2f(x0)1f(x0)=(120011.2)(2.82.88)=(1.42.4)

于是, 下一迭代点为:

x1=x0+d0=(0.10.2)+(1.42.4)=(1.52.6)

计算在点 x1=(1.52.6) 的梯度和 Hessian 矩阵:

f(x1)=(017.28)2f(x1)=(20015.6)

计算点 x1 的 Newton 方向:

d1=2f(x1)1f(x1)=(1200115.6)(017.28)=(01.11)

那么, 下一迭代点为:

x2=x1+d1=(1.52.6)+(01.11)=(1.51.49)

计算在点 x1=(1.51.49) 的梯度和 Hessian 矩阵:

f(x2)=(03.66)2f(x2)=(2008.94)

计算点 x2 的 Newton 方向:

d2=2f(x2)1f(x2)=(120018.94)(03.66)=(00.41)

那么, 下一迭代点为:

x3=x2+d2=(1.51.49)+(00.41)=(1.51.08)

由于 f(x3)=(00.49), 停止迭代, 并且 x3=(1.51.08) 为极小点。

参考文献

  1. 机器学习之数学
  2. 无约束最优化方法学习笔记
  3. 最优化方法总结
posted @   郝hai  阅读(1590)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示