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

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

一、无约束最优化问题

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

\[\begin{aligned} & \min f(x) \\ & \text { s.t.} \quad x \in X \end{aligned} \]

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

\[x_{k+1}=x_k+\alpha_k d_k \]

式中, \(\alpha_k\) 为步长因子, \(d_k\) 为搜索方向。在最优化算法中,搜索方向 \(d_k\)\(f\)\(x_k\) 点处的下降方 向, 即:

\[f\left(x_k+\alpha_k d_k\right)<f\left(x_k\right) \]

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

  • 给定初始点 \(x_0\)
  • 确定搜索方向 \(d_k\) ,即按照一定规则,构造 \(f\)\(x_k\) 点处的下降方向作为搜索方向;
  • 确定步长因子 \(\alpha_k\) ,使目标函数有某种意义的下降。

二、最速下降法

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

最速下降法仅有三个步骤:
设置初始值。设置迭代起点\(x_0\in R^n\),允许误差\(\epsilon>0\)和迭代变量初值\(k\leftarrow0\)
检查终止条件。如果\(||\nabla f(x_k)||<\epsilon\),停止迭代输出\(x_k\)作为近似最优解;否则转步骤3。
迭代,通过一维搜索求下一个迭代点。取搜索方向为负梯度方向\(d_k=-\nabla f(x)\),求\(\lambda_k\)使得$$f(x_k+\lambda_k d_k)=\min_{\lambda\geq0} f(x_k+\lambda d_k)$$再令$$x_{k+1}=x_k+\lambda d_k$$转步骤2。

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

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

\[f(x)=\frac{1}{2} x^T Q x+c^T x \]

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

\[f\left(x-\alpha \nabla f_k\right)=\frac{1}{2}\left(x-\alpha \nabla f_k\right)^T Q\left(x-\alpha \nabla f_k\right)+c^T\left(x-\alpha \nabla f_k\right) \]

令上式对 \(\alpha\) 的导数为 0 即可求得对应步长为:

\[\alpha_k=\frac{\nabla f_k^T \nabla f_k}{\nabla f_k^T Q \nabla f_k} \]

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

\[x_{k+1}=x_k-\frac{\nabla f_k^T \nabla f_k}{\nabla f_k^T Q \nabla f_k} \nabla f_k \]

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

例2: 用最速下降法计算函数 \(f\left(x_1, x_2\right)=\left(x_1-2\right)^2+\left(x_2-2\right)^2\) 的极小点和极小值, 设初始点为 \(x^0=(0,0)^T\), 迭代误差为 \(\varepsilon=0.05\)
解: 因为函数 \(f\left(x_1, x_2\right)\) 的梯度等于 \(\nabla f\left(x_1, x_2\right)=\left(\begin{array}{l}2\left(x_1-2\right) \\ 2\left(x_2-1\right)\end{array}\right)\), 那么在点 \(x^0=\left(\begin{array}{l}0 \\ 0\end{array}\right)\) 处的梯 度值等于 \(\nabla f\left(x^0\right)=\left(\begin{array}{l}-4 \\ -4\end{array}\right)\)
\(d^0=-\nabla f(0,0)=(4,4)^T\), 则有: \(x^0+\alpha d^0=\left(\begin{array}{l}4 \alpha \\ 4 \alpha\end{array}\right), f\left(x^0+\alpha d^0\right)=4(2 \alpha-1)^2\) 。我们需 要求解 \(\alpha_0\), 使其满足 \(f\left(x^0+\alpha_0 d^0\right)=\min _{\alpha \geq 0}\left\{4(2 \alpha-1)^2\right\}\)
\(\frac{d}{d \alpha} 4(2 \alpha-1)^2=8(2 \alpha-1)=0\), 求得 \(\alpha_0=\frac{1}{2}\), 所以下一个迭代点为:

\[x^1=x^0+\alpha_0 d^0=\left(\begin{array}{l} 0 \\ 0 \end{array}\right)+\frac{1}{2}\left(\begin{array}{l} 4 \\ 4 \end{array}\right)=\left(\begin{array}{l} 2 \\ 2 \end{array}\right) \text { 。 } \]

