非线性规划中的共轭梯度法(Conjugate Gradient Method in Nonlinear Programming)
字数 2978 2025-12-19 00:52:48

非线性规划中的共轭梯度法(Conjugate Gradient Method in Nonlinear Programming)

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

总结来说,共轭梯度法 是一种利用迭代过程中产生的梯度信息,构造一系列共轭搜索方向的高效一阶优化算法。它巧妙地将求解二次函数的有限步收敛性,转化为求解一般非线性函数的超线性收敛算法,并以极低的内存开销成为处理大规模优化问题的有力工具。

非线性规划中的共轭梯度法(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 \))。 作为子求解器 :在信赖域方法或求解非线性方程组的Krylov子空间方法中,常用来近似求解子问题。 扩展 : 预条件共轭梯度法 :通过引入一个预条件子(Preconditioner)矩阵 \( M \),等价地改善原问题的条件数,从而极大地加速收敛。这是科学计算中求解大规模对称正定线性系统的 标准方法 。 对于非线性问题,有专门的 非线性共轭梯度法 研究,探讨不同 \( \beta_ k \) 公式(FR, PR+, HS等)与线搜索条件的组合,以获得更好的全局收敛性和数值表现。 总结来说, 共轭梯度法 是一种利用迭代过程中产生的梯度信息,构造一系列共轭搜索方向的高效一阶优化算法。它巧妙地将求解二次函数的有限步收敛性,转化为求解一般非线性函数的超线性收敛算法,并以极低的内存开销成为处理大规模优化问题的有力工具。