原文:http://blog.csdn.net/dsbatigol/article/details/12448627

何为梯度?

一般解释:

f(x)在x0的梯度:就是f(x)变化最快的方向

举个例子,f()是一座山,站在半山腰,

往x方向走1米,高度上升0.4米,也就是说x方向上的偏导是 0.4

往y方向走1米,高度上升0.3米,也就是说y方向上的偏导是 0.3

这样梯度方向就是 (0.4 , 0.3),也就是往这个方向走1米,所上升的高度最高。

(1*0.4/0.5)*0.4 +(1*0.3/0.5)*0.3 = 1*(0.3^2+0.4^2) = 0.5

这里使用了勾股定理的前提是走的距离足够小,因为走的距离足够小的时候,连续的曲面就看做一个平面,当然可以使用勾股定理。这里说距离1米是为了简便。

往x方向走1米,高度上升0.4米,也就是说x方向上的偏导是  0.4。

往y方向走1米,高度下降0.3米,也就是说y方向上的偏导是 -0.3 ,也就是说沿着 -y轴方向是上升的。

这样梯度方向就是 (0.4 , -0.3),想象一下,是位于坐标轴的第四象限,这时沿着x和-y轴的分量都会上升。

和上面的情况一样,距离仍然是 0.5

所以,梯度不仅仅是f(x)在某一点变化最快的方向,而且是上升最快的方向,就如同室内温度的例子中是温度上升最快的方向。

梯度下降法:

由上面的讨论可以知道,梯度是上升最快的方向,那么如果我想下山,下降最快的方向呢,当然是逆着梯度了(将一点附近的曲面近似为平面),这就是梯度下降法,由于是逆着梯度,下降最快,又叫最速下降法。

迭代公式:

r是步长。

牛顿法:

(部分借鉴了:http://blog.csdn.net/luoleicn/article/details/6527049

解方程问题:

牛顿法最初用于求解方程根 f(x) = 0

首先得到一个初始解 x0,

一阶展开:f(x) ≈ f(x0)+(x-x0)f'(x0)

令 f(x0)+(x-x0)f'(x0) = 0

求解得到x,相比于x0,f(x)<f(x0)  (具体证明可以查看数值分析方面的书)

最优化问题中,牛顿法首先则是将问题转化为求 f‘(x) = 0 这个方程的根。

首先得到一个初始解 x0,

一阶展开:f ’(x) ≈ f ‘(x0)+(x-x0)f '’(x0)

令 f ‘(x0)+(x-x0)f '’(x0) = 0

求解得到x,相比于x0,f ‘(x)<f ’(x0)

也可以用上面借鉴的博文(也是wiki)中所说的那种方法,把 delta x 作为一个变量,让 f(x)对其偏导为0 什么的, 反正我记不住。

最小化f(x)之高维情况:


梯度 代替了低维情况中的一阶导

Hessian矩阵代替了二阶导

求逆 代替了除法

wiki上的一个图,可以看到 二者区别,

梯度下降法(绿色)总是沿着当前点最快下降的方向(几乎垂直于等高线),相当于贪心算法。

牛顿法利用了曲面本身的信息,能够更直接,更快的收敛。

A comparison of gradient descent(green) and Newton's method (red) for minimizing a function (with small step sizes). Newton's method uses curvature information to take a more direct route.

高斯牛顿法:

高斯牛顿法实际上是牛顿法的在求解非线性最小二乘问题时的一个特例。

目标函数:

该函数是趋于0的,所以直接使用高维的牛顿法来求解。

迭代公式:

和牛顿法中的最优化问题高维迭代公式一样

目标函数可以简写:

,

梯度向量在方向上的分量:

                  (1)

Hessian 矩阵的元素则直接在梯度向量的基础上求导:

高斯牛顿法的一个小技巧是,将二次偏导省略,于是:

(2)

将(1)(2)改写成 矩阵相乘形式:

其中 Jr 是雅克比矩阵,r是 ri 组成的列向量。

代入牛顿法高维迭代方程的基本形式,得到高斯牛顿法迭代方程:

 (wiki上的公式,我觉得分母写错了)

具体推导也可以看wiki

http://en.wikipedia.org/wiki/Gauss%E2%80%93Newton_algorithm#Derivation_from_Newton.27s_method

m ≥ n 是必要的,因为不然的话,JrTJr肯定是不可逆的(利用rank(A'A) = rank(A))

若m=n:

拟合问题中:

由于Jf = -Jr

故用 Jf而不是Jr来表示迭代公式:

normal equations(法方程):

delta实际是一个法方程,法方程是可以由方程推过来的,那么这个过程有什么意义呢?

其实高斯牛顿法可以利用一阶泰勒公式直接推导(直接当成解方程问题,而不是最优化问题,绕过求解H的过程):

迭代之后的值:

目标近似变成:

,

求解 delta 的过程实际就是法方程的推导过程。

之所以能够直接当做解方程问题,是因为目标函数的最优值要趋于0.

高斯牛顿法只能用于最小化平方和问题,但是优点是,不需要计算二阶导数。

Levenberg-Marquardt方法:

高斯-牛顿法中为了避免发散,有两种解决方法

1.调整下降步伐:

2.调整下降方向:

时:(这里好像wiki又错了),即方向和梯度方向一样,变成了梯度下降法。

相反,如果λ为0,就变成了高斯牛顿法。

Levenberg-Marquardt方法的好处在于可以调节:

如果下降太快,使用较小的λ,使之更接近高斯牛顿法

如果下降太慢,使用较大的λ,使之更接近梯度下降法

If reduction of S is rapid, a smaller value can be used, bringing the algorithm closer to the Gauss–Newton algorithm, whereas if an iteration gives insufficient reduction in the residual, λ can be increased, giving a step closer to the gradient descent direction.

【math】梯度下降法(梯度下降法,牛顿法,高斯牛顿法,Levenberg-Marquardt算法)的更多相关文章

  1. 梯度下降法、牛顿法、高斯牛顿法、LM最优化算法

    1.梯度下降法 2.牛顿法 3.高斯牛顿法 4.LM算法

  2. 梯度下降法(BGD、SGD)、牛顿法、拟牛顿法(DFP、BFGS)、共轭梯度法

    一.梯度下降法 梯度:如果函数是一维的变量,则梯度就是导数的方向:      如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度 梯度下降法(Gr ...

  3. matlab实现高斯牛顿法、Levenberg–Marquardt方法

    高斯牛顿法: function [ x_ans ] = GaussNewton( xi, yi, ri) % input : x = the x vector of 3 points % y = th ...

  4. 深度拾遗(01) - 梯度爆炸/梯度消失/Batch Normal

    什么是梯度爆炸/梯度消失? 深度神经网络训练的时候,采用的是反向传播方式,该方式使用链式求导,计算每层梯度的时候会涉及一些连乘操作,因此如果网络过深. 那么如果连乘的因子大部分小于1,最后乘积的结果可 ...

  5. SIGAI机器学习第二十三集 高斯混合模型与EM算法

    讲授高斯混合模型的基本概念,训练算法面临的问题,EM算法的核心思想,算法的实现,实际应用. 大纲: 高斯混合模型简介实际例子训练算法面临的困难EM算法应用-视频背景建模总结 高斯混合模型简写GMM,期 ...

  6. 高斯混合模型的EM算法

    高斯混合模型的EM算法 混合高斯模型 高斯混合模型的概率分布可以写成多个高斯分布的线形叠加,即 \[ p(\mathbf x) = \sum_{k=1}^{K}\pi_k\mathcal N(\mat ...

  7. Python 高斯坐标转经纬度算法

    # 高斯坐标转经纬度算法# B=大地坐标X# C=大地坐标Y# IsSix=6度带或3度带def GetLatLon2(B, C,IsSix): #带号 D = math.trunc(C / 1000 ...

  8. matlab练习程序(高斯牛顿法最优化)

    计算步骤如下: 图片来自<视觉slam十四讲>6.2.2节. 下面使用书中的练习y=exp(a*x^2+b*x+c)+w这个模型验证一下,其中w为噪声,a.b.c为待解算系数. 代码如下: ...

  9. logistic growth model . 求解方法 (高斯牛顿法)

    https://www.stat.tamu.edu/~jnewton/604/chap4.pdf http://www.metla.fi/silvafennica/full/sf33/sf334327 ...

随机推荐

  1. MUI框架之输入框Input

    input输入框的官方api文档:http://dev.dcloud.net.cn/mui/ui/#input 一.输入框类型 输入框的类型是根据type来决定是普通输入框还是密码框,搜索框等类型 & ...

  2. git 拉取和获取 pull 和 fetch 区别

    使用Git  直接提交的话   直接 push 获取最新版本  有两种  拉取 和 获取 pull 和 fetch git  pull     从远程拉取最新版本 到本地  自动合并 merge   ...

  3. 清除数据库表、外键、存储过程SQL

    1.删除所有外键 )    begin         exec(@c1)        fetchnextfrom c1 into@c1    endclose c1deallocate c1 2. ...

  4. 利用HTTP Cache来优化网站

    原文地址: http://www.cnblogs.com/cocowool/archive/2011/08/22/2149929.html 对于网站来说,速度是第一位的.用户总是讨厌等待,面对加载的V ...

  5. Protocol Buffer Basics: C#

    Protocol Buffer 基础知识:c#    原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial   ...

  6. Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式

    昨天,领导安排去新服务器上部署项目,给了我数据库地址,服务名称,端口,用户名和密码.结果数据库一直连接不上,日志中的错误提示是监听未找到SID,我才明白原来我jdbc.properties中需要的是S ...

  7. YII框架分析笔记2:组件和事件行为管理

    Yii是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.CComponent几乎是所有类的基类,它控制着组件与事件的管理,其方法与属性如下,私有变量$_e数据存放事件(evnet,有些 ...

  8. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 解决

    ERROR - No operations allowed after connection closed. 2011-12-07 11:36:09 - ERROR - query failed or ...

  9. Android之仿iphone抖动效果

    转自:http://blog.csdn.net/long33long/article/details/7693671 布局文件: <?xml version="1.0" en ...

  10. 在SQLite中使用事务

    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚 ...