红色石头的个人网站:redstonewill.com

什么是梯度?

对于梯度下降算法(Gradient Descent Algorithm),我们都已经很熟悉了。无论是在线性回归(Linear Regression)、逻辑回归(Logistic Regression)还是神经网络(Neural Network)等等,都会用到梯度下降算法。我们先来看一下梯度下降算法的直观解释:

假设我们位于黄山的某个山腰处,山势连绵不绝,不知道怎么下山。于是决定走一步算一步,也就是每次沿着当前位置最陡峭最易下山的方向前进一小步,然后继续沿下一个位置最陡方向前进一小步。这样一步一步走下去,一直走到觉得我们已经到了山脚。这里的下山最陡的方向就是梯度的负方向。

首先理解什么是梯度?通俗来说,梯度就是表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在当前位置的导数。

∇=df(θ)dθ∇=df(θ)dθ

\nabla=\frac{df(\theta)}{d\theta}

上式中,θθ\theta是自变量,f(θ)f(θ)f(\theta)是关于θθ\theta的函数,θθ\theta表示梯度。

梯度下降算法

如果函数f(θ)f(θ)f(\theta)是凸函数,那么就可以使用梯度下降算法进行优化。梯度下降算法的公式我们已经很熟悉了:

θ=θ0−η⋅∇f(θ0)θ=θ0−η⋅∇f(θ0)

\theta=\theta_0-\eta\cdot\nabla f(\theta_0)

其中,θ0θ0\theta_0是自变量参数,即下山位置坐标,ηη\eta是学习因子,即下山每次前进的一小步(步进长度),θθ\theta是更新后的θ0θ0\theta_0,即下山移动一小步之后的位置。

梯度下降算法的公式非常简单!但是”沿着梯度的反方向(坡度最陡)“是我们日常经验得到的,其本质的原因到底是什么呢?为什么局部下降最快的方向就是梯度的负方向呢?也许很多朋友还不太清楚。没关系,接下来我将以通俗的语言来详细解释梯度下降算法公式的数学推导过程。

一阶泰勒展开式

这里需要一点数学基础,对泰勒展开式有些了解。简单地来说,泰勒展开式利用的就是函数的局部线性近似这个概念。我们以一阶泰勒展开式为例:

f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)

f(\theta)\approx f(\theta_0)+(\theta-\theta_0)\cdot\nabla f(\theta_0)

不懂上面的公式?没有关系。我用下面这张图来解释。

凸函数f(θ)f(θ)f(\theta)的某一小段[θ0,θ][θ0,θ][\theta_0,\theta]由上图黑色曲线表示,可以利用线性近似的思想求出f(θ)f(θ)f(\theta)的值,如上图红色直线。该直线的斜率等于f(θ)f(θ)f(\theta)在θ0θ0\theta_0处的导数。则根据直线方程,很容易得到f(θ)f(θ)f(\theta)的近似表达式为:

f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)

f(\theta)\approx f(\theta_0)+(\theta-\theta_0)\cdot\nabla f(\theta_0)

这就是一阶泰勒展开式的推导过程,主要利用的数学思想就是曲线函数的线性拟合近似。

梯度下降数学原理

知道了一阶泰勒展开式之后,接下来就是重点了!我们来看一下梯度下降算法是如何推导的。

先写出一阶泰勒展开式的表达式:

f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)

f(\theta)\approx f(\theta_0)+(\theta-\theta_0)\cdot\nabla f(\theta_0)

其中,θ−θ0θ−θ0\theta-\theta_0是微小矢量,它的大小就是我们之前讲的步进长度ηη\eta,类比于下山过程中每次前进的一小步,ηη\eta为标量,而θ−θ0θ−θ0\theta-\theta_0的单位向量用vvv表示。则θ−θ0" role="presentation" style="position: relative;">θ−θ0θ−θ0\theta-\theta_0可表示为:

θ−θ0=ηvθ−θ0=ηv

\theta-\theta_0=\eta v

特别需要注意的是,θ−θ0θ−θ0\theta-\theta_0不能太大,因为太大的话,线性近似就不够准确,一阶泰勒近似也不成立了。替换之后,f(θ)f(θ)f(\theta)的表达式为:

f(θ)≈f(θ0)+ηv⋅∇f(θ0)f(θ)≈f(θ0)+ηv⋅∇f(θ0)

f(\theta)\approx f(\theta_0)+\eta v\cdot\nabla f(\theta_0)

