首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

梯度消失和梯度爆炸

➤导语

在机器学习模型训练的常见问题中,除了会遇到过拟合、欠拟合问题,还有一类问题也经常出现,那便是梯度问题。梯度问题具体是什么?又有哪些应对之法?

>>>>

梯度问题

梯度问题出现在深度神经网络的残差反向传播过程当中,原因是神经网络通过链式法则求解不同层的梯度,中间的连乘有可能导致残差计算的不稳定性,使得模型训练失效。梯度问题具体有两种表现形式:梯度消失梯度爆炸

梯度消失 又叫 梯度弥散。根据链式法则,如果每一层神经元的权重与上一层传递过来的残差之积都小于1,这样经过足够多层传递之后,残差值将趋近于0。

梯度消失示例:y1 = w1x1, x2 = f(y1), y2 = w2x2, x3 = f(y2), y3 = w3x3, …, xn = f(yn-1)。

其中x1是输入层的输入,x2、x3分别是中间两个隐层的输出,xn是输出层的输出。w1的梯度求解:σw1 = L' * f'(y1) * f'(y2) * … * f'(yn-1) * w2 * … * wn-1 * x1。

上述示例可以看出,造成梯度消失的具体原因,要么是权重w偏小,要么就是x偏小。w偏小一般是参数初始化的问题,x偏小则是激活函数的问题。

比如常见的sigmoid激活函数,其导数f'(x) = f(x) * (1 - f(x))的最大值为0.25,连乘比较容易造成梯度消失。

同上述示例,梯度爆炸 的具体原因则是初始化权重w过大所致。例如,各层激活函数如果是sigmoid,那么造成梯度爆炸的必要条件是w的初始值至少大于4。

解决梯度问题主要有以下六种方法:

pre-training&fine-tunning该方法由Hinton在2006年提出,采取先局部后整体的思想,pre-training先逐层训练每一个隐层的神经元,fine-tunning再通过BP对整个网络进行训练微调。

梯度剪切顾名思义,在向前传递残差的时候,根据设定阈值进行残差截断。该手段主要用于防止梯度爆炸。

损失函数加入正则项通过加入正则项,限制权重大小,具体正则项的讲解可参考正则项:把控拟合方向的马车夫。该手段主要也是防止梯度爆炸。

使用线性组合的激活函数如前文所述,sigmoid激活函数导数最大值为0.25,且越靠近边界导数值下降越明显,可替换成ReLU等线性组合的激活函数,这些函数既简单、导数值又是常数,能有效防止梯度消失。

Batch Normalization这是G公司在ICML2015的论文中提出来的一种“批量规范化”的方案,简单而言就是通过对每一层的输出先进行规范化(减均值除方差),再进行激活传递至下一层。

加入残差网络传统的BP网络都是残差逐层串行传递,而该网络支持残差跨层传递,直接避免了连乘带来的计算不稳定性。

以上便是梯度问题的讲解,敬请期待下节内容。

结语

感谢各位的耐心阅读,后续文章于每周日奉上,欢迎大家关注小斗公众号对半独白

每周一言

时间,是成长的必要代价。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180415G0K9R300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券