在前面的章节中,我们已经了解了神经网络的基本模型,以及如何使用梯度下降法来学习优化神经网络的参数。在前面的数字识别的例子中,我们可以设计不同的神经网络结构,当然得到的识别率也是有区别的,比如除了输入层(784个神经元)和输出层(10个神经元),如果我们只添加一个隐含层(30个神经元),运行30个epoch,mini-batch为10,η=0.1\eta=0.1,正则项λ=5.0\lambda=5.0,可以得到的识别准确率为96.53%(实验三次取的最高值);如果我们再添加一层隐藏层(两个隐藏层,分别包含30个神经元),可以得到的识别准确率可达97.14%(实验三次取的最高值),对比于只有一个隐藏层的神经网络来说,准确率有所提高,由此很容易让人联想到是否是越多的隐藏层,那么得到的准确率就越高呢。那么,我们设置三个隐藏层后继续进行实验,得到的识别准确率却为96.72%;设置四个隐藏层,得到的最高准确率为96.65%。这看起来网络层越深,并不见得会对提高准确率有帮助。

那这种现象是否是有理论依据的呢?我们来查看在不同神经网络结构中,在网络学习过程中,网络参数的变化情况,我们知道,error项δlj=∂C∂blj\delta_j^l=\frac{\partial C}{\partial b_j^l},它衡量了惩罚方程CC相对于网络中第ll层中的第jj个神经元参数bljb_j^l的变化速率大小。如果值δlj\delta_j^l越大,可以说明当前神经元的学习速率越快,而如果值越小,那么当前神经元的参数优化对于整体cost量的降低的贡献是越小的(权重参数分析同样道理)。分别统计含有1个、2个、3个、4个隐藏层的神经网络结构的各个网络层的学习速率快慢值(以error向量长度大小作为值衡量):我们发现,无论在哪一种情况下,在同一时刻,越靠后的网络层的学习速率越快,而越靠前的网络层的学习速率反而越慢!我们可以有一个直观的印象,error项在向后传播的过程中,逐渐变小,使得越靠前的网络层的学习速率越来越低,这种现象被称为vanishing gradient problem。

为了对这种现象有更理论性的理解,我们来分析最简单的一种情况:每一层只有一个神经元的网络结构。

其中,wiw_i是weight参数,bib_i是bias参数,C是cost 方程。根据链式法则,我们可以得到,

∂C∂b1=∂C∂a4∗σ′(z4)∗w4∗σ′(z3)∗w3∗σ′(z2)∗w2

\frac{\partial C}{\partial b_1}=\frac{\partial C}{\partial a_4} *\sigma'(z4)*w_4*\sigma'(z_3)*w_3*\sigma'(z_2)*w_2
这个推导公式有个有趣的地方:除了第一项之外,后面的乘积项都是类似于 σ′(ai)∗wi\sigma'(a_i)*w_i形式依次包含各个网络层。我们来看表达式 σ′(ai)∗wi\sigma'(a_i)*w_i,其中 σ′(ai)\sigma'(a_i)具有如下的形状,在0位置处可以达到顶峰 14\frac{1}{4},也就是说 σ′(ai)≤14\sigma'(a_i) \leq \frac{1}{4},而如果我们采用均值为0,标准差为1的高斯分布来初始化参数weight的话,那么得到的 wiw_i的值有很大的概率是小于1的,所以表达式 σ′(ai)∗wi\sigma'(a_i)*w_i是一个小于1的值。在这种情况下,如果连续有多个这样的项目相乘,可想而知,结果会使得 ∂C∂b1\frac{\partial C}{\partial b_1}的值变得很小。换句话说,越是靠前的网络层, ∂C∂b1\frac{\partial C}{\partial b_1}包含的乘积项越多,使得其值越小,对应网络层的学习速率越低。至此解释了vanishing gradient现象发生的原因。

神经网络(四)-vanishing gradient problem相关推荐

  1. 深度学习--采用ReLU解决消失的梯度问题(vanishing gradient problem)

    消失的梯度问题(vanishing gradient problem): 更深层的神经网络可以学到不同抽象程度的概念,但随着深度的增加不同层的学习速率会显著不同,接近输出层的学习速率比较合适时前面的层 ...

  2. 消失的梯度问题(vanishing gradient problem)

    784节点输入层+单30节点隐藏层+10节点输出层在<神经网络的优化方式>中已经表现的很好了,达到了96.35%的准确率,如果增加神经网络的隐藏层深度效果会如何呢? 双30节点隐藏层,准确 ...

  3. 机器学习总结(九):梯度消失(vanishing gradient)与梯度爆炸(exploding gradient)问题

    (1)梯度不稳定问题: 什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸. 原因:前面层上的梯度是来自于后面层上梯度的乘乘积.当存在过多的层次时,就出现了内在本质上 ...

  4. Vanishing gradient and activiation funcation(ReLU、Maxout)

    文章目录 Vanishing gradient ReLU thinner linear network How to train ReLU-variant Maxout thinner linear ...

  5. 深度学习进阶课程16---用ReL解决Vanishing Gradient问题

    上篇文章发现一个新的问题,越往外越接近输出层,学习效率比较高 这篇文章来讨论一下如何解决这个问题 Exploding gradient problem: 修正以上问题: (1)初始化比较大的权重:比如 ...

  6. 卷积神经网络四种卷积类型

    卷积神经网络四种卷积类型 https://www.toutiao.com/a6631333810287936013/ 一般卷积 首先,我们需要就定义卷积层的一些参数达成一致. 卷积核大小(Kernel ...

  7. 卷积神经网络四:人脸识别和风格变迁

    1 什么是人脸识别 现在的人脸识别包含两个部分,人脸识别和活体检测.后一项技术确认你是一个活人.事实上,活体检测可以使用监督学习来实现,去预测是不是一个真人,这个方面我就不多说了.我主要想讲的是,如何 ...

  8. 机器学习中的梯度消失问题vanishing gradient

    翻译自Nikhil Garg的Quora回答. 梯度消失是使用梯度下降方法的神经网络中出现的问题,其表现是,在反向回馈(backpropagation)中使整个网络难以调节前面几层的参数(Parame ...

  9. 论文阅读笔记五十四:Gradient Harmonized Single-stage Detector(CVPR2019)

    论文原址:https://arxiv.org/pdf/1811.05181.pdf github:https://github.com/libuyu/GHM_Detection 摘要 尽管单阶段的检测 ...

最新文章

  1. mysql 百度地图插件_GitHub - huizhong/grafana-baidumap-panel: Grafana 百度地图插件
  2. 设计模式之间的关联关系和对比
  3. elasticsearch api中的Bulk API操作
  4. jquery --- 监听tab栏的变化
  5. 面试题——20190717
  6. 什么是串口服务器?串口服务器都用在哪些领域?
  7. MySQL之索引优化
  8. 击败特斯拉!它拿下全球电动车型销量冠军,但售价仅是Model 3的零头
  9. WinForm程序中使用Unity3D控件
  10. 基于JAVA《Python程序设计》教辅系统计算机毕业设计源码+系统+lw文档+部署
  11. 根据经纬度查询距离并按距离进行排序
  12. 转:程序员应该怎样去学习和掌握计算机英语呢?
  13. MAC下 生成安卓签名证书.keystore文件【详细】
  14. 在线检测计算机硬件信息,JS获取客户端计算机硬件信息与系统信息大全
  15. 在Linux上如何使用GitHub
  16. css 设置字体渐变色
  17. 阿里首推“数据安全合作伙伴计划” 构建数据安全生态
  18. H5mui微信浏览器登录页
  19. php 小学生20以内的加减法
  20. 不同样本之间的相似性度量(Similarity Measurement)

热门文章

  1. Java learn lambda的方法引用
  2. TCP/IP详解--拥塞控制机制 RTT时间计算相关的算法
  3. python兔子编程_Python兔子生兔子算法,编程练习题实例十一
  4. 802.11a/b/g/n区别
  5. python 比较数字大小_Python:整数比较大小和输出 | 学步园
  6. Python str()函数
  7. h5py 必知--String存储
  8. 如何解决oracle中文乱码问题,oracle中解决中文乱码问题
  9. excel表格合并程序
  10. ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)