重点来了,局部下降的目的是希望每次θθ\theta更新,都能让函数值f(θ)f(θ)f(\theta)变小。也就是说,上式中,我们希望f(θ)<f(θ0)f(θ)<f(θ0)f(\theta)。则有:

f(θ)−f(θ0)≈ηv⋅∇f(θ0)<0f(θ)−f(θ0)≈ηv⋅∇f(θ0)<0

f(\theta)-f(\theta_0)\approx\eta v\cdot\nabla f(\theta_0)

因为ηη\eta为标量,且一般设定为正值,所以可以忽略,不等式变成了:

v⋅∇f(θ0)<0v⋅∇f(θ0)<0

v\cdot\nabla f(\theta_0)

上面这个不等式非常重要!vvv和∇f(θ0)" role="presentation" style="position: relative;">∇f(θ0)∇f(θ0)\nabla f(\theta_0)都是向量,∇f(θ0)∇f(θ0)\nabla f(\theta_0)是当前位置的梯度方向,vvv表示下一步前进的单位向量,是需要我们求解的,有了它,就能根据θ−θ0=ηv" role="presentation" style="position: relative;">θ−θ0=ηvθ−θ0=ηv\theta-\theta_0=\eta v确定θθ\theta值了。

想要两个向量的乘积小于零,我们先来看一下两个向量乘积包含哪几种情况:

AAA和B" role="presentation" style="position: relative;">BBB均为向量,αα\alpha为两个向量之间的夹角。AAA和B" role="presentation" style="position: relative;">BBB的乘积为:

A⋅B=||A||⋅||B||⋅cos(α)A⋅B=||A||⋅||B||⋅cos(α)

A\cdot B=||A||\cdot||B||\cdot cos(\alpha)

||A||||A||||A||和||B||||B||||B||均为标量,在||A||||A||||A||和||B||||B||||B||确定的情况下,只要cos(α)=−1cos(α)=−1cos(\alpha)=-1,即AAA和B" role="presentation" style="position: relative;">BBB完全反向,就能让AAA和B" role="presentation" style="position: relative;">BBB的向量乘积最小(负最大值)。

顾名思义,当vvv与∇f(θ0)" role="presentation" style="position: relative;">∇f(θ0)∇f(θ0)\nabla f(\theta_0)互为反向,即vvv为当前梯度方向的负方向的时候,能让v⋅∇f(θ0)" role="presentation" style="position: relative;">v⋅∇f(θ0)v⋅∇f(θ0)v\cdot\nabla f(\theta_0)最大程度地小,也就保证了vvv的方向是局部下降最快的方向。

知道v" role="presentation" style="position: relative;">vvv是∇f(θ0)∇f(θ0)\nabla f(\theta_0)的反方向后,可直接得到:

v=−∇f(θ0)||∇f(θ0)||v=−∇f(θ0)||∇f(θ0)||

v=-\frac{\nabla f(\theta_0)}{||\nabla f(\theta_0)||}

之所以要除以∇f(θ0)∇f(θ0)\nabla f(\theta_0)的模||∇f(θ0)||||∇f(θ0)||||\nabla f(\theta_0)||,是因为vvv是单位向量。

求出最优解v" role="presentation" style="position: relative;">vvv之后,带入到θ−θ0=ηvθ−θ0=ηv\theta-\theta_0=\eta v中,得:

θ=θ0−η∇f(θ0)||∇f(θ0)||θ=θ0−η∇f(θ0)||∇f(θ0)||

\theta=\theta_0-\eta\frac{\nabla f(\theta_0)}{||\nabla f(\theta_0)||}

一般地,因为||∇f(θ0)||||∇f(θ0)||||\nabla f(\theta_0)||是标量,可以并入到步进因子ηη\eta中,即简化为:

θ=θ0−η∇f(θ0)θ=θ0−η∇f(θ0)

\theta=\theta_0-\eta\nabla f(\theta_0)

这样,我们就推导得到了梯度下降算法中θθ\theta的更新表达式。

总结

我们通过一阶泰勒展开式,利用线性近似和向量相乘最小化的思想搞懂了梯度下降算法的数学原理。也许你之前很熟悉梯度下降算法,但也许对它的推导过程并不清楚。看了本文,你是否有所收获呢?

更多机器学习资源,请关注公众号:AI有道(ID:redstonewill)

