非线性最小二乘问题数值方法
第一步:问题定义与基本形式
非线性最小二乘问题源于对非线性模型参数的拟合。其一般形式为:
\[\min_{x \in \mathbb{R}^n} f(x) = \frac{1}{2} \sum_{i=1}^m r_i(x)^2 = \frac{1}{2} \| r(x) \|_2^2 \]
其中 \(r(x) = (r_1(x), \dots, r_m(x))^T\) 是残差函数向量,通常 \(m \geq n\)。目标是通过调整参数 \(x\) 使残差平方和最小。
第二步:梯度与Hessian矩阵的推导
计算目标函数 \(f(x)\) 的梯度:
\[\nabla f(x) = J(x)^T r(x) \]
这里 \(J(x) \in \mathbb{R}^{m \times n}\) 是残差的雅可比矩阵,其第 \((i,j)\) 元素为 \(\partial r_i / \partial x_j\)。
进一步求Hessian矩阵:
\[\nabla^2 f(x) = J(x)^T J(x) + \sum_{i=1}^m r_i(x) \nabla^2 r_i(x) \]
其中第一项 \(J^T J\) 是近似Hessian(高斯-牛顿矩阵),第二项包含残差二阶导,通常计算复杂。
第三步:高斯-牛顿法原理
当二阶项较小(即模型接近线性或残差接近零),忽略第二项得到高斯-牛顿法迭代:
\[x_{k+1} = x_k - (J_k^T J_k)^{-1} J_k^T r_k \]
其中 \(J_k = J(x_k)\),\(r_k = r(x_k)\)。该方法将非线性问题转化为一系列线性最小二乘子问题。
第四步:处理病态与鲁棒性:列文伯格-马夸尔特法
当 \(J_k^T J_k\) 近似奇异时,高斯-牛顿法不稳定。列文伯格-马夸尔特法引入阻尼项:
\[x_{k+1} = x_k - (J_k^T J_k + \mu_k I)^{-1} J_k^T r_k \]
其中 \(\mu_k > 0\) 是阻尼参数,通过评估迭代后残差变化动态调整(例如信赖域策略)。
第五步:全局化策略与线搜索
为保证收敛性,可结合线搜索:计算高斯-牛顿或列文伯格-马夸尔特方向 \(p_k\),但迭代改为:
\[x_{k+1} = x_k + \alpha_k p_k \]
其中步长 \(\alpha_k \in (0,1]\) 通过阿米霍(Armijo)等条件选择,确保 \(f(x)\) 充分下降。
第六步:拟牛顿法与混合方法
当二阶项不可忽略,可用拟牛顿法近似完整Hessian,如BFGS公式更新:
\[H_{k+1} = B_k - \frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k} + \frac{y_k y_k^T}{s_k^T y_k} \]
其中 \(s_k = x_{k+1} - x_k\),\(y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\)。结合高斯-牛顿法可提升收敛效率。
第七步:大规模问题的数值技巧
对于高维问题(\(n\) 很大),直接求逆 \(J^T J + \mu I\) 代价高,可改用共轭梯度法迭代求解线性系统,或利用稀疏结构、自动微分计算雅可比,避免手动求导误差。
第八步:应用场景示例
- 曲线拟合:拟合指数模型 \(y = a e^{bx}\) 到实验数据。
- 计算机视觉:光束平差法优化三维点与相机参数。
- 动力系统参数辨识:从观测数据估计微分方程参数。
以上步骤从问题构建到算法实现,逐步深入非线性最小二乘的核心数值方法,强调了从经典高斯-牛顿到现代鲁棒算法的演进逻辑。