非线性优化
非线性优化与最小二乘的关系见:非线性最小二乘
非线性优化问题又有那些要素呢
非线性优化一般采用迭代的方法,认为估计问题是一个凸函数(初值很重要),通过迭代增量参数X,不断使残差平方和最小.直到,增量X小到一定程度(因为假设凸函数,凸函数在接近极值的地方,导数很小)时,或达到迭代次数时,结束.(注:迭代停止跟整个残差平方的值达到什么程度无关)
增量DX
添加一个增量使得||f(Xk+DXk)||2最小.即在参数上添加一个增量使得残差平方和减小.
因此参数估计问题成了每次迭代增量Dx怎么取的问题.
解Dx的方法有很多,最快速,牛顿法.
有代表性的是高斯牛顿法.
线搜索方法和LM算法都是高斯牛顿法的变形.
稀疏与矩阵求逆
有些参数只和少量观测值相关,且有时观测量非常非常多,这就导致求解Dx算法中求H矩阵的逆变的困难,通常是将其看成稀疏矩阵,用QR或者Cholesky方法求逆.
非线性优化(梯度下降)的求解过程
俗话说,饭得一口一口吃,不能一口吃个胖子。这里要注意的一点就是,虽然我们不能直接找到函数值为最小点。但是,非线性函数的导数是存在的,也就可以计算出每一点的导数。也就是说,既然不能直接找到极值点,我们就应该一步一步的逐渐逼近函数的极值点。
我们将原问题找f(x)的最小值(此处x为n维向量,不是一维的),变为找到f(x+Δx)的最小值,再依此迭代多次,逼近f(x)的最小值。此时,x变为已知,而未知是Δx的大小(当然也可以理解为方向,因为n维向量表示了一个方向)。也就是说,我们希望找到一个Δx,使得函数f(x+Δx)在点x处取得最小值。那么,一个自然的想法就是将f(x+Δx)对Δx求导,再另f’(x+Δx)=0就可以找到Δx的值。然而,这其实又回到了上面说的问题,即求f’(x+Δx)=0和f’(x)=0是一样不可求的。那么怎么办呢?
这就要祭出一个大杀器——泰勒级数展开(有人称为线性化,其实不太准确。在一阶泰勒的情况下却是是线性的,但是如果加了高阶则不是线性了。)
泰勒展开提供了求解函数梯度的方法,得到了梯度之后,通过最快速,高斯牛顿等方法,就可以计算出每次迭代的步长
非线性优化到底在研究什么?
说到这里,你可能会疑惑,既然非线性优化好像通过上面的方法都可以求解,那么为什么还有那么多数学家在研究这个问题。或者说,是不是世间所有问题,都可以通过这个方法求解呢?要想回答这个问题,我们需要重新来审视一下上面的求解过程。
(1)其实这个过程有个重要的前提,那就是f(x)是连续可导。如果f(x)这个函数不可导,或者不可微呢?比如说,在SLAM中需要处理姿态估计的问题。而姿态是通过旋转矩阵和平移向量表示的,这显然是不连续的。但是,由于旋转矩阵是一个李群,那么我们可以将其映射到其李代数上。而且,李代数是可以求导的。所以我们就还可以利用非线性优化的方法对姿态进行估计。也就是说对于不连续的函数,我们可以想办法将其变得连续,从而继续用这种方法。
(2)上面的解法求得的只是局部最优解,而不能确定是否是全局最优解。因为,这种方法可以说是一种“近视眼”的方法,它只看到下一时刻,在邻域内的最小值,而不能全局的寻找。所以,很容易陷入到局部最优中,或者说最终求出的最优值是跟初始位置极度相关的。即使初始值在同一个未知,也很有可能落入到两个不同的局部最优值中,也就是说这个解是很不稳定的。所以,如何解决这个问题,至今仍然存在很大的挑战。
比如凸优化就可以在一定程度上解决这个问题。凸优化的思想是,如果局部最优就是全局最优,就不存在这个问题了。那么如何将一个非凸的问题转换成凸的呢?或者什么问题就是凸的,什么是非凸的呢?
在此,只是粗浅的举了两个例子,其实非线性优化中存在的问题还有很多很多。而且我们在这里只讨论了无约束的情况,而优化问题真实情况往往是存在对变量的约束的。本文只是希望破除我们心中对非线性优化的恐惧,勇敢的迈进非线性优化这道大门。
参考:https://blog.youkuaiyun.com/yu132563/article/details/81239276
探讨非线性优化原理,包括迭代方法、增量参数选择、高斯牛顿法及泰勒级数应用。分析非线性优化挑战,如局部最优与全局最优问题,以及在连续可导函数中的应用。
4194

被折叠的 条评论
为什么被折叠?



