在所有依靠Gradient Descent和Backpropagation算法来学习的Neural Network中,普遍都会存在Gradient Vanishing Problem。Backpropagation的运作过程是,根据Cost Function进行反向传播,利用Chain Rule去计算n层之前某一weight上的梯度,从而更新该weight。而事实上,在网络层次较深的情况下,我们获得的weight梯度,随着反向传播层次的深入,会呈现越来越小的状态。从而,在靠近输出端的Layers中,weight可以被很好的更新,因为可以获得不错的gradient,而在靠近输入端的Layers中,weight则更新缓慢。

举个最简单的例子,来说明该问题。如下的神经网络有四层,每层有一个node:

我们可知w是weight,b是bias,每一层的节点输入是z,输出是a,activation function是a=σ(z),我们可以得出:

当我们已知Cost Function时,我们利用Backpropagation计算weight:

可以看到,第一层的weight梯度,依赖于之后各层activation function的一阶导数之积。而对于Machine Learning中常用的Sigmoid及tanh激励函数,其derivative图像如下:

Sigmoid的derivative是[0,0.25]的,而tanh的derivative是[0,1]的。通过上式,我们看出,通过Backpropagation求梯度时,每往回传播一层,就要多乘以一项δ‘(z),也就是说,随着向回传递的深入,梯度会呈指数级的衰减,直至缩减到0,导致前层的权重无法更新。tanh要略好于sigmoid,但依然难以解决Gradient Vanishing的问题。所以Relu Function应运而生,并且在Deep Learning方面取得了巨大成功。Relu的表达式及图形如下:

其当x>0时,derivative是1,小于0时,derivative为0。该函数很好的解决了Gradient Vanishing Problem,在大多数情况下,我们构建Deep Learning时可以使用Relu作为默认的Activation Function。

最新文章

  1. Lesson 19 Sold out
  2. code vs 1026 逃跑的拉尔夫
  3. 有关sass
  4. 【jmter】JDBC进行mysql数据库测试
  5. addAll()报NullPointer原因
  6. Linux 操作Mysql详解
  7. 基础之 window-self-top-opener
  8. bootstrap 兼容IE8设置
  9. EasyUI开发的驾校管理系统
  10. IOS中的JSON数据的解析
  11. Spark实战之读写HBase
  12. 上传本地项目到githup仓库
  13. C语言中数据类型的取值范围
  14. LeetCode算法题-N-ary Tree Postorder Traversal(Java实现)
  15. python之路--模块和包
  16. kali访问宿主机Web页面解决方案
  17. featureCounts 软件说明
  18. Pycharm激活方法步骤
  19. LoadRunner遇到的错误及解决方法
  20. oracle中给某个用户某张表的权限设置

热门文章

  1. 使用ssh协议在linux主机之间快速上传和下载文件
  2. 本地部署 Misago Docker + 配置 HTTPS 笔记
  3. 七层模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分别在哪层?
  4. Django重点之url别名
  5. MIT 6.824学习笔记3 Go语言并发解析
  6. 放弃等待,故障到来:少一个 await 引发的 tcp 连接泄漏故障
  7. Python 爬虫 校花网
  8. Nginx处理前端跨域(补充)
  9. vue Base64图片压缩上传OSS
  10. Linux telnet、nc、ping监测状态