多图预警

本文讲你肯定能懂的机器学习多维极值求解,主要讲梯度下降和牛顿法的区别应该能够完美的回答题主的问题

事先说明

本文面向学习过高等数学统计学和线性代数基础知识的本科生,并假设读者拥有基本的矩阵运算和求导运算的相关知识,类似梯度,方向导数、Hessian Matrix这些东西不懂也没关系,我会用尽可能通俗的语言说明运算中的意义。

那么从最简单的开始。

梯度下降算法

梯度是个啥?我想最开始接触梯度的各位是在方向导数那一章接触这一概念的,如果老师没怎么讲的话可能有些人还不知道梯度是个向量。当你学梯度的时候,所有的概念全都是在二元函数下的,well,也写想象力不是很丰富的同学可能不知道这是个啥。来,我们降维先。

多维条件下是曲面对函数的一阶偏导数向量,那么在一维条件下梯度会是什么的?显然就木有偏导数了,只有一个东西,当然你也可以把它写成向量的形式,就是一个导数,只不过现在变成一维的了,所以方向只有俩,向左和向右。值为正的时候向右,值为负的时候向左,值大值小不影响方向只影响距离。

在二维条件下,因为有了两个偏导数,所以这个向量能表示一圈。如果你以前看过些文章或者视频或者什么ppt之类的东西,大概你会听说一种说法:“梯度是曲面中最陡峭的方向,这个方向是下降最快的方向。”实际上这种说法是不准确的,从一维的角度来看,“梯度”其实是上升最快的方向,比如

处的导数是1,方向向右,这个方向函数是增长的。同样二维也是如此。只不过大部分迭代公式中在梯度的前面会加一个负号,比如这个

。所以也就直接认为它代表了下降最快的方向了。

直观上,你可以理解为,梯度就是一个和曲面等高线垂直的法线,冲着增高的那边。就像下图:

那么它相反的方向就是下降的方向啦,函数的极值点导数都是0的,也就是说,你沿着梯度方向一直走,如果最终收敛到一个点,那肯定就是一个极值点,如果不收敛,说明可能不存在极值点哈(这里因为有步长的涉及,在求解的时候会遇到明明有极值点却没有收敛的问题,后面会提到)。

举个例子,在一维下用梯度下降算法求解极值点的问题。这里我先举一个方便验算的例子,方便大家理解。

比如方程

求解极值点。当然你口算都能算出来,不要急着算结果,来理解一下梯度能干啥。

一阶导

的时候我们开始迭代,沿着下降最快的方向左边一点一点移动。迭代公式

这里

就是步长,用来调节每一次移动的距离,你也可能听过一些

不能过大也不能过小的看起来只能靠经验的废话。如果你是刚刚入门,可能写点程序,然后不断试,但是实际上较优的

也是可以算的,只不过那又是另一门带有好多论文的学科了。

不同的

得到不一样的迭代效果,收敛或者震荡收敛,周期震荡或者直接发散,但是有的时候,算一遍

很费劲啊!这里例子简单,要是碰到TB级的数据那真的是要死了。这还能去试?这里简单的说一下怎么设置

,首先你要确定x是收敛的。所以公式

可以写成

为了收敛,其中

,然后你就知道

了。

实际上

如果控制在

之间会收敛更快,因为震荡收敛总会造成一些重复计算。

二维上的梯度下降能干啥呢?

还是举一个简单的例子,这里直接连数据都是最简单的。你有两个点(4,4),(6,5),你想画一条线使得线和两个点之间的距离平方和最小,当然你也可以口算出来,但是我们依然是为了看一下作用,直接写公式对于一些人来说真的会蒙。

设直线的方程为

目标函数

偏导数

迭代公式

同样这里可以计算一下

的范围

对于k

然后

得到

同样如果在不允许震荡的情况下

对于b

这里求得允许

并且在

区间内不会震荡,梯度计算方向在二维曲面震荡起来长啥样啊。来来来画个图。开始震荡的部分我想我得给他个特写。

不过瘾?来看这个

大致知道啥意思就行了哈。

在不震荡的情况下就显得特别简洁了。一条线走回去。

当然教科书上数学书上肯定不会这么写例子,为了公式的简洁,最后改为:

对于已知的一系列点

目标函数

其中的

