非线性最小二乘问题的数值解法
字数 4100 2025-12-13 06:52:04
好的,我们开始一个新的词条。
非线性最小二乘问题的数值解法
好的,我们先从最基础的概念开始。
-
什么是“最小二乘问题”?
- 核心思想: 在科学实验和工程中,我们经常需要通过观测得到一组数据点
(x_i, y_i),然后试图找到一个数学模型(通常是一个函数f(x, β))来“最好地”拟合这些数据。这里的“最好”通常意味着所有数据点的观测值y_i与模型预测值f(x_i, β)之间的总差异最小。 - 数学定义: 这个“总差异”通常用残差平方和来度量。假设我们有
m个数据点,模型有n个待定参数β = [β1, β2, ..., βn]^T。定义第i个数据点的残差为r_i(β) = y_i - f(x_i, β)。那么最小二乘问题的目标就是找到一组参数β*,使得目标函数S(β)最小:
S(β) = Σ_{i=1}^{m} [r_i(β)]^2 = r(β)^T * r(β)
这里r(β) = [r1(β), r2(β), ..., r_m(β)]^T是残差向量。 - “线性”与“非线性”:
- 线性最小二乘: 如果模型函数
f(x, β)是参数β的线性函数(例如f = β1 + β2*x或f = β1*sin(x) + β2*exp(x),注意这里sin(x)和exp(x)是已知的,系数β1, β2是线性的),那么S(β)是一个关于β的二次函数。这有解析解(正规方程)或稳定的数值解(如 QR 分解、SVD)。 - 非线性最小二乘: 如果模型函数
f(x, β)是参数β的非线性函数(例如f = β1 * exp(β2 * x)或f = β1 / (1 + β2 * x)),那么目标函数S(β)不再是β的二次函数,可能非常复杂,存在多个局部极小值,通常没有解析解,必须依靠迭代数值算法来求解。我们接下来要讲的就是这类问题的解法。
- 线性最小二乘: 如果模型函数
- 核心思想: 在科学实验和工程中,我们经常需要通过观测得到一组数据点
-
解决非线性最小二乘问题的核心策略——迭代下降法
既然没有直接公式,我们就采用“猜-修正-再猜”的迭代思路。- 步骤: 从一个初始猜测参数
β^(0)开始,产生一系列迭代点β^(1), β^(2), ...,希望它们能收敛到局部极小点β*。 - 关键: 每次迭代如何确定搜索方向
p_k和步长α_k,使得β^(k+1) = β^(k) + α_k * p_k,并且S(β^(k+1)) < S(β^(k))。 - 理论基础——泰勒展开与导数:
为了寻找下降方向,我们需要分析S(β)在当前位置的局部性质。这依赖于目标函数的一阶和二阶导数信息。- 梯度(一阶导数向量):
g(β) = ∇S(β) = 2 * J(β)^T * r(β)。
其中J(β)是m×n的雅可比矩阵,其第i行第j列元素是J_ij = ∂r_i(β) / ∂β_j。梯度g指向S在当前位置最陡上升的方向,所以负梯度-g是最速下降方向。 - 海森矩阵(二阶导数矩阵):
H(β) = ∇^2 S(β) = 2 * (J(β)^T * J(β) + Σ_{i=1}^{m} r_i(β) * ∇^2 r_i(β))。
海森矩阵描述了函数的曲率。第二项Σ r_i * ∇^2 r_i包含了残差本身的二阶导数,计算成本高。
- 梯度(一阶导数向量):
- 步骤: 从一个初始猜测参数
-
经典算法一:高斯-牛顿法 (Gauss-Newton Method)
- 核心思想: 对非线性模型
f(x, β)或残差r(β)在当前迭代点β^(k)处进行一阶泰勒线性化(忽略高阶项):
r(β^(k) + p) ≈ r(β^(k)) + J(β^(k)) * p。 - 推导: 将线性化后的残差代入目标函数:
S(β^(k) + p) ≈ || r(β^(k)) + J(β^(k)) * p ||^2。
这变成了一个关于搜索方向p的线性最小二乘问题!其正规方程为:
[J(β^(k))^T * J(β^(k))] * p_gn = -J(β^(k))^T * r(β^(k))。
解出p_gn,然后更新:β^(k+1) = β^(k) + p_gn(这里步长α_k隐含为1)。 - 优缺点:
- 优点: 避免了计算海森矩阵中的二阶项
Σ r_i * ∇^2 r_i,只用到雅可比矩阵J,计算更高效。当残差r_i很小(即模型拟合很好)时,二阶项可忽略,高斯-牛顿法近似于牛顿法,且收敛速度快(二阶收敛速率附近)。 - 缺点: 矩阵
J^T J可能病态甚至奇异,导致p_gn计算不稳定。当残差很大或模型非线性很强时,线性化近似很差,算法可能不收敛。
- 优点: 避免了计算海森矩阵中的二阶项
- 核心思想: 对非线性模型
-
经典算法二:莱文贝格-马夸尔特法 (Levenberg-Marquardt Method)
- 核心思想: 这是高斯-牛顿法的鲁棒性改进,被视为此领域的事实标准。它通过引入一个“阻尼因子”
λ来融合高斯-牛顿法和最速下降法的优点。 - 修正方程: 将高斯-牛顿法的正规方程修改为:
[J(β^(k))^T * J(β^(k)) + λ_k * D] * p_lm = -J(β^(k))^T * r(β^(k))。
其中D通常是对角矩阵,常用D = I(单位矩阵)或diag(J^T J)。 - 参数
λ_k的作用:- 当
λ_k很大时,方程主导项是λ_k * D * p_lm ≈ -J^T r,此时p_lm趋近于最速下降方向-J^T r的缩放版。步长小,但稳定性好,适合迭代初期或远离解时。 - 当
λ_k很小(趋于0)时,方程退化为标准的高斯-牛顿方程。此时搜索方向p_lm趋近于p_gn,收敛速度快,适合接近最优解时。
- 当
- 自适应调整
λ_k: 算法有一个反馈机制。计算出p_lm后,评估实际下降S(β^(k)) - S(β^(k)+p_lm)与线性模型预测下降的比值。如果拟合效果好(比值大),则接受这一步,并在下一次迭代减小λ(更信任高斯-牛顿方向);如果拟合效果差(比值小),则拒绝这一步,增大λ(转向更保守的最速下降方向),并重新求解。 - 优点: 比纯高斯-牛顿法稳定得多,能处理病态雅可比矩阵问题,在实际应用中非常强大和流行。
- 核心思想: 这是高斯-牛顿法的鲁棒性改进,被视为此领域的事实标准。它通过引入一个“阻尼因子”
-
经典算法三:信赖域法 (Trust Region Method)
- 核心思想: 与线搜索法(先定方向,再定步长)不同,信赖域法先定义一个以当前迭代点为中心、半径为
Δ_k的“信赖域”。在这个小区域内,我们用一个简单的模型函数m_k(p)(通常是二次模型)来近似复杂的目标函数S(β^(k) + p)。 - 步骤:
- 构建子问题: 在当前信赖域
||p|| ≤ Δ_k内,求解近似模型m_k(p)的极小点。这个近似模型通常取为目标函数二阶泰勒展开的简化形式,例如高斯-牛顿模型:m_k(p) = S(β^(k)) + g^T p + (1/2) p^T (J^T J) p。 - 求解子问题: 在球形约束
||p|| ≤ Δ_k下最小化m_k(p)。这本身是一个优化子问题,有专门高效算法(如折线法、共轭梯度法在边界停止)。 - 评估与调整: 计算实际下降与预测下降的比值。如果比值好,说明模型可信,接受这一步,并可能扩大信赖域半径
Δ_k;如果比值差,说明模型在当前区域内不准确,拒绝这一步,缩小信赖域半径Δ_k,并在更小的区域内重新求解子问题。
- 构建子问题: 在当前信赖域
- 与LM法的联系: 可以证明,在特定条件下(
D = I),莱文贝格-马夸尔特法求解的p_lm等价于一个以Δ_k = ||p_lm||为半径的信赖域子问题的解。λ_k起到了拉格朗日乘子的作用。因此,LM法可以看作是一种特殊形式的信赖域法。
- 核心思想: 与线搜索法(先定方向,再定步长)不同,信赖域法先定义一个以当前迭代点为中心、半径为
-
实际问题中的考量与扩展
- 初始值选择: 非线性最小二乘算法的收敛性强烈依赖于初始猜测
β^(0)。糟糕的初值可能导致收敛到局部极小点而非全局最优,甚至不收敛。通常需要结合物理意义、先验知识或全局优化策略来获取较好的初值。 - 雅可比矩阵计算: 算法核心需要雅可比矩阵
J。有三种主要方式:- 解析导数: 手工推导或使用符号计算得到公式,精度最高。
- 自动微分: 利用计算机程序结构和链式法则自动计算,精度与解析解相当,是现代推荐的方法。
- 有限差分: 通过扰动参数来近似导数,简单但存在截断误差和选择步长的困难,计算成本为
O(n)倍函数计算。
- 鲁棒性与大残差问题: 当数据中存在异常值(Outliers)时,基于平方和的
S(β)对异常值非常敏感。此时可使用鲁棒最小二乘,例如将目标函数改为Σ ρ(r_i),其中ρ是增长较慢的函数(如Huber函数),相应的算法也需要调整。 - 大规模问题: 当参数
n或数据量m极大时,直接计算和存储J^T J(n×n矩阵)可能不可行。这时需要采用迭代线性代数方法(如共轭梯度法)来内嵌求解LM或信赖域中的线性系统,只用到J和向量乘积的操作。
- 初始值选择: 非线性最小二乘算法的收敛性强烈依赖于初始猜测
总结一下,非线性最小二乘问题的数值解法是一个从线性模型(解析解)扩展到非线性模型(迭代数值解)的领域。其核心算法,特别是高斯-牛顿法、莱文贝格-马夸尔特法和信赖域法,都围绕如何利用目标函数的导数信息(主要是雅可比矩阵)来构造稳定、高效的迭代步骤。理解这些算法的核心思想、联系(如LM法与信赖域法的关系)以及在实际应用中的各种考量(初值、导数计算、鲁棒性),是掌握这一词条的关键。