为什么局部下降最快的方向就是梯度的负方向?相关推荐

  1. 【直观理解】为什么梯度的负方向是局部下降最快的方向?

    推荐阅读时间:8min~15min 主要内容: 为什么梯度的负方向是局部下降最快的方向? 刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝 ...

  2. 梯度反方向是函数值局部下降最快的方向

    很多机器学习的训练算法都是利用梯度下降,朝着梯度的反方向变动,函数值下降最快. 导数 导数可以表示函数曲线上的切线斜率. 除了切线的斜率,导数还表示函数在该点的变化率. 导数代表了在自变量变化趋于无穷 ...

  3. 函数的梯度方向和切线方向_为什么梯度反方向是函数值局部下降最快的方向?...

    刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝着梯度的反方向变动,函数值下降最快,但是究其原因的时候,很多人都表达不清楚.所以我整理出自 ...

  4. [深度学习]为什么梯度反方向是函数值下降最快的方向?

    为什么梯度反方向是函数值下降最快的方向 1. 版本一用泰勒公式展开式解释 1.1. 什么是梯度? 1.2 梯度下降算法 1.3 一阶泰勒展开式 1.4 梯度下降数学原理 1.5总结 2.版本二用方向导 ...

  5. 在梯度下降法中,为什么梯度的负方向是函数下降最快的方向?

    1.问题描述 第一次接触这个问题是在大一暑假的小学期项目上,我们组的课题是一个优化问题,其中一个小问题就是证明为什么梯度的负方向是函数下降的最快方向.(全程用法语写的论文233)当时没有多大感触,后来 ...

  6. 为什么梯度反方向是函数下降最快的方向

    转载自  为什么梯度反方向是函数下降最快的方向 为什么梯度反方向是函数下降最快的方向? 刚接触梯度下降这个概念的时候,是在学习机器学习算法的时候,很多训练算法用的就是梯度下降,然后资料和老师们也说朝着 ...

  7. 梯度下降法中为什么梯度的反方向是函数下降最快的方向?

    梯度下降法中为什么梯度的反方向是函数下降最快的方向? 梯度是个向量,函数沿梯度方向具有最大的变化率.是因为函数在这个方向具有最大的变化率,所以冠以梯度这一概念,所以要搞清楚的是,怎么在无数个方向导数中 ...

  8. 梯度的负方向是损失函数下降最快的方向

    <为什么梯度的负方向是损失函数下降最快的方向>   之前从来没有考虑过这个问题如何证明,因为函数某点处的梯度作为一个向量它自身就是指向着某点处变化最大的方向的,所以梯度的负方向肯定是下降最 ...

  9. 为什么说梯度的反方向是函数下降最快的方向

        梯度在机器学习和深度学习中是一个高频词汇,弄懂梯度的概念对梯度下降,反向传播的理解有很大帮助.这里我根据个人理解,对梯度的反方向是函数下降最快的方向这一观点进行解释.限于作者水平,难免有错误之 ...

最新文章

  1. Entity Framework中的Migrations
  2. Excel 中使用数据透视表 Pivot Table
  3. IOS项目之弹出动画二
  4. intellij idea_IntelliJ IDEA内部设计
  5. Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别
  6. Linux中重定向及管道,Linux中重定向及管道
  7. jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)
  8. c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法
  9. 25% 的开发者认为 Rust 是最佳替代,最新 Go 开发者调查报告出炉
  10. 离开中国多年后,Google 搜索想回来了!
  11. 【渝粤教育】国家开放大学2018年春季 0630-22T环境法学 参考试题
  12. 利用C++不使用递归,循环和goto,打印1到100 的某一答案分析
  13. 如何撰写专利说明书?
  14. 程序员必备的八大排序算法
  15. java打造手机远程控制电脑之详细教程
  16. Zap之日志记录器选择
  17. 我的世界服务器修改空岛范围,我的世界空岛指令权限大全 | 手游网游页游攻略大全...
  18. idea怎样创建jsp文件
  19. 神舟精盾 t97 键盘背光灯如何设置亮的时间
  20. java环境变量classpath的作用_JAVA环境变量中 classpath、path、JAVA_HOME的作用

热门文章

  1. Mixly第三方用户库开发Arduino UNO使用EMW3080连接阿里云
  2. U盘中毒了丢失文件怎么办
  3. 同样取整,TRUNC函数与INT函数的有什么区别?
  4. dedecms织梦后台系统用户管理授权栏目BUG修正
  5. 2019年8月23日 星期五(韩天峰的swoole)
  6. java muti实现图片上传_MutiFileUpload.java 多文件上传
  7. 大型复杂项目集管理之二——项目集治理
  8. 移动硬盘文件夹不见了怎么办?
  9. 解决mysql每天12点的dos弹框
  10. mes系统故障_mes系统实施失败是什么原因?