原文: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. Serial Wire Debugging the STM32 via the Bus Pirate

    Serial Wire Debugging the STM32 via the Bus Pirate 2 October 2010 Step 1 - The Bus Pirate Step 2 - D ...

  2. 使用cwRsync实现windows下文件定时同步

    1.参考文献: 使用cwRsync实现windows下文件定时同步(备份) 文件同步工具CwRsync的使用方法及常用命令详解 2.背景: 当前的SCADA架构中,有1台Server,5台FE,还有1 ...

  3. c#调用刀片小票打印机

    public static bool Print(int orderId, string orderTime) { bool b = true; string cut = ((char)29).ToS ...

  4. [Go] 如何正确地 抛出 错误 和 异常(error/panic/recover)?

    序言 错误 和 异常 是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从表面上看,一切皆错误的思路 ...

  5. [Go] Cookie 使用简介

    Golang 的 Cookie web 开发免不了要和 cookie 打交道.Go 的 http 库也提供了 cookie 的相关操作. type Cookie struct { Name strin ...

  6. stanford CS DB 课程 数据库系统实现

    http://infolab.stanford.edu/db_pages/classes.html   CS145: Introduction to Databases   CS245: Databa ...

  7. swift笔记(二) —— 运算符

    基本运算符 Swift支持大部分的标准C语言的操作符,而且做了一些改进,以帮助开发人员少犯低级错误,比方: 本该使用==的时候,少写了个=, if x == y {-} 写成了 if x = y {- ...

  8. mormot事务控制

    mormot事务控制 mormot对所有的数据库类型事务都是一样处理方法gProps.SharedTransaction(1, transBegin);try gProps.SharedTransac ...

  9. 转:iOS 越狱的原理是什么

         本文的主角是一个苦逼的程序员,最近打算开始研究越狱破解,因为打算做类似一类越狱插件的东西给自己使用.所以就了解了一下越狱破解的一个原理过程. 每个手机都会有手机系统,苹果也不例外.每个手机系 ...

  10. 【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署

    ==================================================================================================== ...