就是我们上面写的

了,

则表示所有参数的集合。咦?公式多了个

是哪来的?在这里实际上这个值是多少都无所谓,因为两个偏导数都带着这个

不影响梯度方向,只影响步长,而步长又可以由

调节,我们可以理解为,加了它,导数写起来好看^_^。就像下面这样。

迭代公式

就是上面写到的

一个列向量

牛顿法

提到牛顿法的时候,你可能在小的时候听说过,一个用来迭代求零点的方法,稍微提一下。

如果你要求解

小学初中的时候你可能知道随便取一个大于0的数和一个小于0的数,然后不断地二分得到逼近于0的点,后来你可能知道这个利用了零点定理。你可以写一个同样的方程

的值。取

然后不断的试值,唔~~还是来画图吧。

你也可以看到他们的迭代过程,当然这个不叫牛顿法,这个叫二分法,比较low哈,看到没,震荡了,震荡收敛慢。

讲牛顿法的时候,你可能还要明确一个概念

的区别。前者是切线带来的高度差,后者是函数上的高度差,只有当

趋近于0的时候他俩才近似。而牛顿法就是用切线来快速逼近零点的,不会震荡呦,画图吧先。

看起来两步就收敛了啊,好厉害,怎么做到不震荡的呢它?

因为每一步迭代移动切线与x轴交叉点的距离

这个距离怎么算?可能你已经明白了

,这里

就是该点的一阶导数。因此迭代公式如下:

没错就是这么简单。

这里顺带一提,对于不同的方程起始点的选择也会影响迭代次数,如果有兴趣的话可以读一下这篇文章,看一下神奇的0x5f375a86,2次迭代求解,这里读两次不读二次^_^

那牛顿法和极值求解有关系?看起来牛顿法只能求零点啊? Naive~~,一阶导零点不就是函数的极值或者驻点?

算起来更简单,迭代公式如下

文章是用来解释高维极值求解的,如果你读到这里还是饶有兴致的话,那么恭喜你,你的高数肯定90+,接下来要上干货了。

对于高维函数,用牛顿法求极值也是这个形式,只不过这里的

都变成了矩阵和向量。而且你也可以想到,高维函数二阶导有多个,写成矩阵的形式就像这样

这个矩阵就是传说中的Hessian矩阵,不是什么拼音的简写。

同样

就变成了对所有参数的偏导数组成的向量

迭代公式

其中

为Hessian 矩阵的逆

还是以上面的例子解,对就是只有两个点求直线的那个,这次我们把目标函数的

加上

迭代公式

来看一下效果,看起来直接一步到位啊!!!所以牛顿法求解你们也应该知道多厉害了。

难道是我初始点选的就比较接近答案?换一个大一点的(100,100),依然非常快!

这么快的原因,可能跟方程有关,换了其他方程也许就不这样了。当然你读到这里也许会迫不及待的去找些自己想分析的数据,计算些参数,如果数据量少,几百个,没问题,几万个,还撑得住,要是直接从统计局或者人口普查中进行分析的话,算一个

可能都很慢,而且数超大。

简单的解决办法,有一种叫做批迭代的方法,不管是在梯度计算极值还是在牛顿计算极值上都是可行的,就是假设失去大部分点对准确度没有太大的影响,比如说3个在一条直线上的点,去掉一个也没什么关系,最后反正还是会拟合成同一个参数。批迭代就是在众多的点中随机抽取一些,进行迭代计算,再随机抽取一些再进行迭代。迭代的路径可能不完美,但是最终还是会找到我们想要的答案。

当然还有其他更帅的解决方法,祝如DFP,BFGS,Broyden。限于篇幅,下回再讲,私信知乎账号最爱麦丽素可以得到部分计算代码。

扩展阅读

欢迎各类奇葩怪咖加我微信FavorMylikes,嘻~~~

