梯度消失/梯度爆炸

训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,也就是训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。

接下来,将会了解梯度消失或梯度爆炸的真正含义,以及如何更明智地选择随机初始化权重,从而避免这个问题。

假设正在训练这样一个极深的神经网络,画的神经网络每层只有两个隐藏单元,但它可能含有更多,但这个神经网络会有参数\(W^{[1]}\),\(W^{[2]}\),\(W^{[3]}\)等等,直到\(W^{[l]}\),为了简单起见,假设使用激活函数\(g(z)=z\),也就是线性激活函数,忽略\(b\),假设\(b^{[l]}\)=0,如果那样的话,输出\(y=W^{[l]}W^{[L -1]}W^{[L - 2]} \ldots W^{[3]}W^{[2]}W^{[1]}x\),如果想考验的数学水平,\(W^{[1]} x = z^{[1]}\),因为\(b=0\),所以想\(z^{[1]} =W^{[1]} x\),\(a^{[1]} = g(z^{[1]})\),因为使用了一个线性激活函数,它等于\(z^{[1]}\),所以第一项\(W^{[1]} x = a^{[1]}\),通过推理,会得出\(W^{[2]}W^{[1]}x =a^{[2]}\),因为\(a^{[2]} = g(z^{[2]})\),还等于\(g(W^{[2]}a^{[1]})\),可以用\(W^{[1]}x\)替换\(a^{[1]}\),所以这一项就等于\(a^{[2]}\),这个就是\(a^{[3]}\)(\(W^{[3]}W^{[2]}W^{[1]}x\))。

所有这些矩阵数据传递的协议将给出\(\hat y\)而不是\(y\)的值。

假设每个权重矩阵\(W^{[l]} = \begin{bmatrix} 1.5 & 0 \\0 & 1.5 \\\end{bmatrix}\),从技术上来讲,最后一项有不同维度,可能它就是余下的权重矩阵,\(y= W^{[1]}\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\\end{bmatrix}^{(L -1)}x\),因为假设所有矩阵都等于它,它是1.5倍的单位矩阵,最后的计算结果就是\(\hat{y}\),\(\hat{y}\)也就是等于\({1.5}^{(L-1)}x\)。如果对于一个深度神经网络来说\(L\)值较大,那么\(\hat{y}\)的值也会非常大,实际上它呈指数级增长的,它增长的比率是\({1.5}^{L}\),因此对于一个深度神经网络,\(y\)的值将爆炸式增长。

相反的,如果权重是0.5,\(W^{[l]} = \begin{bmatrix} 0.5& 0 \\ 0 & 0.5 \\ \end{bmatrix}\),它比1小,这项也就变成了\({0.5}^{L}\),矩阵\(y= W^{[1]}\begin{bmatrix} 0.5 & 0 \\ 0 & 0.5 \\\end{bmatrix}^{(L - 1)}x\),再次忽略\(W^{[L]}\),因此每个矩阵都小于1,假设\(x_{1}\)和\(x_{2}\)都是1,激活函数将变成\(\frac{1}{2}\),\(\frac{1}{2}\),\(\frac{1}{4}\),\(\frac{1}{4}\),\(\frac{1}{8}\),\(\frac{1}{8}\)等,直到最后一项变成\(\frac{1}{2^{L}}\),所以作为自定义函数,激活函数的值将以指数级下降,它是与网络层数数量\(L\)相关的函数,在深度网络中,激活函数以指数级递减。

希望得到的直观理解是,权重\(W\)只比1略大一点,或者说只是比单位矩阵大一点,深度神经网络的激活函数将爆炸式增长,如果\(W\)比1略小一点,可能是\(\begin{bmatrix}0.9 & 0 \\ 0 & 0.9 \\ \end{bmatrix}\)。

在深度神经网络中,激活函数将以指数级递减,虽然只是讨论了激活函数以与\(L\)相关的指数级数增长或下降,它也适用于与层数\(L\)相关的导数或梯度函数,也是呈指数级增长或呈指数递减。

