zoukankan      html  css  js  c++  java
  • 最优化学习3

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

    手打一下公式

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

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

    $x = x_0 - lambda abla{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'就是梯度$ abla{f(x)}$, f''就是海森阵$H$, 也是二阶梯度$ abla^2{f(x)}$

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

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

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

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

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

    缺点
    若二次项的值比较大,会导致难以忽略,高斯牛顿法的收敛速度会很慢,甚至无法收敛。
     
    Levenberg–Marquardt算法
    增加一个系数μ,用它来控制算法的收敛。
    算法刚刚运行的时候,接近于梯度下降法,收敛到极小值附近。算法运行到后面,接近于高斯牛顿法,避免震荡。
     
    约束!
     
     
  • 相关阅读:
    linux环境变量
    oracle 11g RAC日志分布
    解决Centos下载文件出现”wget: unabl(www.111cn.net)e to resolve host address”
    转载:root用户无法删除文件 rm: cannot remove Readonly file system
    占用端口
    数学小记
    很多问题的解决都是从简单的方式入手不断优化的
    机器学习之算法学习
    机器学习之二分类
    机器学习之模型评估(损失函数的选择)
  • 原文地址:https://www.cnblogs.com/zherlock/p/10237825.html
Copyright © 2011-2022 走看看