为什么神经网络会出现梯度消失和梯度爆炸?
点击蓝字“视学算法”关注我哟
加个“星标★”,每日好文必达
文末包邮送5本技术书给老读者
阿广 · 家里蹲大学幼儿组编程赛参与奖
我们知道深度神经网络中一个非常关键的问题是如何解决梯度消失和梯度爆炸。当我们看完深度神经网络之后,很多朋友不乏对梯度消失和梯度爆炸一头雾水、一知半解。所以阿广今天给大家彻底的讲一下神经网络中梯度消失和梯度爆炸。
举个例子:下面是一个输入层,三个隐藏层,一个输出层的简单神经网络。

如上图所示的神经网络,误差对b1的求导如下:

其中

我们假设激活函数使用的是sigmoid函数,如下图:

而sigmoid函数的导数最大值为0.25,如下图所示:

通常abs(w)<1,所以可以得到下面的式子:

从上式中不难看出,随着网络层数加大,从前面的层传递到后面的层梯度会越来越小,进而引起了梯度消失的问题。
那么到底什么是梯度爆炸呢?
我们可以看到上式中,sigmoid的导数最大值为0.25,而只有我们的权重持续符合abs(w)>4的时候,才会出现梯度爆炸的问题。
梯度消失和爆炸哪个更容易出现呢?
我们在日常实验或者科研项目中权重的设置基本上都是abs(w)<4,所以梯度消失更普遍。
既然发现了梯度消失和梯度爆炸的问题,那么应该如何解决呢?
1、更换激活函数,使用ReLU或者Maxout等激活函数替代sigmoid;
2、例如ResNet中的残差网络(使用参数隔层传递),也可以有效的防止梯度消失的问题;
3、使用Dropout策略;
4、使用BatchNormlization对各层输入统一;
5、调整学习率;
6、调整权重衰减率;
7、调整网络结构(例如残差网络等);
8、等待各位开发。
加个“星标★”,欢迎留言!
阿广 · 一个会讲段子的科学探索者
如果有收获,欢迎转发给身边的朋友,也是对阿广最大的支持,后续会更新计算机视觉和深度学习、机器学习数学基础等系列文章,希望得到大家的支持和鼓励!
如果不出什么意外情况,每周包邮送五本书给留言阅读最多和分享最多的老粉丝。本周中奖名单如下(详细中奖名单请看次条文章,中奖者请联系微信:872561826,并使用一条信息发给我所有信息:邮寄信息+想要哪本书):
PS:特别感谢北京大学出版社的赞助,下面部分图书参与了京东五折活动,欢迎购买。








麻烦给我一个在看!