前面分析了 线性最小二乘 的解法YcoFlegs:[数值计算] 数据拟合——线性最小二乘法zhuanlan.zhihu.com
现在来看另一个问题:非线性最小二乘法
1. 定义
首先是如何定义这里这个“非线性”。为什么前面用多项式拟合就是线性了?
对于多项式拟合,每个数据样本,误差为:
,可以看到此处误差(希望绝对值缩小到0的那个函数)和
的关系是线性的,因此这个最小二乘问题被称为 线性最小二乘。虽然
与x的关系是非线性的,最终的优化函数为
也是非线性的。
那么 非线性最小二乘 就很容易理解了,误差函数r和参数b的关系是非线性的就行了。
2. 例子——发射器位置
在一片区域里
,存在10个接收器,分别位于
,和一个无线电发射器,位置
未知。这些接收器可以测量离发射器的距离,但存在误差。Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
此时,单个接收器数据对应的误差是
。
很容易证明非线性关系,即
。
3. 求导
和线性最小二乘一样,优化的目标函数为
。其中,前面的
系数只是为了方便后面推导的书写,m是样本点的数量。
其中n是待优化参数的维度,
是r对b的雅可比矩阵。
b最优的条件就是
如果r与b是线性关系,那么
就是正规方程组(参考上一篇文章“线性最小二乘”),可以直接求解。证明的话只需要把
拆开。
此处因为r(b)的非线性,只能迭代求解这个优化问题。
4. 优化
4.1 牛顿法
先考虑一个简单的情况来引入牛顿法。在一元函数,求一个x使得f(x)=0。假如我们先猜这个根是
,距离真实的根的距离是
。使用泰勒展开
。忽略高阶项,可以得到
。所以
,如此循环。
对于多元函数,形式完全类似:
。对于over-constrained system,
,
,参考https://zhuanlan.zhihu.com/p/83269117,可以用伪逆
求逆。
4.2 牛顿法在非线性最小二乘中的使用
上面Section3提到,希望求根的函数F(b)为
有必要在这里停下来理一下notation。注意此处:r是误差函数,尺寸为
,m是样本点的个数
是误差函数对b的雅可比矩阵,尺寸为
,n是b的维度,是待优化参数的个数
φ是目标函数,尺寸为
F是φ的导数,是待求根的函数,尺寸为
是F对b的雅可比矩阵,尺寸为
所以为了得到
还得继续求一次导:
其中
是Eq.4的第i列的转置和r(b)列向量的点积。
下一步就是用Section4.1这个公式来迭代:
4.3 高斯牛顿法的推导 Gauss-Newton Method
Eq.6中的二阶导求解通常很麻烦,而且随着优化的进行,误差函数r(b)的值也在减小,因此决定忽略Eq.6的第二项求和:
把Eq.6 Eq.10代入到Eq.8里,得到最终的迭代公式:
观察下正规方程组的公式
可以发现,和上面的Eq.11形式上有很多相近之处。实际上高斯牛顿法实际上等价于在每个迭代步骤求解
。这种线性化非线性函数的思路在科学运算里很常见。
4.4 如何优雅地计算雅可比矩阵对于简单问题,比如上面Section2的
,可以手推求导。
但对于复杂的函数,或者没有closed-form的黑盒函数,可以考虑有限差分+autogradautograd: Efficiently computes derivatives of numpy codegithub.com
4.5 高斯牛顿法小结
特点是:使用牛顿法求解
忽略二阶项
缺点:
实际应用中收敛不稳定
4.6 高斯牛顿法的变种——Levenberg–Marquardt法
更新公式:
其中
,diag此处的意思是把除了对角线的元素直接归零,然后用heuristic选择
。
从形式上LM法比GM法只是多了一个正则项。
5. 回到求发射器位置的例子
这里用Python的scipy.optimize.root作为求解器https://github.com/chr1shr/am205_examples/blob/master/1_data_fitting/nonlinlsq.pygithub.com
sol=root(grad_phi,b_init,jac=False,method='lm')Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
红色的点是b_init,红色的×是最终收敛的解,而黑色的×是真实的位置。
一圈一圈的是
的等高线图,而求解器想要找
的点。可以看到,此处的等高线图不是规则形状,也说明了这是一个非线性最小二乘的问题。
PS: 如果是线性最小二乘(
)的话,2D情况下(n=2)的轮廓图会长这个样子:Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
更高阶的情况下是hyperellipses。