常用的矩阵求导运算
向量和矩阵的导数满足乘法规则
常用的矩阵
-
梯度:f(x) 是 x 的标量函数,x为向量, 那么f(x) 对 x 的导数为梯度:
-
雅可比矩阵
-
海森矩阵:f(x) 关于 x 的二阶导数成为海森矩阵。
非线性优化算法
考虑简单的最小二乘问题,如下:
求解这样一个优化问题。显然,如果f是个数学形式上很简单的函数,那么该问题可以用解析形式来求。令目标函数的导数为零,然后求解x的最优值,就和求二元函数的极值一样:
解此方程,就得到了导数为零处的极值。它们可能是极大、极小或鞍点处的值,只要逐个比较它们的函数值大小即可。但是,这个方程是否容易求解呢?这取决于f导函数的形式。如果f为简单的线性函数,那么这个问题就是简单的线性最小二乘问题,但是有些导函数可能形式复杂,使得该方程可能不容易求解。
求解这个方程需要我们知道关于目标函数的全局性质,而通常这是不大可能的。对于不方便直接求解的最小二乘问题,我们可以用迭代的方式从一个初始值出发,不断地更新当前的优化变量,使目标函数下降。具体步骤可列写如下:
这让求解导函数为零的问题变成了一个不断寻找下降增量△Xk的问题,我们将看到,由于可以对f进行线性化,增量的计算将简单很多。当函数下降直到增量非常小的时候,就认为算法收敛,目标函数达到了一个极小值。在这个过程中,问题在于如何找到每次迭代点的增量,而这是一个局部的问题,我们只需要关心f在迭代值处的局部性质而非全局性质。
最速下降法过于贪心,容易走出锯齿状,而牛顿法需要计算二阶海森矩阵,过于复杂,经常使用的是高斯牛顿和LM非线性优化算法。
这里把左侧记作H是有意义的。对比牛顿法可见,高斯牛顿法用JJ’作为牛顿法中二阶Hessian矩阵的近似,从而省略了计算H的过程。求解增量方程是整个优化问题的核心所在。中间优化过程需要H(x)矩阵可逆这一性质,实际情况下可能并不能保证满足,可能导致算法不收敛。此时增量的稳定性较差,直观地说,原函数在这个点的局部近似不像一个二次函数。更严重的是,就算我们假设H非奇异也非病态,如果我们求出来的步长△a 太大,也会导致我们采用的局部近似式不够准确,这样一来我们甚至无法保证它的迭代收敛,哪怕是让目标函数变得更大都是有可能的。
LM算法不再介绍,公式如下: