【最优化方法】第五次要点整理
共轭方向
设 \(Q \in \mathbb{R}^{n \times n}\) 对称正定,若 \(n\) 维向量组 \(d_1, ..., d_m \in \mathbb{R}^n\) 满足:
\[d_i^\top Q d_j = 0, \forall i \neq j
\]
则称 \(d_1, ..., d_m\) 关于 \(Q\) 共轭,或称为 \(Q\) 的一个共轭方向组。
注:
- 向量组的共轭是正交的推广,即若 \(Q=I\)(单位阵),则共轭变为正交。
- 若 \(d_1, ..., d_m\) 是 \(Q\) 的一个共轭方向组,则 \(d_1, ..., d_m\) 线性无关,且 \(d_1, ..., d_m\) 构成 \(\mathbb{R}^n\) 的一组基。
共轭方向法
【算法思想】n 个共轭方向转化为 n 个独立的一元优化问题,能减少迭代次数。
【算法步骤】
- 第一步:选取初始点 \(x_0\),给定终止误差 \(\varepsilon > 0\) ,令 \(k=0\)
- 第二步:计算 \(\nabla f(x_k)\),若 \(|| \nabla f(x_k) || \leq \varepsilon\),停止迭代并输出 \(x^*=x_k\);否则进行第三步
- 第三步(精确线搜索):取 \(\alpha_k = \mathop{\arg\min}\limits_{\alpha \geq 0} f(x_{k} + \alpha_{k} \nabla f(x_{k}))\)
- 第四步(更新迭代点):计算 \(x_{k+1} = x_k + \alpha_k d_k\)
- 第五步:选取 \(d_{k+1}\),使其满足下降性和共轭性,即(其中 \(Q\) 是空间线性变换矩阵):
\[\begin{cases}
\nabla f(x_{k+1})^\top d_{k+1} < 0 \\
d_{k+1}^\top Q d_i = 0, \forall i=0,...,k \\
\end{cases}
\]
然后令 \(k \leftarrow k+1\),转到第二步。
共轭梯度法
【算法思想】利用当前负梯度方向 \(-\nabla f(x_{k+1})\) 和当前下降方向 \(d_k\) 的线性组合来生成 \(d_{k+1}\):
\[d_{k+1} = -\nabla f(x_{k+1}) + \beta_k d_k
\]
对于 \(\forall \beta_k\),最优的下降性是满足的,证明如下:
\[\begin{aligned}
\nabla f(x_{k+1})^\top d_{k+1} &= \nabla f(x_{k+1})^\top (-\nabla f(x_{k+1}) + \beta_k d_k)\\
&= -||\nabla f(x_{k+1})||^2 + \beta_k \nabla f(x_{k+1})^\top d_k \\
&= -||\nabla f(x_{k+1})||^2
\end{aligned}
\]
对于共轭性,要选取合适的 \(\beta_k\) 才能成立:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top Q d_{k+1}}{d_k^\top Q d_k}
\]
【算法步骤】(Hestenes 和 Stiefel 分别独立提出,1952)
- 第一步:选取初始点 \(x_0\),\(d_0 = -\nabla f(x_0)\),给定终止误差 \(\varepsilon > 0\) ,令 \(k=0\)
- 第二步:计算 \(\nabla f(x_k)\),若 \(|| \nabla f(x_k) || \leq \varepsilon\),停止迭代并输出 \(x^*=x_k\);否则进行第三步
- 第三步(线搜索确定步长):取 \(\alpha_k = \mathop{\arg\min}\limits_{\alpha \geq 0} f(x_{k} + \alpha_{k} d_k) = -\frac{\nabla f(x_k)^\top d_k}{d_k^\top Q d_k}\)
- 第四步(更新迭代点):计算 \(x_{k+1} = x_k + \alpha_k d_k\)
- 第五步:计算 \(\beta_k = \frac{\nabla f(x_{k+1})^\top Q d_{k+1}}{d_k^\top Q d_k}\)
- 第六步(更新搜索方向):计算 \(d_{k+1} = -\nabla f(x_{k+1}) + \beta_k d_k\),回到第二步
非线性共轭梯度法
在共轭梯度法中,选取不同的 \(\beta_k\) 会导出不同的非线性共轭公式。
求解正定二次函数的最优解时,即 \(f(x) = \frac{1}{2} x^\top Q x + x^\top b + c\),\(\nabla f(x) = Qx+b\),此时有:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top Q d_{k+1}}{d_k^\top Q d_k}
\]
对于求解非正定二次函数的最优解:
- HS(Hestenes-Stiefel,1952)公式:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top (\nabla f(x_{k+1}) - \nabla f(x_{k}))}{d_k^\top (\nabla f(x_{k+1}) - \nabla f(x_{k}))}
\]
- FR(Fletcher-Reeves,1964)公式,是最早的非线性共轭梯度法:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top \nabla f(x_{k+1})}{\nabla f(x_{k})^\top \nabla f(x_{k})}
\]
- PRP(Polak-Ribiere-Polyak,1969)公式:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top (\nabla f(x_{k+1}) - \nabla f(x_{k}))}{\nabla f(x_{k})^\top \nabla f(x_{k})}
\]
- CD(Fletcher,1987)公式:
\[\beta_k = -\frac{\nabla f(x_{k+1})^\top \nabla f(x_{k+1})}{d_k^\top \nabla f(x_{k})}
\]
- DY(Dai-Yuan,1995)公式:
\[\beta_k = \frac{\nabla f(x_{k+1})^\top \nabla f(x_{k+1})}{d_k^\top (\nabla f(x_{k+1}) - \nabla f(x_{k}))}
\]
注:
- 求解正定二次函数的最优解时,上述 5 个公式等价;但求解一般的 \(f(x)\) 最优解时,上述公式之间有差别,要根据具体的目标函数选择不同的公式(FR 公式更为常用)
- 线搜索技术对算法的收敛性有影响:
- 精确线搜索可以保证下一步搜索方向的下降性;
- 非精确线搜索有可能产生上升方向(即 \(d_{k+1}\) 是上升的)
- 实现过程中常采用 n 步重启策略,可达到二阶收敛(有 n 个共轭方向后,重新取初始点):
\[d_{k} =
\begin{cases}
-\nabla f(x_k), \ k=cn, \ c=1,2,... \\
-\nabla f(x_k) + \beta_{k-1} d_{k-1}, \ k \neq cn, \ c=1,2,...
\end{cases}
\]