博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:梯度下降法(上升法)的几何解释
阅读量:5299 次
发布时间:2019-06-14

本文共 1288 字,大约阅读时间需要 4 分钟。

梯度下降法是机器学习和神经网络学科中我们最早接触的之一。但是对于初学者,我们对于这个算法是如何迭代运行的从而达到目的有些迷惑。在这里给出我对这个算法的几何理解,有不对的地方请批评指正!

        梯度下降法定义

        (维基百科)梯度下降法,基于这样的观察:如果实值函数 F(\mathbf{x}) 在点 \mathbf{a} 处且有定义,那么函数 F(\mathbf{x})在 \mathbf{a} 点沿着相反的方向 -\nabla F(\mathbf{a}) 下降最快。

        因而,如果

                        \mathbf{b}=\mathbf{a}-\gamma\nabla F(\mathbf{a})

        对于 \gamma>0 为一个够小数值时成立,那么 F(\mathbf{a})\geq F(\mathbf{b})

        考虑到这一点,我们可以从函数 F 的局部极小值的初始估计 \mathbf{x}_0 出发,并考虑如下序列 \mathbf{x}_0, \mathbf{x}_1, \mathbf{x}_2, \dots 使得

                       \mathbf{x}_{n+1}=\mathbf{x}_n-\gamma_n \nabla F(\mathbf{x}_n),\ n \ge 0.

        因此可得到

  F(\mathbf{x}_0)\ge F(\mathbf{x}_1)\ge F(\mathbf{x}_2)\ge \cdots,

       如果顺利的话序列 (\mathbf{x}_n) 收敛到期望的极值。注意每次迭代步长 \gamma 可以改变。

       

下面图片示例了这一过程,这里假设 F 定义在平面上,并且函数图像是一个形。蓝色的曲线是(),即函数 F 为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的垂直)。沿着梯度下降方向,将最终到达碗底,即函数 F 值最小的点。

梯度下降法几何解释:

       由于我们的任务是求得经验损失 函数的最小值,所以上图的过程实际上是一个“下坡”的过程。在每一个点上,我们希望往下走一步(假设一步为固定值0.5米),使得下降的高度最大,那么我 们就要选择坡度变化率最大的方向往下走,这个方向就是经验损失函数在这一点梯度的反方向。每走一步,我们都要重新计算函数在当前点的梯度,然后选择梯度的 反方向作为走下去的方向。随着每一步迭代,梯度不断地减小,到最后减小为零。这就是为什么叫“梯度下降法”。

       那么,为什么梯度的方向刚好是 我们下坡的反方向呢?为什么我们不是沿着梯度的方向下坡呢?这是因为,只有沿着梯度的反方向,我们才能下坡,否则就是上坡了……举个例子,在y=f(x) 的二维平面上,规定好x轴和y轴的方向后,如果曲线f(x)的值是随着x的增加上升的,那么它在某一点的切线的数值一定是正的。反之,若曲线f(x)的值 是随着x的增加下降的,则它在下降的某一点的切线的数值一定是负数。梯度是方向导数在某一点的最大值,所以其值必然是正数。如果沿着梯度方向走,经验损失 函数的值是增加的……所以,我们要下坡,就必须沿着梯度方向的反方向了。

 

梯度上升法几何解释:

       相对于梯度下降法,还有梯度上升法。(注意减号变成加号了)

                                   

       其基本原理与下降法一致,区别在于:梯度上升法是求函数的局部最大值。因此,对比梯度下降法,其几何意义和很好理解,那就是:算法的迭代过程是一个“上坡”的过程,每一步选择坡度变化率最大的方向往上走,这个方向就是函数在这一点梯度方向(注意不是反方向了)。最后随着迭代的进行,梯度还是不断减小,最后趋近与零。

       有一点我是这样认为的:所谓的梯度“上升”和“下降”,一方面指的是你要计算的结果是函数的极大值还是极小值。计算极小值,就用梯度下降,计算极大值, 就是梯度上升;另一方面,运用上升法的时候参数是不断增加的,下降法是参数是不断减小的。但是,在这个过程中,“梯度”本身都是下降的。

       注:这里的梯度减小指的是梯度的数值大小,不包含方向的正负号。

转载于:https://www.cnblogs.com/1995hxt/p/6399354.html

你可能感兴趣的文章
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>
【NodeJS】http-server.cmd
查看>>
研磨JavaScript系列(五):奇妙的对象
查看>>