神经网络优化篇:详解梯度消失/梯度爆炸(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增量数据工具,一篇详解核心知识点
老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...
随机推荐
- linux上搭建Nacos集群(步骤详细,linux小白也能搞定)
(1)nacos官网:https://github.com/alibaba/nacos/releases/tag/1.2.1下载nacos安装包到window本地(后缀为tar.zip) (2)在li ...
- Avalonia开发(一)环境搭建
一.介绍 开源 GitHub:https://github.com/AvaloniaUI/Avalonia/ 多平台支持,包括Windows.mac OS.Linux.iOS.Android.Sams ...
- 2-MySQL基本语法
上文说到,数据库的安装和连接,接下来将给大家讲解MySQL数据库的基本语法及数据的类型 1.基本语法 (1).查看当前所有数据库 : show databases; (2).创建数据库 create ...
- 逻辑漏洞挖掘之XSS漏洞原理分析及实战演练
一.前言 2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟,数据安全的重要性愈加凸显,这也更加坚定了我们推行安全测试常态化的决心.随着测试组安全测试常态化的推进,有更多的同事对逻辑漏洞产生了 ...
- 【目标检测】Fast R-CNN算法实现
一.前言 2014年,Ross Girshick提出RCNN,成为目标检测领域的开山之作.一年后,借鉴空间金字塔池化思想,Ross Girshick推出设计更为巧妙的Fast RCNN(https:/ ...
- 「codeforces - 542D」Superhero's Job
link. 容易发现,如果将 \(x\) 写作 \(\displaystyle \prod_{i = 1}^k p_i^{\alpha_i}\) 的形式,\(\displaystyle J(x) = ...
- 记一次 .NET 某仪器测量系统 CPU爆高分析
一:背景 1. 讲故事 最近也挺奇怪,看到了两起 CPU 爆高的案例,且诱因也是一致的,觉得有一些代表性,合并分享出来帮助大家来避坑吧,闲话不多说,直接上 windbg 分析. 二:WinDbg 分析 ...
- destoon上做纯js实现html指定页面导出word
因为最近做了范文网站需要,所以要下载为word文档,如果php进行处理,很吃后台服务器,所以想用前端进行实现.查询github发现,确实有这方面的插件. js导出word文档所需要的两个插件: 1 2 ...
- PackageManager
/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- 轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
引言 在前两章节中,我们详细讲解了如何手动配置启动MongoDB.然而,现在有许多不同的工具可以帮助我们更方便地启动和创建MongoDB数据库.因此,今天我将介绍一个名为mtools的开源项目,它可以 ...