梯度上升与梯度下降

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

梯度下降法定义

(维基百科)梯度下降法,基于这样的观察:如果实值函数  在点  处可微且有定义,那么函数 在  点沿着梯度相反的方向  下降最快。

因而,如果

                        

对于  为一个够小数值时成立,那么 

考虑到这一点,我们可以从函数  的局部极小值的初始估计  出发,并考虑如下序列  使得

                       

因此可得到

  

如果顺利的话序列  收敛到期望的极值。注意每次迭代步长  可以改变。

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

梯度下降法几何解释:

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

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

梯度上升法几何解释:

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

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

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

时间: 2024-11-09 12:07:58

梯度上升与梯度下降的相关文章

对于梯度消失和梯度爆炸的理解

一.梯度消失.梯度爆炸产生的原因 假设存在一个网络结构如图: 其表达式为: 若要对于w1求梯度,根据链式求导法则,得到的解为: 通常,若使用的激活函数为sigmoid函数,其导数: 这样可以看到,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失.若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸. 当然,若对于b求偏导的话,其实也是一个道理:

【深度学习系列】DNN中梯度消失和梯度爆炸的原因推导

DNN中梯度消失和梯度爆炸的原因推导 因为手推涉及很多公式,所以这一截图放出. 原文地址:https://www.cnblogs.com/Elaine-DWL/p/11140917.html

深度学习面试题08:梯度消失与梯度爆炸

目录 梯度消失 梯度爆炸 参考资料 以下图的全连接神经网络为例,来演示梯度爆炸和梯度消失: 梯度消失 在模型参数w都是(-1,1)之间的数的前提下,如果激活函数选择的是sigmod(x),那么他的导函数σ’(x)的值域为(0,0.25],即如下三项的范围都是(0,0.25] 那么w1的导数会有很多(0,0.25]范围的数累乘,就会造成w1的导数很小,这就是梯度消失.梯度消失的后果就是,w1的更新就会很慢,使得神经网络的学习变得很慢. 解决方法:使用relu(x)这样的激活函数,因为他的导函数的值

DL4NLP——神经网络(二)循环神经网络:BPTT算法步骤整理;梯度消失与梯度爆炸

网上有很多Simple RNN的BPTT算法推导.下面用自己的记号整理一下. 我之前有个习惯是用下标表示样本序号,这里不能再这样表示了,因为下标需要用做表示时刻. 典型的Simple RNN结构如下: 图片来源:[3] 约定一下记号: 输入序列 $\textbf x_{(1:T)} =(\textbf x_1,\textbf x_2,...,\textbf x_T)$,每个时刻的值都是一个维数是词表大小的one-hot列向量: 标记序列 $\textbf y_{(1:T)} =(\textbf

梯度弥散与梯度弥散

问题描述 先来看看问题描述. 当我们使用sigmoid funciton 作为激活函数时,随着神经网络hidden layer层数的增加,训练误差反而加大了,如上图所示. 下面以2层隐藏层神经网络为例,进行说明. 结点中的柱状图表示每个神经元参数的更新速率(梯度)大小,有图中可以看出,layer2整体速度都要大于layer1. 我们又取每层layer中参数向量的长度来粗略的估计该层的更新速率,得到下图. 可以看出,layer2的速率都要大于layer1. 然后我们继续加深神经网络的层数. 可以得

梯度消失与梯度爆炸

https://blog.csdn.net/qq_25737169/article/details/78847691 产生消失的梯度问题的原因 先看一个极简单的深度神经网络:每一层都只有一个单一的神经元.如下图: 代价函数C对偏置b1的偏导数的结果计算如下: 先看一下sigmoid 函数导数的图像: 该导数在σ′(0) = 1/4时达到最高.现在,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0 标准差为1 的高斯分布.因此所有的权重通常会满足|wj|<1.从而有wjσ′(zj)

梯度弥散与梯度爆炸

问题描述 先来看看问题描述. 当我们使用sigmoid funciton 作为激活函数时,随着神经网络hidden layer层数的增加,训练误差反而加大了,如上图所示. 下面以2层隐藏层神经网络为例,进行说明. 结点中的柱状图表示每个神经元参数的更新速率(梯度)大小,有图中可以看出,layer2整体速度都要大于layer1. 我们又取每层layer中参数向量的长度来粗略的估计该层的更新速率,得到下图. 可以看出,layer2的速率都要大于layer1. 然后我们继续加深神经网络的层数. 可以得

【转】梯度下降

回归与梯度下降: 回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如locally weighted回归,logistic回归,等等,这个将在后面去讲. 用一个很简单的例子来说明回归,这个例子来自很多的地方,也在很多的open source的软件中看到,比如说weka.大概就是,做一个房屋价值的评估系统,一个房屋的价值来自很多地方,比如说面积.房间的数量(几室几厅).地段.朝向等等,

梯度下降(Gradient Descent)小结

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微积分里面,对多元函数的参数求?偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度.比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(?f/?x, ?f/?y)T,简称grad f(x,y)或者▽f(x,y).对于在点(x0,y0)的具体梯度向量就是(?f/?x0, ?f/?