对于当前的神经网络,假设\(L=150\),最近Microsoft对152层神经网络的研究取得了很大进展,在这样一个深度神经网络中,如果激活函数或梯度函数以与\(L\)相关的指数增长或递减,它们的值将会变得极大或极小,从而导致训练难度上升,尤其是梯度指数小于\(L\)时,梯度下降算法的步长会非常非常小,梯度下降算法将花费很长时间来学习。

总结一下,讲了深度神经网络是如何产生梯度消失或爆炸问题的,实际上,在很长一段时间内,它曾是训练深度神经网络的阻力,虽然有一个不能彻底解决此问题的解决方案,但是已在如何选择初始化权重问题上提供了很多帮助。

神经网络优化篇:详解梯度消失/梯度爆炸(Vanishing / Exploding gradients)的更多相关文章

  1. LSTM如何解决梯度消失或爆炸的?

    from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定 ...

  2. 梯度消失&&梯度爆炸

    转载自: https://blog.csdn.net/qq_25737169/article/details/78847691 前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案. ...

  3. RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

    RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为  . 则对于一 ...

  4. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  5. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  6. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  7. [ DLPytorch ] 循环神经网络进阶&拟合问题&梯度消失与爆炸

    循环神经网络进阶 BPTT 反向传播过程中,训练模型通常需要模型参数的梯度. \[ \frac{\partial L}{\partial \boldsymbol{W}_{qh}} = \sum_{t= ...

  8. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...

  9. 梯度消失 / 梯度爆炸以及Xavier初始化

    2018-12-06 16:25:08 首先我们先来看一下求解梯度的公式,以下面三层的网络为例: 如果w初始化为大于1的数字,在深层神经网络计算梯度的时候就会出现梯度爆炸的现象: 如果w初始化为小于1 ...

  10. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

随机推荐

  1. Avalonia开发(一)环境搭建

    一.介绍 开源 GitHub:https://github.com/AvaloniaUI/Avalonia/ 多平台支持,包括Windows.mac OS.Linux.iOS.Android.Sams ...

  2. 文盘Rust -- tonic-Rust grpc初体验

    gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能.互操作性和灵活性.该库的创建是为了对 async/await 提供一流 ...

  3. spark修改控制台输出日志级别

    spark修改控制台输出日志级别 修改conf/log4j.properties cd $SPARK_HOME/conf cp log4j.properties.template ./log4j.pr ...

  4. PostgreSQL学习笔记-4.基础知识:空值NULL、别名AS

    NULL 值代表遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. 语法 当创建表时,NULL 的基本语法如下: CREATE T ...

  5. HexConversion 二进制 八进制 十六进制 十进制

    public class HexConversion { // TODO Auto-generated method stub /** * TODO 进制转换. * * @param cc * htt ...

  6. qq群匿名聊怎么用

    qq群匿名聊怎么用 1 2 3 4 5 分步阅读 匿名的意思就是不认识.群匿名聊当然是把群里的马甲一下变成不认识的人,再在一起聊天.是不是觉得有点吃饱了没事干,但是当下该功能还是比较实用的,群匿名聊可 ...

  7. Docker 安装 Redis 单机&集群总结

    前言 Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于 内存 . 分布式 .可选持久性的键值对( Key-Value )存储数据库 redis版本:redis ...

  8. Jackson--FastJson--XStream--代码执行&&反序列化

    Jackson--FastJson--XStream--代码执行&&反序列化 Jackson代码执行 (CVE-2020-8840) 影响范围 2.0.0 <= FasterXM ...

  9. java实现朴素rpc

    五层协议中,RPC在第几层? 五层协议 应用层 传输层 网络层 链路层 物理层 我不知道,我要去大气层! 远程过程调用(RPC),比较朴素的说法就是,从某台机器调用另一台机器的一段代码,并获取返回结果 ...

  10. IDEA工具第二篇:自定义Java方法注释模板

    网上搜索类似的文章有很多,但是一味的复制粘贴总会出现各种奇葩问题,最后然并卵!今天特意自己研究琢磨一下,将最终结果分享给大家,100%亲测可用. 一.说明 想必大家都用过Eclipse的方法注释生成, ...