1. 课程导入与问题定义
在工程与科研数据处理中,我们经常遇到这样一类问题:已经有一组观测数据,也大致知道它们应当服从某个物理规律或经验模型,但模型对参数的依赖不是线性的。例如指数衰减 y = A·exp(-k·t) + C、双指数弛豫、Langmuir 吸附等温线、Michaelis–Menten 酶动力学、Gaussian/Lorentz 峰形、Logistic 生长曲线,以及更一般的 y = f(x; θ),其中 θ = (θ₁, θ₂, …, θₚ) 以非线性方式进入函数。此时“拟合”就变成求解一个非线性最小二乘问题:
min_θ S(θ) = Σᵢ [ yᵢ − f(xᵢ; θ) ]²
与线性最小二乘不同,这个目标函数 S(θ) 在参数空间中通常不是简单的碗形,而可能存在多个“坑”。求解器从某个初值出发,沿着梯度或信赖域方向下降,最终停在某个局部极小点。问题在于:它停下的地方,未必是全局最优,也未必是物理上合理的解。这正是本课程要系统处理的核心矛盾。
典型场景:非线性拟合为什么“难”
先看几个真实感较强的场景,理解问题的来源。
- 多指数衰减:荧光寿命、核磁弛豫、RC 电路瞬态常被建模为
y = Σ Aₖ·exp(−t/τₖ)。当两个时间常数τ₁、τ₂接近时,参数之间高度相关,目标函数出现狭长的“香蕉形”谷底,甚至多个局部极小。初值给成τ₁=1, τ₂=10还是τ₁=2, τ₂=5,可能收敛到完全不同的参数组合,但残差平方和相差不大。 - 峰形分解:光谱、色谱、XRD 中重叠峰常用多个 Gaussian 叠加。峰位、峰宽、幅值三者耦合,若初值峰位偏移半个峰宽,优化器可能把两个峰“合并”成一个宽峰,得到一个残差尚可但物理解释错误的局部解。
- 饱和型曲线:
y = Vmax·x/(Km + x)。当数据只覆盖低浓度区,Vmax与Km强相关,参数估计方差极大,不同初值可能给出差异悬殊的(Vmax, Km)组合。
这些场景的共同特征是:模型非线性、参数相关、数据覆盖不完整、存在噪声。四者叠加,使目标函数曲面复杂化,局部极值问题随之而来。
局部极值的来源:从曲面形状到算法行为
局部极值不是“算法 bug”,而是问题本身的性质与求解策略共同作用的结果。可以从四个层面理解:
- 目标函数非凸:非线性模型对参数的依赖可能产生多个驻点。例如
y = a·sin(b·x + c)对b呈周期多峰;多指数模型在参数交换对称性下存在等价解与伪解。 - 参数相关性导致病态:当 Jacobian 矩阵
J = ∂f/∂θ的列近似线性相关时,JᵀJ接近奇异,曲面在某个方向上非常平坦,在另一个方向上陡峭。优化器容易在平坦方向“滑走”,停在非最优位置。 - 初值敏感:梯度类方法(Gauss–Newton、Levenberg–Marquardt)只保证局部收敛。初值落在哪个“吸引域”,就收敛到哪个局部极小。
- 边界与约束:参数有物理范围(如
τ > 0、0 ≤ 覆盖率 ≤ 1)。约束边界上可能出现“伪极小”,或优化器在边界附近震荡。
下面的信号链式示意图把“数据—模型—目标函数—求解器—结果判读”这条链路与局部极值的产生位置对应起来,帮助建立整体认识:
从“能拟合”到“拟合得可信”:本课程要解决什么
很多初学者把非线性拟合等同于“调用一次 curve_fit 或 lsqcurvefit,看到 R² 高就结束”。但在实际工程中,一个高 R² 的解可能是:参数物理意义错误、置信区间极宽、对初值高度敏感、外推完全失效。因此本课程的目标不是记住某个函数调用,而是建立一套可诊断、可复现、可判断的工作方法,具体包括:
- 建模层:如何根据机理选择模型形式,识别参数可辨识性(identifiability),必要时做再参数化(如用
log τ代替τ,用Vmax/Km组合参数降低相关性)。 - 求解层:理解 Gauss–Newton 与 Levenberg–Marquardt 的下降逻辑,知道阻尼因子、步长、收敛判据如何影响是否陷入局部极小。
- 全局层:当初值不确定时,使用多起点、网格扫描、差分进化、模拟退火等全局策略,并用参数分布而非单一解来评估可靠性。
- 诊断层:通过残差图、Jacobian 条件数、参数协方差、剖面似然(profile likelihood)判断解是“真谷底”还是“假平台”。
一个可操作的教学示例:双指数拟合的初值陷阱
设示例数据由 y = 3·exp(−t/0.8) + 2·exp(−t/4.0) 生成,叠加约 2% 的相对噪声,采样 t = 0…20 共 60 点(此处为教学假设数据,非实测)。若直接以 τ₁=1.0, τ₂=1.2 作为初值,两个时间常数过于接近,LM 算法常收敛到 τ₁≈τ₂≈1.5 的“合并解”,残差平方和比真值解高出一个量级,但曲线肉眼看上去仍然贴合。若改用 τ₁=0.5, τ₂=5.0 作为初值,则能稳定收敛到接近 (0.8, 4.0) 的解。
这个例子说明:初值不是随便给的起点,而是对解空间的一次“定位”。合理的做法是先做半对数变换观察衰减段斜率,或用网格扫描 τ₁ ∈ [0.2, 2]、τ₂ ∈ [2, 10] 粗搜一遍,取残差最小的若干组作为多起点初值。判断是否真正收敛,不能只看拟合曲线,而要看:残差是否呈随机分布、参数标准误是否远小于参数值、不同初值是否收敛到同一组参数。
学习路径
本课程按“问题—原理—方法—诊断—实战”推进:先建立非线性最小二乘与局部极值的基本图景(本章),再依次展开模型选择与参数可辨识性、Gauss–Newton 与 LM 的推导与实现细节、初值策略与全局优化、约束与正则化、残差与协方差诊断、多起点与剖面似然评估,最后通过多指数衰减、重叠峰分解、饱和曲线等综合案例完成从数据到可信参数的完整闭环。建议学习时始终带着一组自己的数据同步练习,把每一节的诊断方法立即用上,而不是等到最后才动手。