反向传播+梯度消失梯度爆炸
为什么写这个呢,本来是想调研一下**函数,就在想什么样的**函数才是好的,Sigmoid在x过大过小的时候梯度消失造成问题,于是发现对梯度消失和梯度爆炸的理解还是不深,既然涉及到梯度了,那就需要重新掌握反向传播了,所以写下了这篇笔记
-
为什么需要反向传播
反向传播是优化神经网络参数的方法,深层网络由许多线性层和非线性层堆叠而来,因此整个深度网络可以视为是一个复合的非线性多元函数。我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值,这就成了一个数学问题,我们都知道就是求导找最低点,这在数学上就是梯度下降法。
由于深度学习网络按层深入,层层嵌套的特点,对深度网络目标函数计算梯度的时候,需要用反向传播的方式由深到浅倒着计算以及更新参数,所以反向传播法是梯度下降法在深度网络上的具体实现方式
2.公式推导
我看的这篇推到文章,例题的形式很清晰
这个图看完例题就知道多重要了,但我们主要用他说明下面的梯度爆炸消失问题
然后我想说,首先需要明确,多维梯度下降是怎么更新参数的,他不再像原来的二维,变量就只有x我们对x求导,然后具体分析,他的公式如下图,也可以去复习下高数,简单的说就是对每一个变量求导,然后更新参数
那么更新参数时步长的系数为什么要用负号不用正号,我们从二维上思考一下,导数为正,曲线随x增大上升,我们想找最低点当然要让x减小了
变量就是w,和b,从最后一层,层层往前求,求w和b的导数,注意导数是可以求出实际值的,步长是设置的
3.缺点
然后梯度下降也可以说反向传播有一个弊端,就是比如曲线连续两个沟型,很有可能困在第二深的沟里,而没有找到真正的最低点,要想改善,可以从步长上下功夫
4.梯度消失爆炸
理解了反向传播,我们就知道为什么梯度消失,梯度爆炸都是致命的了,比如我们看第一张图,其中有一个out o1对net o1求导,如果**函数是sigmoid并且net o1很大或很小,那他的导数就是趋近于0的,经过多层,多个连乘,就更小,那更新之后就基本什么都没有改,白白浪费资源算了半天。同理可理解梯度爆炸