最小二乘法的概念
最小二乘法要关心的是对应的cost function是线性还是非线性函数,不同的方法计算效率如何,要不要求逆,矩阵的维数
一般都是过约束,方程式的数目多于未知的参数数目。
最小二乘法的目标:求误差的最小平方和,根据cost function的对应有两种:线性和非线性(取决于对应的残差(residual)是线性的还是非线性的)。
公式推导:
-
而非线性最小二乘没有closed-form,通常用迭代法求解。在每次迭代的过程使用一个线性化的方程代替计算。
有牛顿法,牛顿高斯法,LM, 其实可以分为trust region 和 linear line search
非线性最小二乘法的方法有
迭代法,即在每一步update未知量逐渐逼近解,cost function在下降,可以用于各种各样的问题。
- 梯度下降(最速下降法)是迭代法的一种,可以用于求解最小二乘问题
上面的x0是泰勒展开式的点, α是 步长(一个实数) , d→ 单位方向(一个向量),即 |d→|=1
显然当d的方向和f′(x0)方向相反的时候,cos180=?1,整体取到最小值。这就是为什么取的是梯度的反方向原因。
当然上面的步长一般也是可以求得,怎么求步长也是一门学问。
下面的都是从牛顿法引申出来的,记住牛顿法求得是稳定点f′(x)=0f′(x)=0,导数为0的不一定是最小值,梯度下降法求得是局部最小值,从计算上看
- 牛顿法 泰勒展开式到二阶,公式参考参考文献1.
- 高斯-牛顿法 (公式参考参考文献1.)
是另一种经常用于求解非线性最小二乘的迭代法(一定程度上可视为标准非线性最小二乘求解方法) - Levenberg-Marquardt
的迭代法用于求解非线性最小二乘问题,就结合了梯度下降和高斯-牛顿法,使用信赖阈。 -
LM算法实现
- LM伪代码说明
- 代码实现:参考文献1(Matlab,c++)
-
总结
所以如果把最小二乘看做是优化问题的话,那么梯度下降是求解方法的一种,x=(ATA)?1ATbx=(ATA)?1ATb是求解线性最小二乘的一种,高斯-牛顿法和Levenberg-Marquardt则能用于求解非线性最小二乘。
-
LM算法相对于高斯牛顿算法和梯度下降的优缺点
参考文献:
1.https://www.cnblogs.com/shhu1993/p/4878992.html
2.https://www.codelast.com/%E5%8E%9F%E5%88%9B%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E7%9A%84%E7%90%86%E8%AE%BA%E4%BE%9D%E6%8D%AE/