最优化学习3

对几个经典方法的整理和比较

手打一下公式

梯度下降法:面向任何函数,收敛速度一阶,有发散可能。梯度下降法考虑函数的一阶梯度(一阶泰勒展开),找到一个合理的迭代方向,但是不能确定步长。

只利用了当前点的切线(一阶梯度)的信息

$x = x_0 - \lambda\nabla{f(x)}$

牛顿法:面向任何函数,收敛速度二阶,有发散可能。使用了二阶的梯度,

对导数泰勒一阶展开(相当于对原函数二阶展开)  $f'(x) \approx f'(x_0) + (x-x_0)f''(x_0) $

令  $f'(x_0) + (x-x_0)f''(x_0) = 0$, 可得$ x = x_0 - \frac{f'(x_0)}{f''(x_0)}$。其中f'就是梯度$\nabla{f(x)}$, f''就是海森阵$H$, 也是二阶梯度$\nabla^2{f(x)}$

每次可以获得一个点!而不是一个方向。因为利用了二阶梯度的信息,相当于把原函数展开成一个二次函数,求解最小值,收敛速度也比梯度下降快。同样有发散的可能性,计算二阶梯度计算量很大。

阻尼牛顿法:增加一维的步长搜索

拟牛顿法:简化对二阶梯度的计算

高斯牛顿法:针对目标函数有最小二乘的形式。简化海森阵H的计算,利用雅可比矩阵的信息。计算量变小了,同样需要一阶搜索来确定步长

$ x = x_0 - [J^TJ^{-1}]J^Tf(x)$

缺点
若二次项的值比较大,会导致难以忽略,高斯牛顿法的收敛速度会很慢,甚至无法收敛。
 
Levenberg–Marquardt算法
增加一个系数μ,用它来控制算法的收敛。
算法刚刚运行的时候,接近于梯度下降法,收敛到极小值附近。算法运行到后面,接近于高斯牛顿法,避免震荡。
 
约束!
 
 

 

posted @ 2019-01-08 11:08  zherlock  阅读(156)  评论(0编辑  收藏  举报