信赖域方法
信赖域方法是求解非线性优化问题的一类重要数值算法。其核心思想是:在每次迭代中,在一个给定的局部“信赖域”内,构建一个简单的模型(通常是二次模型)来近似复杂的目标函数,并通过求解该简单模型的子问题来确定迭代步长。
第一步:基本思想与动机
考虑无约束非线性优化问题:
\[ \min_{x \in \mathbb{R}^n} f(x) \]
其中 \(f(x)\) 是一个光滑但可能非常复杂的函数(例如非凸、高阶非线性)。
许多优化算法(如最速下降法、牛顿法)可以理解为:在当前迭代点 \(x_k\) 处,我们用一个简单的模型函数 \(m_k(p)\) 来近似目标函数在位移 \(p\) 处的值 \(f(x_k + p)\)。这个模型通常是基于泰勒展开的:
- 线性模型(一阶):\(m_k(p) = f(x_k) + \nabla f(x_k)^T p\)
- 二次模型(二阶):\(m_k(p) = f(x_k) + \nabla f(x_k)^T p + \frac{1}{2} p^T B_k p\)
其中 \(B_k\) 是Hessian矩阵 \(\nabla^2 f(x_k)\) 或其某个近似。
关键问题是:我们能在多大范围内信赖这个模型?如果模型在离 \(x_k\) 很远的地方与真实函数差异巨大,那么根据模型找到的“最优”位移 \(p\) 可能实际上会使真实函数值 \(f(x_k + p)\) 变得很差。
信赖域方法的核心策略是:明确地定义一个区域,在这个区域内我们相信模型 \(m_k(p)\) 是原始函数 \(f(x)\) 的一个合理近似。 这个区域就是“信赖域”,通常定义为一个球体:
\[ \Omega_k = \{ p \in \mathbb{R}^n : \| p \| \le \Delta_k \} \]
其中 \(\Delta_k > 0\) 称为信赖域半径。算法在每次迭代中,都在这个半径为 \(\Delta_k\) 的球内寻找能使模型 \(m_k(p)\) 最小的位移 \(p_k\)。
第二步:算法框架与关键步骤
一个标准的信赖域方法的迭代过程如下:
-
初始化:给定初始点 \(x_0\),初始信赖域半径 \(\Delta_0 > 0\),以及常数 \(\eta \in [0, \frac{1}{4})\)(用于判断接受迭代步的阈值),\(\gamma_1 \in (0, 1)\),\(\gamma_2 > 1\)(用于调整半径的因子)。
-
对于 k = 0, 1, 2, ... 直到收敛:
a. 模型构建:在当前点 \(x_k\) 处,构建局部模型 \(m_k(p)\)。最常用的是二次模型,其中 \(B_k\) 可以是精确的Hessian、拟牛顿法得到的近似Hessian(如BFGS公式),或者当Hessian计算成本高时,甚至可以是简单的单位矩阵缩放(此时退化为最速下降法的思想)。
b. 子问题求解:在信赖域 \(\| p \| \le \Delta_k\) 内求解子问题,寻找试探步 \(p_k\):
\[ p_k = \arg \min_{\| p \| \le \Delta_k} m_k(p) \]
这个子问题是一个带球约束的(可能是非凸的)二次规划问题。其精确求解有专门方法(如柯西点、狗腿法、Steihaug-Toint共轭梯度法),目标是高效地找到一个足够好的近似解。
c. 实际下降量与预测下降量:计算试探点 \(x_k + p_k\) 处的真实函数值。定义两个关键量:
- 实际下降量 (Actual Reduction):\(\text{ared}_k = f(x_k) - f(x_k + p_k)\)。这是目标函数真实的改进量。
- 预测下降量 (Predicted Reduction):\(\text{pred}_k = m_k(0) - m_k(p_k) = f(x_k) - m_k(p_k)\)。这是模型所预测的函数改进量。
d. 比率计算与步长接受:计算比率 \(\rho_k\):
\[ \rho_k = \frac{\text{ared}_k}{\text{pred}_k} \]
这个比率衡量了模型 \(m_k\) 在当前迭代中的预测准确度。
- 如果 \(\rho_k > \eta\)(例如 \(\eta = 0.1\) 或 0.25),说明模型预测是相当可靠的,真实下降接近或优于预测下降。接受该步:令 \(x_{k+1} = x_k + p_k\)。
- 否则,说明模型在半径为 \(\Delta_k\) 的区域内并不可靠,真实下降远小于预测下降。拒绝该步:令 \(x_{k+1} = x_k\)(保持原地不动)。
e. 信赖域半径更新:根据比率 \(\rho_k\) 调整下一次迭代的信赖域半径 \(\Delta_{k+1}\)。 - 如果 \(\rho_k\) 非常小(例如 \(\rho_k < 0.25\)),说明模型在当前区域内不可信。收缩信赖域:\(\Delta_{k+1} = \gamma_1 \Delta_k\)(例如 \(\gamma_1 = 0.25\)),以便在下一次迭代中构建一个更局部的、更可靠的模型。
- 如果 \(\rho_k\) 很大(例如 \(\rho_k > 0.75\)),并且试探步 \(p_k\) 已经“碰”到了信赖域的边界(即 \(\| p_k \| = \Delta_k\)),说明模型非常可靠,我们可能过于保守了。扩张信赖域:\(\Delta_{k+1} = \gamma_2 \Delta_k\)(例如 \(\gamma_2 = 2\)),允许下一次迭代探索更大的范围,可能获得更快的进展。
- 其他情况,保持半径不变:\(\Delta_{k+1} = \Delta_k\)。
第三步:深入理解与特性
-
与线搜索方法的对比:线搜索方法(如最速下降法、牛顿法)是先确定一个搜索方向(如负梯度方向),然后沿着这个方向寻找一个合适的步长,使函数值充分下降。而信赖域方法是先确定一个步长的最大可能范围(信赖域半径),然后在这个范围内同时确定方向和步长。这使得它在处理病态问题(如Hessian矩阵病态或非正定)时通常更稳定。
-
子问题的求解:精确求解带约束的二次子问题可能计算量很大。实践中广泛使用截断共轭梯度法(如Steihaug-Toint方法)。该方法在共轭梯度迭代过程中,如果迭代点到达了信赖域边界,或者遇到了负曲率方向(当 \(B_k\) 非正定时),就提前终止。这提供了一个高效且数值稳定的近似解。
-
全局收敛性:信赖域方法一个非常重要的优点是,在相对温和的条件下(如函数 \(f\) 有下界且 Lipschitz 连续),算法能保证全局收敛,即 \(\lim_{k \to \infty} \nabla f(x_k) = 0\),收敛到一个稳定点(一阶临界点)。这种稳健性使其非常受欢迎。
-
处理约束:信赖域方法的思想可以自然推广到约束优化问题。此时,信赖域子问题会变得更加复杂,可能包含线性或非线性约束,但核心思想不变:在一個局部可信的区域内,用简化模型逼近原问题。
总结来说,信赖域方法通过动态调整一个局部区域的大小,并在该区域内求解一个简化的子问题,巧妙地平衡了“利用模型快速收敛”和“保证算法全局稳健”这两个目标,是解决中大规模非线性优化问题的一类强大而可靠的算法。