相机响应函数

线性最小二乘和非线性最小二乘

2018-11-15  本文已影响0人  皮皮蒋

本文基于下面的博客,结合自己第一次看的时候的一些问题,重新梳理总结一下

https://blog.csdn.net/wsj998689aa/article/details/41558945

一:什么是最小二乘

最小二乘:就是最小化\sum_{i = 0}^n (y_i - f_i(x))^2,

其中:y_i是第i个实际观测到的值,也可以叫做真实值或者目标值;

          f_i(x)则可以看作是通过x这个参数预测得到的第i个值,是对y_i的一个预测(估计)。

最小二乘就是为了使得观测值(真实值)和估计值之间的差距最小。

二:什么是线性最小二乘

所谓线性,指的是f_i(x)是x的线性函数,f_i(x) = x_0+t_1x_1+⋯+t_qx_q

那么对于整个f(x)可以表示为图一:

图一

写成矩阵形式,为图二

图二

此时,我们有f(x) = Ax,此时最小二乘形式变为求x使得||Ax-y||最小化。(这里A是固定的,是需要自己寻找的,这也是线性的前提)

三:如何求解线性最小二乘

对于线性最小二乘,我们要求解min_x||Ax-y||,那么最理想的情况是求x使得Ax =y,这样||Ax-y|| = 0也就是最小了(别问我为什么0是最小的,因为平方和,当然0是最小值)

此时,问题转换为求解A^TAx = A^Ty,最终得到x = (A^TA)^{-1}A^Ty的解析解形式,一步求解,不需要迭代,完美~

这个具体的证明过程参考下面这篇博客,我就不当搬运工了:

https://blog.csdn.net/u013007900/article/details/45933435

四:什么是非线性最小二乘

所谓非线性,就是f_i(x)无法表示为x的线性关系,即:f_i(x)
无法表示为x_0+t_1x_1+⋯+t_qx_q这种线性的关系,而是f_i(x) = e^{a_0x_0}+ e^{a_1x_1}+...+e^{a_nx_n}这种非线性关系(当然这里也不一定是指数形式,对数啥的,或者什么奇奇怪怪表示不出来的形式也有可能)

f(x)x的非线性关系时,此时最小二乘就变为:非线性最小二乘

五:如何求解非线性最小二乘

非线性最小二乘问题无法构造出来一个矩阵线性方程组的,没有办法求一步求得解析解,那么我们怎么求解呢?

思路:既然是非线性的,那么我们可不可以将其转换为线性的呢?或者近似线性的?

答案当然是可以啦~~~~

这就是大名鼎鼎的一阶泰勒展开:f_i(x) \approx  f_i(x_k)+\bigtriangledown f_i(x)(x-x_k)

(一定要一阶泰勒展开,不能采用二阶以上,因为只有一阶泰勒展开才是线性函数,才能转换为线性最小二乘问题来直接求解。)

此时min_x\sum_{i = 0}^n (y_i-f_i(x))^2变成了min_x\sum_{i = 0}^n (y_i-f_i(x_k)-\bigtriangledown f_i(x)(x-x_k))^2

我们在将前两项合并就变成了

min_x\sum_{i = 0}^n ((y_i-f_i(x_k))-\bigtriangledown f_i(x)(x-x_k))^2

其中如果将(y_i-f_i(x_k))看作e_i,将\bigtriangledown f_i(x)看作一个矩阵的第i行(其实这里\bigtriangledown f_i(x)本来就是一个矩阵的第i行,也就是大名鼎鼎的雅各比矩阵J的第i行)

那么就变成了min_x\sum_{i = 0}^n (e_i-J_i(x-x_k))^2对应着线性最小二乘的形式

min_x\sum_{i = 0}^n (e_i-J_i(x-x_k))^2 =min_x||e-J(x-x_k)||

此时,我们该怎么做呢~~当然是模仿线性最小二乘的解鸭:

求解:J(x-x_k) = e

照着抄:J^TJ(x-x_k) = J^Te

最终:(x-x_k) = (J^TJ)^{-1}J^Te

这样子我们就得到了关于当前x_k的一个更新值,这样,我们只需要不停的迭代更新x的值,直到e达到某一个精度即可~~是不是很简单呢^_^

六:结语

看到这里,你就入坑了鸭,你以为(x-x_k) = (J^TJ)^{-1}J^Te就这么好求解么~~

这里有几个难点:

1. J不会求~~肿么办?(这点我不知道,我只会逆运动学得求雅各比的方法)

2.(J^TJ)^{-1}注意到了这一项么,哼哼,谁告诉你这东西一定有逆矩阵的?那么没有逆矩阵肿么办,这就是一个ill-condition的问题,他的condition number非常大。这时候,我们通常引入正则项来降低condition number,也可以理解为强行让(J^TJ)^{-1}这个逆矩阵存在。那就是~~(J^TJ + \lambda I)^{-1}直接加入一个带权重的单位矩阵就好了。

3. 至于什么是ill condition 和condition number,等我后续有空了更新,或者大家自己搜一搜吧~我懒。

上一篇 下一篇

猜你喜欢

热点阅读