python实现牛顿法和梯度下降法求解对率回归_最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?...相关推荐

  1. python广告点击率预测_推荐系统中的点击率预估 – Advertising Recommendation

    推荐系统的框架模式大致是:多种召回策略(触发层),一种融合排序策略(排序层),也可认为两阶段排序模型[33]: 召回策略方法繁多(例如常见的协同过滤中的item-based,user-based,以及 ...

  2. 周志华西瓜书3.4题——用十折交叉验证法和留一法估计对率回归的误差

    周志华西瓜书3.4题. 本文所编写的代码均使用python3.7进行调试,依靠的sklearn进行的实验. 第一步,导入iris数据集,数据集使用sklearn包里面自带的. from sklearn ...

  3. 神经网络中的常用算法-梯度下降算法的优化

    一.概述 梯度下降法(Gradient descent )是一个一阶最优化算法,通常也称为最陡下降法 ,要使用梯度下降法找到一个函数的局部极小值 ,必须向函数上当前点对应梯度(或者是近似梯度)的反方向 ...

  4. 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例

    用matlab实现最速下降法,牛顿法和共轭梯度法求解实例 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验的题目和要求 1.所属 ...

  5. 什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么?

    什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么? 牛顿法的最初提出是用来求解方程的根的.对于最优化问题,其极值 ...

  6. 梯度下降法、牛顿法和拟牛顿法——机器学习面试

    梯度下降.牛顿.拟牛顿原理 梯度下降   牛顿法 为Hesse矩阵  参数更新的方程: 每一次迭代的更新方向都是当前点的牛顿方向,步长固定为1.每一次都需要计算一阶导数以及Hesse矩阵的逆矩阵,对于 ...

  7. 机器学习优化算法中梯度下降,牛顿法和拟牛顿法的优缺点详细介绍

    1.梯度下降法 梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的. 梯度下降法的优化思想:用当前位置负梯度方向作为搜 ...

  8. 【python】牛顿迭代法求解多元函数的最小值--以二元函数为例

    目录 一元函数到多元函数的牛顿迭代法 python代码实现过程 一元函数到多元函数的牛顿迭代法 参考 多元函数的牛顿迭代和高斯牛顿法怎么推导? 一元函数的牛顿迭代公式: 多元函数的牛顿迭代公式: 其中 ...

  9. 梯度类算法原理:最速下降法、牛顿法和拟牛顿法

    文章目录 算法结构 最速下降法 牛顿法 拟牛顿法 算法结构 梯度类算法有很多,本文主要学习最常见的3个算法:最速下降法.牛顿法和拟牛顿法.算法名称虽多,但是他们的算法结构都是一样的,可以描述为 (1) ...

最新文章

  1. pyqt创建窗口没有句柄_Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建...
  2. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
  3. 搭建hue遇到的错误 Couldn't find log associated with operation handle: OperationHandle
  4. Linux awk 命令 说明
  5. sh里的变量 $0 $1 $$ $#
  6. burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
  7. android上如何写配置文件
  8. 软件包管理器 RPM 升级软件包过程分析
  9. 挖掘城市ip_抖in杭州嘉年华,原来城市营销还能这么玩!
  10. java语言情话_程序员的浪漫:用 java 实现每天给对象法发情话
  11. docker for mac的JSON配置文件中的hosts项修改后无法生效
  12. Python-Flask实现电影系统管理后台
  13. 500内部privoxy错误_【热议】喝崂山啤酒中奖500听,却只能兑换500毫升?!
  14. stack和queue容器
  15. linux监听端口丢失,查看 linux 端口 监听
  16. 计算机考研408高分复习规划-如何复习408才能得高分
  17. hdu 5025 Saving Tang Monk(bfs+状态压缩)
  18. 在腾讯轻量云上搭建 CS:GO 服务器
  19. 计算机界面无法全部显示,电脑屏幕不能完整显示软件界面怎么处理
  20. PureMVC游戏框架解析 理解其中包含的设计模式

热门文章

  1. mysql删除一天前数据_MYSQL如何删除三天前的数据(两个时间比较函数)
  2. 知识分享之Golang——函数的基本用法
  3. Docker基础:Docker Desktop community的手动更新方法
  4. jaudiotagger获取MP3文件信息及封面图片
  5. 链路带宽测试工具iperf使用
  6. 达尔豪西大学 计算机科学,达尔豪西大学计算机科学本科专业.pdf
  7. 图论 物联网_图论算法-和图论算法相关的内容-阿里云开发者社区
  8. 微生物所系统调查我国禾谷类作物镰刀菌病害,并更新镰刀菌属基因组生命树...
  9. KindEditor介绍
  10. WebService客户端几种实现方式