函数 \(f\left(x_1, x_2\right)\) 在点 \(x^1\) 处的梯度为: \(\nabla f\left(x^1\right)=\left(\begin{array}{l}0 \\ 0\end{array}\right)\), 由于 \(\left\|\nabla f\left(x^1\right)\right\|=0 \leq 0.05\), 那么 \(x^1\) 是局部极小点, 迭代结束。因为 \(f\left(x_1, x_2\right)\) 是凸函数, 那么 \(x^1\) 也是全局极小点, \(f\left(x^1\right)=0\) 是全局极小值。

例3:用最速下降法求解无约束非线性问题\(\min f(x)=x_1^2+2x_2^2-2x_1x_2-2x_2\)的最小值点,其中\(x=(x_{1},x_{2})^T,x^{(0)}=(0,0)^T\)
在这里为了直观的理解问题,我们对该问题进行可视化,\(x_{1},x_{2}\)分别取[−10,10],步长为0.2。绘制图像如下:

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

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

三、牛顿法

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

\[f(x)\approx \phi(x)=f(x_k)+\nabla f(x_k)^T(x-x_k)+\frac{1}{2}(x-x_k)^T\nabla^2f(x_k)(x-x_k) \]

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

\[\nabla\phi(x)=0 \]

\[\nabla f(x_k)+\nabla^2f(x_k)(x-x_k)=0 \]

从而推出

\[x = x_k - [\nabla^2f(x_k)]^{-1}\nabla f(x_k) \]

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

\[x_{k+1}=x_k-[\nabla^2(fx_k)]^{-1}\nabla f(x_k) \]

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

牛顿法的步骤为:
设置初始值。给定迭代初值\(x_0\in R^n\),\(\epsilon>0\),令\(k \leftarrow 0\)
检查终止条件。如果\(||\nabla f(x)||<\epsilon\),迭代终止,\(x_k\)为近似最优解;否则,转步骤3。
迭代计算。取迭代方向

\[d_k=-[\nabla^2f(x_k)]^{-1}\nabla f(x_k) \]

\[x_{k+1}=x_k+d_k \\ k \leftarrow k+1 \]

转步骤2。

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

阻尼牛顿法步骤如下:
设置初始值。给定迭代初值\(x_0\in R^n\),\(\epsilon>0\),令\(k \leftarrow 0\)
检查终止条件。如果\(||\nabla f(x)||<\epsilon\),迭代终止,\(x_k\)为近似最优解;否则,转步骤3。
取迭代方向

\[d_k=-[\nabla^2f(x_k)]^{-1}\nabla f(x_k) \]

进行一维搜索确定步长\(\lambda_k\)使得$$f(x_k+\lambda_k d_k)=\min_{\lambda\geq0}f(x_k+\lambda d_k)$$令$$x_{k+1}=x_k+\lambda d_k \quad k\leftarrow k+1$$转步骤2。

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

例4:用 Newton 法计算函数 \(f\left(x_1, x_2\right)=x_1{ }^2+x_2{ }^3-3 x_1-3 x_2+5\) 的极小点, 设初始点为 \(x^0=(01,0.2)^T\), 允许迭代误差 \(\varepsilon=0.5\)
解: 因为目标函数的梯度和 Hessian 矩阵分别为:

\[\nabla f(x)=\left(\begin{array}{c} 2 x_1-3 \\ 3 x_2^2-3 \end{array}\right) \quad \nabla^2 f(x)=\left(\begin{array}{cc} 2 & 0 \\ 0 & 6 x_2 \end{array}\right) \]

而在点 \(x^0=\left(\begin{array}{l}0.1 \\ 0.2\end{array}\right)\) 的梯度和 Hessian 矩阵就等于:

\[\nabla f\left(x^0\right)=\left(\begin{array}{c} -2.8 \\ -2.88 \end{array}\right) \quad \nabla^2 f\left(x^0\right)=\left(\begin{array}{cc} 2 & 0 \\ 0 & 1.2 \end{array}\right) \]

