非线性规划中的共轭梯度法(Conjugate Gradient Method in Nonlinear Programming)
字数 2978 2025-12-19 00:52:48
非线性规划中的共轭梯度法(Conjugate Gradient Method in Nonlinear Programming)
- 背景与问题设定
- 在无约束非线性优化中,目标是找到多元函数 \(f(x)\) 的最小值点,其中 \(x \in \mathbb{R}^n\)。
- 经典的最速下降法(梯度下降法)虽然简单,但在病态(ill-conditioned)问题中收敛很慢,其搜索路径呈锯齿状。
- 牛顿法利用二阶导数(Hessian矩阵)信息,收敛速度快,但需要计算和存储Hessian矩阵及其逆,计算成本高,且可能不是正定的。
- 共轭梯度法 旨在结合两者的优点:它不显式计算或存储二阶导数矩阵,但通过利用历史梯度信息,构造出一系列“共轭”的搜索方向,从而在求解二次函数时能在有限步内精确收敛(对n维问题最多n步),对于非二次函数也能实现超线性收敛。
- 核心思想:共轭方向
- 首先考虑一个特殊但重要的情形:最小化一个正定二次函数 \(f(x) = \frac{1}{2}x^T A x - b^T x + c\),其中 \(A\) 是n阶对称正定矩阵。
- 一组非零向量 \(d_0, d_1, ..., d_{k}\) 被称为关于矩阵 \(A\) 共轭,如果满足 \(d_i^T A d_j = 0\) 对所有 \(i \neq j\) 成立。
- 关键性质:如果沿着这样一组共轭方向依次进行精确线搜索(即 \(x_{k+1} = x_k + \alpha_k d_k\),其中 \(\alpha_k = \arg\min_\alpha f(x_k + \alpha d_k)\)),那么从任意初始点 \(x_0\) 出发,至多n步就能收敛到 \(f(x)\) 的唯一极小点 \(x^* = A^{-1}b\)。
- 这意味着,在共轭方向下,每次线搜索都是在当前点沿着该方向上寻找极小点,并且不会破坏之前所有方向上已达到的最优性。这是一种比“正交”更强、针对问题矩阵 \(A\) 定制的最优搜索方向体系。
- 共轭梯度法的构造(针对二次函数)
- 算法从最速下降方向开始:\(d_0 = -\nabla f(x_0) = -g_0\)。
- 迭代步骤(对于k=0,1,...):
- 计算步长:通过精确线搜索 \(\alpha_k = \arg\min_\alpha f(x_k + \alpha d_k)\)。对于二次函数,有解析解 \(\alpha_k = -\frac{g_k^T d_k}{d_k^T A d_k}\)。
- 更新迭代点:\(x_{k+1} = x_k + \alpha_k d_k\)。
- 计算新梯度:\(g_{k+1} = \nabla f(x_{k+1}) = A x_{k+1} - b\)。
- 构造新的共轭方向:这是核心。新的搜索方向 \(d_{k+1}\) 是当前负梯度 \(-g_{k+1}\) 与上一个搜索方向 \(d_k\) 的线性组合:\(d_{k+1} = -g_{k+1} + \beta_k d_k\)。
- 计算共轭系数 \(\beta_k\):为了保证 \(d_{k+1}\) 与 \(d_k\) (进而与所有之前的 \(d_j\))关于 \(A\) 共轭,可以推导出 \(\beta_k\) 的公式。最常用的是Fletcher-Reeves (FR) 公式和Polak-Ribière (PR) 公式。对于精确二次函数下的精确线搜索,它们是等价的:
- \(\beta_k^{FR} = \frac{g_{k+1}^T g_{k+1}}{g_k^T g_k}\)
- \(\beta_k^{PR} = \frac{g_{k+1}^T (g_{k+1} - g_k)}{g_k^T g_k}\)
- 这个构造过程的美妙之处在于,只需计算梯度(一阶信息),不需要显式知道矩阵 \(A\),就能生成关于 \(A\) 共轭的方向。在二次目标下,至多n次迭代后,梯度 \(g_n = 0\),达到精确解。
- 推广到一般非二次函数
- 对于非二次函数 \(f(x)\),其Hessian矩阵不是常数。我们无法再保证方向严格共轭,也不能在有限步达到精确解。
- 但算法框架可以直接移植过来,作为一种迭代的、基于一阶信息的优化算法:
- 初始方向 \(d_0 = -g_0\)。
- 通过非线性线搜索(如Wolfe条件、Armijo条件等,通常比精确线搜索更实用)确定步长 \(\alpha_k\)。
- \(x_{k+1} = x_k + \alpha_k d_k\)。
- 计算 \(g_{k+1}\)。
- 利用上述FR或PR公式(或其他变体,如Hestenes-Stiefel, HS)计算 \(\beta_k\)。
- \(d_{k+1} = -g_{k+1} + \beta_k d_k\)。
- 为了保证全局收敛性,通常会周期性地(如每n次迭代或在梯度几乎正交时)执行一次重置(restart),将搜索方向设回最速下降方向 \(d_k = -g_k\) 。重置策略是工程实现的关键之一。
- 性质、优缺点与应用场景
- 超线性收敛:对于光滑强凸函数,在适当线搜索和重置策略下,其收敛速度通常优于线性收敛,接近超线性。
- 低存储需求:仅需存储几个n维向量(当前点、梯度、搜索方向),是大规模优化问题的理想选择,因为内存占用为 \(O(n)\)。
- 优缺点:
- 优点:比最速下降法快得多,特别是对于病态问题;比牛顿法/拟牛顿法内存效率更高,适用于n非常大的问题。
- 缺点:对线搜索精度有一定要求,特别是使用PR公式时,不精确的线搜索可能导致方向不是下降方向,需要引入保护措施(如强制重置)。通常比高性能的拟牛顿法(如L-BFGS)收敛慢一些。
- 应用场景:
- 优缺点:
- 大规模无约束优化:如机器学习中训练大规模神经网络的早期工作,或求解偏微分方程离散化产生的大型线性系统(此时相当于解 \(Ax=b\))。
2. 作为子求解器:在信赖域方法或求解非线性方程组的Krylov子空间方法中,常用来近似求解子问题。- 扩展:
- 预条件共轭梯度法:通过引入一个预条件子(Preconditioner)矩阵 \(M\),等价地改善原问题的条件数,从而极大地加速收敛。这是科学计算中求解大规模对称正定线性系统的标准方法。
- 对于非线性问题,有专门的非线性共轭梯度法研究,探讨不同 \(\beta_k\) 公式(FR, PR+, HS等)与线搜索条件的组合,以获得更好的全局收敛性和数值表现。
总结来说,共轭梯度法 是一种利用迭代过程中产生的梯度信息,构造一系列共轭搜索方向的高效一阶优化算法。它巧妙地将求解二次函数的有限步收敛性,转化为求解一般非线性函数的超线性收敛算法,并以极低的内存开销成为处理大规模优化问题的有力工具。