梯度是一个向量,是一个n元函数f关于n个变量的偏导数,梯度会指向各点处的函数值下降的方向。更严格的讲,梯度指示的方向是各
点处的函数值减小最多的方向。为何这么说,由于方向导数=cos(\theta)×梯度,而\theta是方向导数的方向和梯度方向的夹角。
因此,全部的降低方向中,梯度方向降低的最多。算法
深度学习中, 神经网络的主要任务是在学习时找到最优的参数(权重和偏置),这个最优参数也就是损失函数最小时的参数。可是,
通常状况下,损失函数比较复杂,参数也不少,没法肯定在哪里取得最小值。因此经过梯度来寻找最小值(或者尽量小的值)的
方法就是梯度法。网络
在处理复杂任务上,深度网络比浅层的网络具备更好的效果。可是,目前优化神经网络的方法都是基于反向传播的思想,即根据损失
函数计算的偏差经过梯度反向传播的方式,指导深度网络权值的更新优化。这样作是有必定缘由的,首先,深层网络由许多非线性层
堆叠而来,每一层非线性层均可以视为是一个非线性函数 (非线性来自于非线性激活函数),所以整个深度网络能够视为是一个复合的非线性多元函数
咱们最终的目的是但愿这个多元函数能够很好的完成输入到输出之间的映射,假设不一样的输入,输出的最优解是 那么,优化深度网络就是为了寻找到合适的权值,知足
取得极小值点,好比最简单的损失函数 :
,假设损失函数的数据空间是下图这样的,
咱们最优的权值就是为了寻找下图中的最小值点,对于这种数学寻找最小值问题,采用梯度降低的方法再适合不过了。所以,对于神经
网络这种参数式的方法,使用梯度更新能够用来寻找最优的参数。函数
梯度降低的基本过程就和下山的场景很相似。首先,咱们有一个可微分的函数。这个函数就表明着一座山。咱们的目标就是找到这个
函数的最小值,也就是山底。根据以前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,而后沿着此方向向下走,对
应到函数中,就是找到给定点的梯度 ,而后朝着梯度相反的方向,就能让函数值降低的最快!由于梯度的方向就是函数之变化最快的
方向(在后面会详细解释),因此,咱们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值。
学习
梯度降低的科学解释:
此公式的意义是:J是关于Θ的一个函数,咱们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先咱们先肯定前
进的方向,也就是梯度的反向,而后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!优化
疑问点:
一、α是什么含义?
α在梯度降低算法中被称做为学习率或者步长,意味着咱们能够经过α来控制每一步走的距离,不要走太快,步长太大会错过了最低点。
同时也要保证不要走的太慢,过小的话半天都没法收敛。因此α的选择在梯度降低法中每每是很重要的!α不能太大也不能过小,过小
的话,可能致使迟迟走不到最低点,太大的话,会致使错过最低点!
二、为何要梯度要乘以一个负号?
梯度前加一个负号,就意味着朝着梯度相反的方向前进!咱们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而咱们需
要朝着降低最快的方向走,天然就是负的梯度的方向,因此此处须要加上负号。.net
梯度降低存在的问题:
一、参数调整缓慢
二、可能收敛于局部最小值
3d
深层网络角度:在深层网络中,因为网络过深,若是初始获得的梯度太小,或者传播途中在某一层上太小,则在以后的层上获得的
梯度会愈来愈小,即产生了梯度消失。梯度爆炸也是一样的。不一样的层学习的速度差别很大,表现为网络中靠近输出的层学习的状况很
好,靠近输入的层学习的很慢,有时甚至训练了好久,前几层的权值和刚开始随机初始化的值差很少。所以,梯度消失、爆炸,其根本
缘由在于反向传播训练法则,本质在于方法问题
激活函数角度:计算权值更新信息的时候须要计算前层偏导信息,所以若是激活函数选择不合适,好比使用sigmoid,梯度消失就
会很明显了,缘由看下图
左图是sigmoid的损失函数图,右边是其倒数的图像,若是使用sigmoid做为损失函数,其梯度是不可能超过0.25的,这样通过链式求
导以后,很容易发生梯度消失,sigmoid函数数学表达式为:
同理,tanh做为损失函数,它的导数图以下,能够看出,tanh比sigmoid要好一些,可是它的倒数仍然是小于1的。tanh数学表达为:orm
及采起无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出做为输入,而本层隐节点的输出做为下一
层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。此思想
至关因而先寻找局部最优,而后整合起来寻找全局最优,此方法有必定的好处,可是目前应用的不是不少了。blog
梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,而后更新梯度的时候,若是梯度超过这个阈值,那么就
将其强制限制在这个范围以内。这能够防止梯度爆炸。深度学习
权重正则化限制过拟合,若是仔细看正则项在损失函数中的形式(公式以下),其中,α 是指正则项系数,所以,若是发生梯度爆炸,
权值的范数就会变的很是大,经过正则化项,能够部分限制梯度爆炸的发生。
注:事实上,在深度神经网络中,每每是梯度消失出现的更多一些。
激活函数讲解参考:https://blog.csdn.net/weixin_43798170/article/details/106698255
Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被普遍的应用到了各大网络中,具备加速网络收敛速度,提高训练稳定性
的效果,Batchnorm本质上是解决反向传播过程当中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,经过规范化操
做将输出信号x规范化到均值为0,方差为1保证网络的稳定性。
在此只大概讲一下batchnorm为什么能解决梯度问题,具体来讲就是反向传播中,通过每一层的梯度会乘以该层的权重,举个简单例子: 正向传播中,
那么反向传播中,反向传播式子中有w的存在,因此 w 的大小影响了梯度的消失和爆炸,batchnorm就是经过对每一层的输出作
scale和shift的方法,经过必定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到接近均值为0方差为1的标准正太分布,
即严重偏离的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会致使损失函数
较大的变化,使得让梯度变大,避免梯度消失问题产生,并且梯度变大意味着学习收敛速度快,能大大加快训练速度。
残差结构解读(论文:Deep Residual Learning for Image Recognition):https://zhuanlan.zhihu.com/p/31852747
残差解决梯度问题:
首先残差单元以下
通常,残差网络中不少这样的跨层链接结构,这样的结构在反向传播中具备很大的好处,见下式:
公式第一个因子表示损失函数到达L的梯度,小括号中的1代表短路机制能够无损地传播梯度,而另一项残差梯度则须要通过带有weights的层, 梯度不是直接传递过来的。残差梯度不会那么巧全为-1,并且就算其比较小,有1的存在也不会致使梯度消失。因此残差学习会更容易。