由于 \(\nabla^2 f(x)^{-1}=\left(\begin{array}{cc}\frac{1}{2} & 0 \\ 0 & \frac{1}{1.2}\end{array}\right)\), 在点 \(x^0\) 的 Newton 方向为:

\[d^0=-\nabla^2 f\left(x^0\right)^{-1} \nabla f\left(x^0\right)=-\left(\begin{array}{cc} \frac{1}{2} & 0 \\ 0 & \frac{1}{1.2} \end{array}\right)\left(\begin{array}{c} -2.8 \\ -2.88 \end{array}\right)=\left(\begin{array}{l} 1.4 \\ 2.4 \end{array}\right) \]

于是, 下一迭代点为:

\[x^1=x^0+d^0=\left(\begin{array}{l} 0.1 \\ 0.2 \end{array}\right)+\left(\begin{array}{l} 1.4 \\ 2.4 \end{array}\right)=\left(\begin{array}{l} 1.5 \\ 2.6 \end{array}\right) \]

计算在点 \(x^1=\left(\begin{array}{l}1.5 \\ 2.6\end{array}\right)\) 的梯度和 Hessian 矩阵:

\[\nabla f\left(x^1\right)=\left(\begin{array}{c} 0 \\ 17.28 \end{array}\right) \quad \nabla^2 f\left(x^1\right)=\left(\begin{array}{cc} 2 & 0 \\ 0 & 15.6 \end{array}\right) \]

计算点 \(x^1\) 的 Newton 方向:

\[d^1=-\nabla^2 f\left(x^1\right)^{-1} \nabla f\left(x^1\right)=-\left(\begin{array}{cc} \frac{1}{2} & 0 \\ 0 & \frac{1}{15.6} \end{array}\right)\left(\begin{array}{c} 0 \\ 17.28 \end{array}\right)=\left(\begin{array}{c} 0 \\ -1.11 \end{array}\right) \]

那么, 下一迭代点为:

\[x^2=x^1+d^1=\left(\begin{array}{l} 1.5 \\ 2.6 \end{array}\right)+\left(\begin{array}{c} 0 \\ -1.11 \end{array}\right)=\left(\begin{array}{c} 1.5 \\ 1.49 \end{array}\right) \]

计算在点 \(x^1=\left(\begin{array}{c}1.5 \\ 1.49\end{array}\right)\) 的梯度和 Hessian 矩阵:

\[\nabla f\left(x^2\right)=\left(\begin{array}{c} 0 \\ 3.66 \end{array}\right) \quad \nabla^2 f\left(x^2\right)=\left(\begin{array}{cc} 2 & 0 \\ 0 & 8.94 \end{array}\right) \]

计算点 \(x^2\) 的 Newton 方向:

\[d^2=-\nabla^2 f\left(x^2\right)^{-1} \nabla f\left(x^2\right)=-\left(\begin{array}{cc} \frac{1}{2} & 0 \\ 0 & \frac{1}{8.94} \end{array}\right)\left(\begin{array}{c} 0 \\ 3.66 \end{array}\right)=\left(\begin{array}{c} 0 \\ -0.41 \end{array}\right) \]

那么, 下一迭代点为:

\[x^3=x^2+d^2=\left(\begin{array}{c} 1.5 \\ 1.49 \end{array}\right)+\left(\begin{array}{c} 0 \\ -0.41 \end{array}\right)=\left(\begin{array}{c} 1.5 \\ 1.08 \end{array}\right) \]

由于 \(\nabla f\left(x^3\right)=\left(\begin{array}{c}0 \\ 0.49\end{array}\right)\), 停止迭代, 并且 \(x^3=\left(\begin{array}{c}1.5 \\ 1.08\end{array}\right)\) 为极小点。

参考文献

  1. 机器学习之数学
  2. 无约束最优化方法学习笔记
  3. 最优化方法总结
posted @ 2023-06-08 23:34  郝hai  阅读(967)  评论(0编辑  收藏  举报