https://blog.csdn.net/wuaini_1314/article/details/79562400

线性最小二乘问题,我们可以通过理论推导可以得到其解析解,但是对于非线性最小二乘问题,则需要依赖迭代优化的方法,。 
梯度下降主要是从一阶目标函数的一阶导推导而来的,形象点说,就是每次朝着当前梯度最大的方向收敛;二牛顿法是二阶收敛,每次考虑收敛方向的时候,还会考虑下一次的收敛的方向是否是最大(也就是梯度的梯度)。可以参考下图:

红线为牛顿法,绿线为梯度下降。

高斯-牛顿和LM法则主要是针对非线性最小二乘问题提出的解决方案。由于牛顿法需要求解二阶导,也就是hessian matrix,运算量大,不利于实现,,所以通常在牛顿法的基础上用去掉二阶项,用一阶项来近似二阶导,从而保证了计算效率。LM方法,则是由于高斯-牛顿方法在计算时需要保证矩阵的正定性,于是引入了一个约束,从而保证计算方法更具普适性。

1.梯度下降与牛顿法[2] 
梯度下降法: 
梯度是上升最快的方向,那么如果我想下山,下降最快的方向呢,当然是逆着梯度了(将一点附近的曲面近似为平面),这就是梯度下降法,由于是逆着梯度,下降最快,又叫最速下降法。(一句话就是,朝着梯度方向收敛,可以参考梯度的定义)

迭代公式: 
b=a−nablaF(a)b=a−nablaF(a) ,γγ是步长。

牛顿法: 
最优化问题中,牛顿法首先则是将问题转化为求 f‘(x) = 0 这个方程的根。 
首先得到一个初始解 x0, 
一阶展开:f′(x)≈f‘(x0)+(x-x0)f′′(x0)f′(x)≈f‘(x0)+(x-x0)f″(x0) 
令f‘(x0)+(x-x0)f′′(x0)=0f‘(x0)+(x-x0)f″(x0)=0 
求解得到x,相比于x0,f‘(x)<f′(x0)f‘(x)<f′(x0)
总结一下,就是牛顿法对目标函数的一阶导再求导,即可算出收敛的方向。

优缺点: 
梯度法:又称最速下降法,是早期的解析法,收敛速度较慢。 
牛顿法:收敛速度快,但不稳定,计算也较困难。

2.高斯牛顿和LM方法 
推导过程可以参考 
http://blog.csdn.net/zhubaohua_bupt/article/details/74973347 
http://fourier.eng.hmc.edu/e176/lectures/NM/node36.html 
http://blog.csdn.net/dsbatigol/article/details/12448627

需要注意的是 高斯牛顿方法 在求解hessian matrix时 做了一个简化

目标函数可以简写: 
S=∑mi=1r2iS=∑i=1mri2
梯度向量在方向上的分量: 
gj=2∑mi=1ri∂ri∂βjgj=2∑i=1mri∂ri∂βj (1)

Hessian 矩阵的元素则直接在梯度向量的基础上求导: 
Hjk=2∑mi=1(∂ri∂βj∂ri∂βk+ri∂2ri∂βj∂βk).Hjk=2∑i=1m(∂ri∂βj∂ri∂βk+ri∂2ri∂βj∂βk).
高斯牛顿法的一个小技巧是,将二次偏导省略,于是: 
Hjk≈2∑mi=1JijJikHjk≈2∑i=1mJijJik (2)

将(1)(2)改写成 矩阵相乘形式: 
g=2Jr⊤r,H≈2Jr⊤Jr.g=2Jr⊤r,H≈2Jr⊤Jr.
Levenberg-Marquardt方法: 
高斯-牛顿法中为了避免发散,有两种解决方法 
1.调整下降步伐:βs+1=βs+α Δ.0<α<1βs+1=βs+α Δ.0<α<1 
2.调整下降方向:(JTJ+λD)Δ=JTr(JTJ+λD)Δ=JTr
λ→+∞λ→+∞时:Δ/λ→JTrΔ/λ→JTr,即方向和梯度方向一样,变成了梯度下降法。

相反,如果λ为0,就变成了高斯牛顿法。 
Levenberg-Marquardt方法的好处在于可以调节: 
如果下降太快,使用较小的λ,使之更接近高斯牛顿法 
如果下降太慢,使用较大的λ,使之更接近梯度下降法

此外,高斯牛顿法中涉及求逆矩阵的操作,(JTJ)(JTJ) 加入λ 也可以保证该矩阵为一个正定矩阵。

【reference】: 
[1]http://fourier.eng.hmc.edu/e176/lectures/NM/node36.html 【理论推导很完善】 
[2].http://blog.csdn.net/dsbatigol/article/details/12448627

有关梯度下降法: 
http://www.cnblogs.com/shixiangwan/p/7532858.html 
https://www.zhihu.com/question/19723347 
http://www.cnblogs.com/maybe2030/p/5089753.html 
梯度下降与牛顿法: 
https://www.cnblogs.com/shixiangwan/p/7532830.html

