神经网络优化篇:详解梯度消失/梯度爆炸(Vanishing / Exploding gradients)
梯度消失/梯度爆炸
训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,也就是训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。
接下来,将会了解梯度消失或梯度爆炸的真正含义,以及如何更明智地选择随机初始化权重,从而避免这个问题。
假设正在训练这样一个极深的神经网络,画的神经网络每层只有两个隐藏单元,但它可能含有更多,但这个神经网络会有参数\(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)的更多相关文章
- LSTM如何解决梯度消失或爆炸的?
from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定 ...
- 梯度消失&&梯度爆炸
转载自: https://blog.csdn.net/qq_25737169/article/details/78847691 前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案. ...
- RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题
RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- [ DLPytorch ] 循环神经网络进阶&拟合问题&梯度消失与爆炸
循环神经网络进阶 BPTT 反向传播过程中,训练模型通常需要模型参数的梯度. \[ \frac{\partial L}{\partial \boldsymbol{W}_{qh}} = \sum_{t= ...
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...
- 梯度消失 / 梯度爆炸以及Xavier初始化
2018-12-06 16:25:08 首先我们先来看一下求解梯度的公式,以下面三层的网络为例: 如果w初始化为大于1的数字,在深层神经网络计算梯度的时候就会出现梯度爆炸的现象: 如果w初始化为小于1 ...
- Canal:同步mysql增量数据工具,一篇详解核心知识点
老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...
随机推荐
- 实现WebRTC群聊会议室(Mesh方案)
近期需要做一个类似会议室功能,但网络上大多数是一对一通信,故记录分享希望帮助到有用的人 WebRTC一对一聊天原理 关于WebRTC建立一对一聊天的模板网上很多,可参考以下博客:springboot+ ...
- 【WPF】后台代码实现绑定ComboBox的SelectedItem功能
WPF 开发程序目前最好的用的设计模式为MVVM模式,实现了前后端的分离,前端页面的更改不需要后台代码逻辑发生变化,同理,后台逻辑发生变化时基本上也不需要修改前台的页面布局等信息. 由于某些原因,可能 ...
- Solution -「BalticOI 2004」Sequence
Description Link. Given is a sequencen \(A\) of \(n\) intergers. Construct a stricly increasing sequ ...
- Vue 搭配 Spring MVC 创建一个 web 项目
Vue 搭配 Spring MVC 创建一个 web 项目 想要写一个登录的web应用程序.页面使用Vue,后端使用Spring MVC,最终打成war包,放在tomcat下启动. 1.创建Sprin ...
- POWERBI_1分钟学会_连续上升或下降指标监控
一:数据源 模拟数据为三款奶茶销量的日销售数据源,日期是23.8.24-23.8.31.A产品为连续7天,日环比下降,B产品为连续3天,日环比下降,C产品为连续2天,日环比下降. 二:建立基础度量值 ...
- C中code关键字
单片机C语言code是什么作用? code的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是),因为C语言中没办法详细描述 ...
- 分布式事务 —— SpringCloud Alibaba Seata
Seata 简介 传统的单体应用中,业务操作使用同一条连接操作不同的数据表,一旦出现异常就可以整体回滚.随着公司的快速发展.业务需求的变化,单体应用被拆分成微服务应用,原来的单体应用被拆分成多个独立的 ...
- Redis——Redis面试题
文章目录 概述 什么是Redis Redis有哪些优缺点 为什么要用 Redis /为什么要用缓存 为什么要用 Redis 而不用 map/guava 做缓存? Redis为什么这么快 数据类型 Re ...
- 要知其然还要知其所以然printChar
虽然过渡与的追求细节不是好事, 但是现实社会逼迫我们不得不兼顾周全. 所以什么都是最好不仅要知其然还要知其所以然! public class printChar { public static voi ...
- 人工智能AI绘画全攻略(AI绘画教程分享)
在过去的三个月一直在研究人工智能生成绘画这个方向,3 月份的时候参加了小红书的小航海,也因为这个方向的选择正好对应到了趋势,小红书在一个半月做到了 1 万粉.我为什么看好这个方向? 主要是从三个方面: ...