最小二乘的优化算法

最小二乘的优化算法

  最小二乘法的目标是“求误差的最小平方和”。

最小二乘的概念解释

  找到一个(组)估计值,使得实际值与估计值的距离最小。本来用两者差的绝对值汇总并使之最小是最理想的,但绝对值在数学上求最小值比较麻烦,因而替代做法是,找一个(组)估计值,使得实际值与估计值之差的平方加总之后的值最小,称为最小二乘。“二乘”的英文为least square,其实英文的字面意思是“平方最小”。这时,将这个差的平方的和式对参数求导数,并取一阶导数为零,就是OLSE。

最小二乘的分类

  有两种:线性和非线性:
  1)线性最小二乘的解是closed-form(闭式),即x=(A^T A){-1}ATb;
  2)非线性最小二乘没有closed-form,通常用迭代法求解。

迭代法

  即在每一步update未知量逐渐逼近解,可以用于各种各样的问题(包括最小二乘),比如求的不是误差的最小平方和而是最小立方和。

1. 梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。

  关键是学习率的选择。

2. 高斯-牛顿法是另一种经常用于求解非线性最小二乘的迭代法(一定程度上可视为标准非线性最小二乘求解方法)。

  使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快(特别是对于二阶函数(考虑多元函数的话要在凸函数的情况下),牛顿法能够一步到达,非常有效)。

牛顿法的缺点

  靠近极小值时收敛速度减慢,如(牛顿法搜索动态示例图.JPG)所示;直线搜索时可能会产生一些问题;可能会“之字形”地下降

  • 牛顿法起始点不能离局部极小点太远,否则很可能不会收敛。(考虑到二阶拟合应该很容易想象),所以实际操作中会先使用别的方法,比如梯度下降法,使更新的点离最优点比较近,再开始用牛顿法。
  • 牛顿法每次需要更新一个二阶矩阵,当维数增加的时候是非常耗内存的,所以实际使用是会用拟牛顿法。
  • 梯度下降法在非常靠近最优点时会有震荡,就是说明明离的很近了,却很难到达,因为线性的逼近非常容易一个方向过去就过了最优点(因为只能是负梯度方向)。但牛顿法因为是二次收敛就很容易到达了。

比较梯度下降与牛顿法

  牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。

  如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部。梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步;而牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。
  所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

  从几何上说,
  牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
  红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。
最小二乘的优化算法_第1张图片

牛顿法的改进

  牛顿法用到二阶导数信息,梯度法只有一阶导数信息,而拟牛顿法也是一阶信息,但是比梯度法好很多

3. 拟牛顿法

  参考资料:http://blog.csdn.net/owen7500/article/details/51601627
  思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。
  拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。
另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。
  常用的拟牛顿法有DFP算法和BFGS算法。

4. 共轭梯度法(Conjugate Gradient)

  共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点.
  共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。
  在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

5. 启发式方法

  指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。
  包括经典的模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。

  还有一种特殊的优化算法被称之多目标优化算法。它主要针对同时优化多个目标(两个及两个以上)的优化问题,这方面比较经典的算法有NSGAII算法、MOEA/D算法以及人工免疫算法等。

6. 解决约束优化问题——拉格朗日乘数法

你可能感兴趣的:(机器学习具体算法,经典机器学习算法)