引入问题
神经网络训练数据的过程就是不断调整未知参数使得代价函数达到最小值,通常选择均值平方差函数MSE,即解决一个如下问题。
传统BP算法更新参数使用的是最快梯度下降法,即沿梯度的反方向,按一定步长大小,进行参数更新,使的评价函数达到极小值。
hsd = -F'(x)
但是此种方法忽略了二阶导数项,最终阶段为线性收敛,且速度较慢,因此,更多时候是将其作为优化初始阶段所采用方法。
相反,牛顿法使用了二阶导数,最终阶段收敛速度快,收敛性好,但不适合初始阶段。因此常将其与最快梯度下降法结合使用。牛顿法简单推导:
值得注意的是,牛顿法计算出的hn是下降方向是有前提条件的,条件是H(即F''(x))是正定矩阵
因此,若F''(x)正定,则h = hn 否则 h= hsd。
LM法
但是,牛顿法需要时刻计算H矩阵,即二阶导数信息,是很麻烦的一件事情,LM算法的核心思想就是用雅可比矩阵(易计算)代替H矩阵的计算,使得优化效率有了提升。
下面是用雅可比矩阵代替二阶导数的推导
下面用雅可比矩阵来解决问题,首先推导高斯-牛顿法,LM法就是在高斯-牛顿法的基础上加入了一个变量因子。注意F是f的平方,因此我的理解是f作一阶展开就相当于F作二阶展开了。
求F(x)的极小值被转化为了求L(h)极小,求解过程简化。高斯牛顿与牛顿法很像,可以对比一下:
高斯牛顿:L''(h)hgn = -L'(0),牛顿:F''(x)hn= -F'(x)。这种转化使得不用再计算F的二阶导数
L-M算法与高斯-牛顿类似,如下式描述:
(1)当u=0时,退化为高斯牛顿算法
(2)当u很大时,hlm = -(F'(x))/u,退化为步长较小的梯度下降法
因此在解决了高斯-牛顿法基础之上,LM算法的重点就是如何确定u值。引入一个评价量
该量描述了使用L的下降量对F下降量的近似程度,如果ro较大,说明近似效果较好(可以理解为L下降量很小,接近极值点),可以继续减小u使得LM更接近高斯-牛顿;如果ro较小,说明近似效果较差,因此增大u使得LM更接近梯度法。u和ro的曲线如下图
此外,还需要规定迭代结束条件(3者之一达到即可):
(1)下降梯度g小于某一阈值
(2)前后两次x的差小于某一阈值
(3)达到最大迭代次数kmax
最后LM算法流程如下:
参考资料(推导非常详细):Miroslav Balda 的Methods for non-linear least square problems
http://download.csdn.net/detail/mingtian715/9708842
MATLAB代码(基于LM的优化版本):http://download.csdn.net/detail/mingtian715/9709054