---------------------梯度下降法-------------------
梯度的一般解释:
f(x)在x0的梯度:就是f(x)变化最快的方向。梯度下降法是一个最优化算法,通常也称为最速下降法。

假设f(x)是一座山,站在半山腰,往x方向走1米,高度上升0.4米,也就是说x方向上的偏导是 0.4;往y方向走1米,高度上升0.3米,也就是说y方向上的偏导是 0.3;这样梯度方向就是 (0.4 , 0.3),也就是往这个方向走1米,所上升的高度最高。梯度不仅仅是f(x)在某一点变化最快的方向,而且是上升最快的方向;如果想下山,下降最快的方向就是逆着梯度的方向,这就是梯度下降法,又叫最速下降法。

梯度下降法用途:
最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降法是用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。

迭代公式:

其中,λ为步长,就是每一步走多远,这个参数如果设置的太大,那么很容易就在最优值附加徘徊;相反,如果设置的太小,则会导致收敛速度过慢。所以针对这一现象,也有一些相应的改进算法。例如,改进的随机梯度下降算法,伪代码如下:

/*************************************
初始化回归系数为1
重复下面步骤直到收敛

{
对随机遍历的数据集中的每个样本
随着迭代的逐渐进行,减小alpha的值
计算该样本的梯度
使用alpha x gradient来更新回归系数

}
**************************************/

举例说明,定义出多变量线性回归的模型:

Cost function如下:

如果我们要用梯度下降解决多变量的线性回归,则我们还是可以用传统的梯度下降算法进行计算:

梯度下降、随机梯度下降、批量(小批量)梯度下降算法对比:
http://www.cnblogs.com/louyihang-loves-baiyan/p/5136447.html
梯度下降:梯度下降就是上面的推导,要留意,在梯度下降中,对于θ的更新,所有的样本都有贡献,也就是参与调整θ.其计算得到的是一个标准梯度。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦~
随机梯度下降:可以看到多了随机两个字,随机也就是说用样本中的一个例子来近似所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,容易陷入到局部最优解中
批量梯度下降:其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是随机指定一个例子替代样本不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。
------------------------牛顿法------------------------
1、求解方程。
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x0处泰勒展开到一阶,即:f(x) = f(x0)+(x-x0)f'(x0)

求解方程:f(x)=0,即:f(x0)+(x-x0)*f'(x0)=0,求解:x = x1=x0-f(x0)/f'(x0),

利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f'(x0)处只是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f'(x(n)),通过迭代,这个式子必然在f(x*)=0的时候收敛。整个过程如下图:

2、牛顿法用于最优化
在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f'=0的问题,这样求可以把优化问题看成方程求解问题(f'=0)。剩下的问题就和第一部分提到的牛顿法求解很相似了。在极小值估计值附近,把f(x)泰勒展开到2阶形式:

当且仅当 Δx 无线趋近于0,上面的公式成立。令:f'(x+delta(X))=0,得到:

求解:

得出迭代公式:

  从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。

从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

在上面讨论的是2维情况,高维情况的牛顿迭代公式是:

其中H是hessian矩阵,定义为:

高维情况也可以用牛顿迭代求解,但是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度增加,解决这个问题的办法是拟牛顿法(Quasi-Newton methond),po下拟牛顿法的百科简述:

----------------高斯-牛顿迭代法----------------
高斯--牛顿迭代法的基本思想是使用泰勒级数展开式去近似地代替非线性回归模型,然后通过多次迭代,多次修正回归系数,使回归系数不断逼近非线性回归模型的最佳回归系数,最后使原模型的残差平方和达到最小。

①已知m个点:

②函数原型:

其中:(m>=n),

③目的是找到最优解β,使得残差平方和最小:

残差:

④要求最小值,即S的对β偏导数等于0:

⑤在非线性系统中,是变量和参数的函数,没有close解。因此给定一个初始值,用迭代法逼近解:

其中k是迭代次数,是迭代矢量。

⑥每次迭代函数是线性的,在处用泰勒级数展开:

其中:J是已知的矩阵,为了方便迭代,令。

⑦此时残差表示为:

⑧带入公式④有:

化解得:

⑨写成矩阵形式:

⑩所以最终迭代公式为:

(参见公式7)

其中,Jf是函数f=(x,β)对β的雅可比矩阵。

关于雅克比矩阵,可以参见一篇写的不错的博文:http://jacoxu.com/jacobian矩阵和hessian矩阵/,这里只po博文里的雅克比矩阵部分:

关于梯度下降法、牛顿法、高斯-牛顿、LM方法的总结相关推荐

  1. 梯度下降、牛顿法、高斯牛顿L-M算法比较

    本文梳理一下常见的几种优化算法:梯度下降法,牛顿法.高斯-牛顿法和L-M算法,优化算法根据阶次可以分为一阶方法(梯度下降法),和二阶方法(牛顿法等等),不同优化算法的收敛速度,鲁棒性都有所不同.一般来 ...

  2. 牛顿法、梯度下降法、高斯牛顿法、Levenberg-Marquardt算法

    何为梯度? 一般解释: f(x)在x0的梯度:就是f(x)变化最快的方向 举个例子,f()是一座山,站在半山腰, 往x方向走1米,高度上升0.4米,也就是说x方向上的偏导是 0.4 往y方向走1米,高 ...

  3. 经典重读 | 用高斯牛顿的方法来进行IKF的更新步骤

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨泡泡编辑组 来源丨 泡泡机器人SLAM 点击进入->3D视觉工坊学习交流群 标题:The ...

  4. 非线性最小二乘问题的高斯-牛顿算法

    @非线性最小二乘问题的高斯-牛顿算法 非线性最小二乘与高斯-牛顿算法 开始做这个东西还是因为学校里的一次课程设计任务,找遍了全网好像也没有特别好用的,于是就自己写了一个.仅供参考. 首先,介绍下非线性 ...

  5. 【算法系列】非线性最小二乘求解-梯度下降法

    系列文章目录 ·[算法系列]卡尔曼滤波算法 ·[算法系列]非线性最小二乘求解-直接求解法 ·[算法系列]非线性最小二乘求解-梯度下降法 ·[算法系列]非线性最小二乘-高斯牛顿法 ·[算法系列]非线性最 ...

  6. 梯度下降优化算法综述,梯度下降法 神经网络

    梯度下降法是什么? 梯度下降法(英语:Gradientdescent)是一个一阶最优化算法,通常也称为最陡下降法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度 ...

  7. DistBelief 框架下的并行随机梯度下降法 - Downpour SGD

    本文是读完 Jeffrey Dean, Greg S. Corrado 等人的文章 Large Scale Distributed Deep Networks (2012) 后的一则读书笔记,重点介绍 ...

  8. 梯度下降法的不同形式——随机梯度下降法和小批量梯度下降法

    前文介绍了梯度下降法,其每次迭代均需使用全部的样本,因此计算量巨大.就此,提出了基于单个样本的随机梯度下降法(Stochastic gradient descent,SGD)和基于部分样本的小批量梯度 ...

  9. 随机梯度下降法_动量梯度下降法(gradient descent with momentum)

    简介 动量梯度下降法是对梯度下降法的改良版本,通常来说优化效果好于梯度下降法.对梯度下降法不熟悉的可以参考梯度下降法,理解梯度下降法是理解动量梯度下降法的前提,除此之外要搞懂动量梯度下降法需要知道原始 ...

  10. 梯度下降法求解多元线性回归 — NumPy

    梯度下降法求解多元线性回归问题 使用梯度下降法求解一元线性回归的方法也可以被推广到求解多元线性回归问题. 这是多元线性回归的模型: 其中的 X 和 W 都是 m+1 维的向量. 下图为它的损失函数: ...

最新文章

  1. subst将文件夹目录虚拟成虚拟磁盘
  2. angular 命令行项目_Angular命令行界面介绍
  3. R语言rpartb包树回归模型构建:基于前列腺prostate数据集
  4. 一群热爱python运维的精英们!
  5. 架构师课程1-多线程基础
  6. yolact实时分割
  7. python官网下载步骤linux-CentOS 7.* 安装 python3.8.2 步骤
  8. 互联网的尽头是乡村振兴
  9. apache camel_探索Apache Camel Core –文件组件
  10. 7时过2小时是几时_2017最北师大版二年级下册数学第七单元《时、分、秒》过关检测卷...
  11. Hexo+GitHub 快速搭建个人博客(一)---- 基本部署
  12. CImage实现双缓冲最近邻插值
  13. 音视频——Codec初始化及Omx组件创建
  14. python往npy写入数据_Python 存取npy格式数据实例
  15. Kali Linux 基于Easy File Sharing Web Server 6.9 编写漏洞渗透模块 (上)
  16. 写给安卓软件工程师的3条建议,全套教学资料
  17. 病毒+蠕虫+bot+rootkit
  18. 江恩 计算机,在计算机上绘制江恩角度线 (转贴)
  19. 司凤为璇玑抗鸿蒙熔炉,琉璃:结局最惨的是司凤和若玉?而是让人心疼的他,他死的太可惜...
  20. 【开源项目】之健康助手

热门文章

  1. SSM框架02--mybatis(1)
  2. java并发编程实战读书笔记4--生产者消费者模式和队列
  3. 腾讯看点基于 Flink 的实时数仓及多维实时数据分析实践
  4. Glide4.0源码全解析(二),load()背后的故事
  5. C/C++常见面试题整理
  6. vbyone接口引脚定义_FMC接口介绍
  7. docker run -di -p 日志_docker随手笔记第十一节 portainer.io安装使用,比k8s简单
  8. linux 内核挂起 ping,Linux内核安全详解 ping到死复活方法
  9. java 单例模式_谈谈Java中的单例模式
  10. 用计算机探索奥秘规律例题,计算器指法练习题.doc