本文对非线性最小二乘的原理、思路和应用做了简单介绍。
非线性最小二乘
最小二乘是一种数学最优化建模方法,它的一种常见解释是对残差做了满足正态分布的极大似然估计。最小二乘分两类:线性最小二乘和非线性最小二乘,区别是残差函数是否为线性函数,线性最小二乘比较简单,可以直接求解析解,非线性最小二乘比较复杂,需要用迭代式的最优化方法求解。
最小二乘回顾
假设有观测数据集,某个参数为的函数描述了观测数据的因变量和自变量的映射关系,即: 但数据拟合时一定不是严丝合缝的,会有误差即残差,所以有: 假设这个残差服从偏差为0的正态分布,则有: 于是有:
对于这个独立的观测样本就会产生个方程,采用极大似然估计有:
由贝叶斯公式可知: 所以,利用极大似然求参有: 最后有:
非线性最小二乘
当残差函数非线性时,方便起见,我们定义残差函数为:,对个观测样本有个方程: 非线性最小二乘问题变成: 如果此时还有其他约束条件,例如,等式约束的话,以上问题变成了约束非线性最小二乘问题:
拉格朗日乘数法
考虑求解通用的约束最优化问题,以最小化问题为: 几个定义:
1、为维向量,当满足以上所有约束条件时,被叫做可行解;
2、所有可行解中,当满足,则被称作全局最优解;
3、当可行解只有在一个邻域中时才满足,则被称作局部最优解,其中。
为求解上述约束问题,需要将其转变为无约束问题,在机器学习与人工智能技术分享-第四章 最优化原理中有过介绍,定义拉格朗日函数: 其中:为维的拉格朗日乘子向量,为维的约束函数向量。
拉格朗日函数的梯度为: 其中:
如果可行解为局部最优解,则必须满足拉格朗日条件(first-order necessary conditions),即此条件是必要条件:
其中:
需要注意,如果在可行解下,是线性相关的,则拉格朗日乘子不存在,因此无法通过拉格朗日乘数法求解,但此时局部最优解可能是存在的; 反之,如果线性无关,则被称为正则点(regular point),举个例子:
为唯一的可行解,因此它也是最优解,其拉格朗日函数为:
在
处的拉格朗日条件为:
显然,
和
都不存在,
不是正则点(
与
是线性相关的),无法使用拉格朗日乘数法求解该问题。
![]()
约束非线性最小二乘
其中为待求参数,为个样本的残差,为个约束条件。
转化为拉格朗日函数:,由拉格朗日条件知,如果为最优解,则存在使得:
ps:的行向量为线性无关组。
当和都是线性函数时,该问题可以直接求出解析解,否则需要采用迭代法,在机器学习与人工智能技术分享-第四章 最优化原理中我们介绍了由泰勒展开式衍生出的各种一阶和二阶优化算法,例如各种梯度下降法和各种拟牛顿法, 简单地说,优化算法就是在研究怎么找方向和找步长,先找方向再找步长是Line Search方法,先找步长再找方向(也可以看做同时找步长和方向)是Trust Region方法。
Newton Step-based迭代法
前面也说到泰勒展开式是大部分最优化方法的“根”,如果展开到二阶,则可以变成各种牛顿法,简单回顾: 求解无约束最小化问题: 在当前迭代点下,做泰勒展开到二阶: 其中:是个缩放因子,迭代式为:。
简单起间用代替,用代替,用代替有: 由于Hessian矩阵计算成本很高,所以用一个矩阵去估计,于是上面问题变成: 其中:与之间的误差是的高阶无穷小,即:,当很小时这个误差就很小。 由最优值必要条件可知,在第轮迭代有:
1、如果且可逆、正定,上面问题就变成了牛顿法;
2、如果且始终保持正定,就是拟牛顿法,它和牛顿法一样,都具有二次收敛速度,即: 当靠近最优值时,有:,;
ps:只有始终保持正定才能保证收敛,因为,对于最小化问题,始终希望搜索方向是一个下降方向,即满足,所以:
3、如果,显然单位矩阵不是Hessian矩阵的一个好的估计,但它够简单,于是有:,这就是妥妥的梯度下降法了,这时的收敛速度只能到线性速度了,即:,;
4、如果非正定,需要重新定义,总能找到使得正定,即,从而总能找到最优,换个角度看这个形式:
- 当很小时,如果正定,上式蜕变为牛顿法;
- 当很大时,出现两个现象: 1、上式蜕变为梯度下降法 2、会被减小
这个优化框架其实就是原始的Levenberg-Marquardt迭代法,即:当前值在距离最优值比较远时通过梯度下降法优化,虽然速度很慢但保证收敛,接近最优值时通过牛顿法以二次收敛速度逼近。 实际上可以证明,即使不正定,只要对做合适的限制,就能做到全局收敛,这个思想就是Trust Region(信任域)法。 回看这个问题: 当时,相当于泰勒展开式展开到3阶,此时误差为,当很小时,这个误差非常非常小,所以确定这一步可以转化为一个子优化问题: 其中,是Trust Region的半径,定义为欧氏距离,则最优解在一个半径为的球体内(把约束变个形式就清楚了:),特别是当Hessian矩阵性质不太好(如出现奇异或者病态)时,Trust Region法却能很好的求解。
ps:由于目标函数和约束条件都是二次方形式,所以求解的计算成本比较低。
总结对比下Levenberg-Marquardt与Trust Region的区别:
当牛顿法不好使时:
Levenberg-Marquardt:通过对做扰动,求解中的,从而做迭代;
Trust Region:通过求解子优化问题得到最优,从而做迭代,让当前点迅速进入”兴趣域“。
所以Trust Region法可以看做是Levenberg-Marquardt法演化后得到的算法,另外,前者可以很好的处理目标函数是Negative Curvature的情况,后者不行,所以不要将两类算法混为一谈。
![]()
到此为止,Trust Region还有个遗留问题是该怎么取? 给定,定义:
观察上述定义:
1、当时,由于大于当前值,所以目标函数值上升了,此时的必须丢弃;
2、如果接近1,说明估计的比较好,此时就可以放心的再下次迭代时扩展信任域;
3、如果且远小于1,则下次迭代保持信任域不变;
4、如果接近0,则需要在下次迭代时缩减信任域。
Trust Region伪码如下:
Trust Region框架应用
1、问题变换
回到之前的问题,为方便后续推理,去掉等式约束(因为通过拉格朗日乘数法可以很容易变成无约束问题),加入迭代轮数标识,并给目标函数加个系数,即: 由泰勒展开式可知:
方便起见用符号表示Jacobian矩阵,表示,表示:
即待求解的无约束问题从 变成:
利用Trust Region 框架,如果为上述问题的最优解,则一定存在,且满足以下条件:
换个角度看,其实就是求解下面这个最小二乘问题:
2、Trust Region框架下描述解法
罚函数法
对问题: 不再强制要求约束条件严格遵守:,而是增惩罚系数,变成无约束问题: 在每轮迭代中,通过求解: 利用Levenberg–Marquardt算法更新,方便起见用符号表示Jacobian矩阵,表示,表示,根据拉格朗日条件有: 令,则有: 当足够小时算法结束迭代(此时足够大)。
算法缺点:
为了让尽快逼近到0,需要惩罚系数的值快速增大,这个会带来:
1、求解非线性最小二乘子问题变得困难
2、会导致Levenberg–Marquardt算法需要更多的迭代甚至失败
增广拉格朗日法
对问题: 其最优值满足拉格朗日条件: 定义增广拉格朗日函数: 根据拉格朗日条件知最优值满足: 令 有: 显然,根据拉格朗日条件可知,如果是最优解,必须满足,当它的值较大时,可以通过上述的迭代式进行迭代。完整表述如下: 迭代初始点可以选择:,和罚函数法不同,只在需要时增加,增长速度缓慢,当足够小或者达到最大迭代次数后算法结束。
汽车非线性控制问题
阿克曼转向技术
很长时间人们在车辆(如:马车)转向上采用单铰链转向技术,如下图,这种方式两个前轮的转向角是相同的,内外转向轮指向同一圆心,结构很简单,但转向摆动空间大时会影响稳定性,转弯角度大时也会发生卡死,就像小时候开玩具车时,转弯时一个不小心就人仰马翻。
![]()
为了避免上述问题,人们发明了一种转向结构,让内侧转向轮的转角比外侧转向轮大了约2~4度,并让四个轮子路径的圆心大致交会于后轴的延长线上的同一个中心点,从而能够平滑稳定的转向,后来这项技术被英国代理商阿克曼申请了专利,后被称作阿克曼转向技术(Ackermann Steering)如下图:
![]()
Simple Car模型
对阿克曼转向做简化,可以构建对车辆控制的简单模型:
![]()
车辆在任意一个时刻的运动模型为: 其中为时刻位置,为时刻车辆后轴中点的瞬时速度,为时刻前轴中点转向角,为时刻车身朝向。
内外侧轮转向角的关系为:
时刻后轴中点运动位置的微分方程为:
由弧长和角度关系可知,假设
为
时刻车辆行驶距离,则有微分方程:
![]()
所以时刻总的的微分方程为: 以上方程在本文叫做“车辆运动模型”。
Dubins Vehicle模型
我们思考一个问题:停车场有A、B两个位置,一个人站在A位置,在速度等约束条件同等的情况下,怎么走能最快到达B位置?答案是显而易见的,两点之间线段最短!如果把人换成车答案又是什么?由于车辆有长度和车身朝向,从一个位置到另一个位置需要依据转向角转向后才能向前行进,所以行驶的最短路径由直线段和圆弧段组成,这里最经典的方法是Dubin’s Car,这个方法最大的优点是求解最短路径规划用最简单的几何方法就能搞定,无需复杂的矩阵计算,而且Dubins在1957年完成了数学理论上的完备性证明。Dubin’s Car的控制只有三种操作:L,左转前进;R,右转前进;S,向前直行,则控制组合总共有6种: RSR、LSL、RSL、LSR、RLR、LRL,如果把L和R统一拿C(Curve)来表示的话,组合只有两种:CSC(RSR、LSL、RSL、LSR)和CCC(RLR、LRL)。
![]()
![]()
不管哪种控制方式,都有一个要遵循的独特切线。这条切线构成了“S”部分的轨迹。直线与圆相切的点是车辆必须经过的点,没有它们车辆无法完成其轨迹。所以解决这些轨迹的问题就可以归结为如何正确计算这些切线。 计算切线的方法有几何法和向量法两种,其中向量法效率更高,这里介绍下:
1、如何求两个圆的切点和切线
已知:两个圆和及其圆心位置分别为和,以及它们的半径和,它们不一定相等
![]()
求:两个圆的切点和切线
![]()
整个过程分以下几步:
- 画出两个圆与;
- 连接两个圆的圆心和,得到向量且
![]()
- 连接两个圆的切点和,得到切线
- 画出向量的单位方向向量,用表示
- 以上几个向量关系为:
![]()
- 求切线的关键点是如何求得
- 修改向量为向量,使得它平行于向量:,于是有关系: 用,则有: 由点积的定义: 可知,向量和的夹角为常量,即: 这里的未知量只有:,问题就变成了:把已知向量旋转角度后得到向量。 旋转向量操作比较简答,即:
- 计算得到后,可以很方便的求出两个切点:从C1的圆心沿着方向,距离为的点为C1的切点,然后从出发,沿着方向,与C2圆相交,得到切点。
2、计算CSC曲线
CSC包括RSR、LSL、RSL、LSR,计算切点就是为了找到CSC曲线的“S”部分,计算CSC路径就变成了:从起点以最小转半径转弯到达第一个切点,直行到达第二个切点后,以最小转弯半径再次转弯,到达终点。
以RSR为例,假设起点为:,终点为:,和圆心计算方法为:
![]()
得到两个圆心后,就可以计算两个切点,从而得到车辆控制的三段轨迹:起始点到的圆弧,到的线段和到终点的圆弧。
![]()
假设车辆速度恒定为1,起点为,终点为,是从起点到达终点的时间,则根据车辆运动模型有: 其中为转弯半径。
求解起点到终点的最短路径问题就是对下面问题的一个最优化过程: 由于, 即最短路径只与有关。以RSR控制为例,就变成了3组控制:(-最大转向角,T1)、(0,T2)、(-最大转向角,T3),实际实现时采取迭代式: 其中取值一般为:,给定弧长,有。
3、计算CCC
CCC包括RLR和LRL两种,不涉及到切线的计算。
![]()
计算方法如下: 分别为的圆心,同时与和相切,为最小转向半径, 记,有: 从而有: 注意:LRL模式时,需要加上,RLR模式时,需要减去。 对做缩放,有: 于是有: 的计算完全类似,这样三段弧线就得到了:到、到、到。
非线性最小二乘法控制
车辆的连续运动可以通过离散的多次运动做估计,假设有一个很小的时间间隔,车辆运动模型可以变为:
定义输入向量:,定义状态向量:,则运动模型可以表示为:
其中代表向量的第一个分量,其他的含义类似。于是车辆运动模型就变成了给定初始点、初始车身朝向和停止点,通过一定时间间隔变化产生一个输入序列,从而模拟车辆运行轨迹的过程,由于要求运动的最短路径,所以它是一个非线性约束最优化问题,希望每次迭代以最小的转向角和速度为代价,保持平稳的运动,最终得到代价最小的最优路径,数学描述如下: 其中:为序列长度,为变量。
参考文献
1、《A Comprehensive, Step-by-Step Tutorial on Computing Dubin’s Curves》
2、《Constrained nonlinear least squares》
老乡,想请问下咱们这个是什么博客系统啊,WordPress吗?
@Anonymous , 用hexo在腾讯云上搭建,很方便。
@Anonymous , 妙啊,学到了!😄
v1.3.10