为什么RNN(循环神经网络)存在梯度消失和梯度爆炸?
1️⃣ 原理分析
RNN前向传播的公式为:
- x t x_t xt是t时刻的输入
- s t s_t st是t时刻的记忆, s t = f ( U ⋅ x t + W ⋅ s t − 1 ) s_t=f(U\cdot x_t+W\cdot s_{t-1}) st=f(U⋅xt+W⋅st−1),f表示激活函数, s t − 1 s_{t-1} st−1表示t-1时刻的记忆
- o t o_t ot是t时刻的输出, o t = s o f t m a x ( V ⋅ s t ) o_t=softmax(V\cdot s_t) ot=softmax(V⋅st)
采用交叉熵作为损失函数:
L = ∑ i = 1 T − o t ˉ l o g o t L=\sum_{i=1}^{T}-\bar{o_{t}}logo_{t} L=i=1∑T−otˉlogot
其中T代表时间步的长度, o ˉ t \bar o_{t} oˉt代表ground truth, o t o_t ot代表预测的输出。
假设有三个时间步, t = 1 , 2 , 3 t=1,2,3 t=1,2,3。假设初始记忆 s t = 0 s_t=0 st=0,则 t = 1 t=1 t=1时的记忆和输出为:
s 1 = f ( U x 1 + W s 0 ) o 1 = f [ V ⋅ f ( U x 1 + W s 0 ) ] \begin{aligned}&s_1=f(Ux_1+Ws_0)\\&o_{1}=f[V\cdot f(Ux_{1}+Ws_{0})]\end{aligned} s1=f(Ux1+Ws0)o1=f[V⋅f(Ux1+Ws0)]
t = 2 t=2 t=2时的记忆和输出为:
s 2 = f ( U x 2 + W s 1 ) o 2 = f [ V ⋅ f ( U x 2 + W s 1 ) ] = f [ V ⋅ f ( U x 2 + W f ( U x 1 + W s 0 ) ) ] \begin{aligned}&s_2=f(Ux_2+Ws_1)\\&o_{2}=f[V\cdot f(Ux_{2}+Ws_{1})]=f[V\cdot f(Ux_{2}+Wf(Ux_1+Ws_0))]\end{aligned} s2=f(Ux2+Ws1)o2=f[V⋅f(Ux2+Ws1)]=f[V⋅f(Ux2+Wf(Ux1+Ws0))]
这样很晕,我来画个箭头:
可以发现 s 2 s_2 s2是 s 1 s_1 s1的函数
t = 3 t=3 t=3时的记忆和输出为:
s 3 = f ( U x 3 + W s 2 ) o 3 = f [ V ⋅ f ( U x 3 + W s 2 ) ] = f [ V ⋅ f ( U x 3 + W f ( U x 2 + W s 1 ) ) ] = f [ V ⋅ f ( U x 3 + W f ( U x 2 + W f ( U x 1 + W s 0 ) ) ) ] \begin{aligned}&s_3=f(Ux_3+Ws_2)\\&o_{3}=f[V\cdot f(Ux_{3}+Ws_{2})]=f[V\cdot f(Ux_{3}+Wf(Ux_2+Ws_1))]=f[V\cdot f(Ux_{3}+Wf(Ux_2+Wf(Ux_1+Ws_0)))] \end{aligned} s3=f(Ux3+Ws2)o3=f[V⋅f(Ux3+Ws2)]=f[V⋅f(Ux3+Wf(Ux2+Ws1))]=f[V⋅f(Ux3+Wf(Ux2+Wf(Ux1+Ws0)))]
画个箭头:
可以发现 s 3 s_3 s3是 s 2 s_2 s2的函数,又 s 2 s_2 s2是 s 1 s_1 s1的函数,因此 s 3 s_3 s3包含 s 2 s_2 s2和 s 1 s_1 s1
然后我们来分析反向传播:BPTT(Back-Propagation Through Time,时间上的反向传播)是针对RNN的训练算法,它的核心依然是基于梯度下降的反向传播。对于RNN来说,主要参数包括U、W和V。
以t=3时举例子,求U,V,W的梯度:
∂ L 3 ∂ V = ∂ L 3 ∂ o 3 ∂ o 3 ∂ V 3 ◯ ∂ L 3 ∂ W = ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ W + ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 2 ∂ s 2 ∂ W + ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ s 2 ∂ s 2 ∂ s 1 ∂ s 1 ∂ W 4 ◯ ∂ L 3 ∂ U = ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ U + ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 2 ∂ s 2 ∂ U + ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ s 2 ∂ s 2 ∂ s 1 ∂ s 1 ∂ U 5 ◯ \begin{aligned} &\frac{\partial L_3}{\partial V} =\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial V}\textcircled{3} \\ &\frac{\partial L_3}{\partial W} =\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial W}+\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_2}\frac{\partial s_2}{\partial W}+\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial s_2}\frac{\partial s_2}{\partial s_1}\frac{\partial s_1}{\partial W}\textcircled{4} \\ &\frac{\partial L_3}{\partial U} =\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial U}+\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_2}\frac{\partial s_2}{\partial U}+\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial s_2}\frac{\partial s_2}{\partial s_1}\frac{\partial s_1}{\partial U}\textcircled{5} \end{aligned} ∂V∂L3=∂o3∂L3∂V∂o33◯∂W∂L3=∂o3∂L3∂s3∂o3∂W∂s3+∂o3∂L3∂s2∂o3∂W∂s2+∂o3∂L3∂s3∂o3∂s2∂s3∂s1∂s2∂W∂s14◯∂U∂L3=∂o3∂L3∂s3∂o3∂U∂s3+∂o3∂L3∂s2∂o3∂U∂s2+∂o3∂L3∂s3∂o3∂s2∂s3∂s1∂s2∂U∂s15◯
对于公式⑤可以简写成:
∂ L 3 ∂ U = ∑ k = 0 3 ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ U \frac{\partial L_3}{\partial U}=\sum_{k=0}^3\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial U} ∂U∂L3=k=0∑3∂o3∂L3∂s3∂o3∂sk∂s3∂U∂sk
由于 ∂ s 3 ∂ s k \frac{\partial s_3}{\partial s_k} ∂sk∂s3也需要链式法则,即 ∂ s 3 ∂ s 1 = ∂ s 3 ∂ s 2 ∂ s 2 ∂ s 1 \frac{\partial s_3}{\partial s_1}=\frac{\partial s_3}{\partial s_2}\frac{\partial s_2}{\partial s_1} ∂s1∂s3=∂s2∂s3∂s1∂s2。因此公式可以进一步修改为:
∂ L 3 ∂ U = ∑ k = 1 3 ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ U = ∑ k = 1 3 ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ( ∏ j = k + 1 3 ∂ s j ∂ s j − 1 ) ∂ s k ∂ U 6 ◯ \frac{\partial L_3}{\partial U}=\sum_{k=1}^3\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial U}=\sum_{k=1}^3\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}(\prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}})\frac{\partial s_k}{\partial U}\textcircled{6} ∂U∂L3=k=1∑3∂o3∂L3∂s3∂o3∂sk∂s3∂U∂sk=k=1∑3∂o3∂L3∂s3∂o3(j=k+1∏3∂sj−1∂sj)∂U∂sk6◯
同理,对公式④也可以写为:
∂ L 3 ∂ W = ∑ k = 1 3 ∂ L 3 ∂ o 3 ∂ o 3 ∂ s 3 ( ∏ j = k + 1 3 ∂ s j ∂ s j − 1 ) ∂ s k ∂ W 7 ◯ \frac{\partial L_3}{\partial W}=\sum_{k=1}^3\frac{\partial L_3}{\partial o_3}\frac{\partial o_3}{\partial s_3}(\prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}})\frac{\partial s_k}{\partial W}\textcircled{7} ∂W∂L3=k=1∑3∂o3∂L3∂s3∂o3(j=k+1∏3∂sj−1∂sj)∂W∂sk7◯
观察③式,对与V的偏导不存在依赖关系。
观察④和⑤式,对W和U求偏导的时候,存在长期依赖关系。原因是前向传播的时候 s t s_t st会随着时间向前传播,而 s t s_t st是W、U的函数。
假设激活函数为tanh,将⑥⑦中累乘部分取出来:
∏ j = k + 1 3 ∂ s j ∂ s j − 1 = ∏ j = k + 1 3 t a n h ′ W \prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}}=\prod_{j=k+1}^3tanh^{'}W j=k+1∏3∂sj−1∂sj=j=k+1∏3tanh′W
例如: s 3 = f ( U x 3 + W s 2 ) s_3=f(Ux_3+Ws_2) s3=f(Ux3+Ws2), ∂ s 3 ∂ s 2 = t a n h ′ ( U ) W \frac{\partial s3}{\partial s_{2}}=tanh'(U) W ∂s2∂s3=tanh′(U)W
由上图可知,tanh的梯度最大为1,通常情况下会小于1,因此当t很大的时候,例如t=100时,⑥⑦中的累乘部分 ∏ j = k + 1 100 t a n h ′ W \prod_{j=k+1}^{100}tanh^{^{\prime}}W ∏j=k+1100tanh′W将趋于0,因此t=100时对于W和U的梯度将趋于0,导致梯度消失。
分析完tanh,再来分析一下W,如果W中的值太大,那么产生问题就是梯度爆炸
2️⃣ 总结
- RNN存在梯度消失的原因是:隐藏层的输出 s t s_t st会向前传播,这样导致在反向传播求梯度时存在一个累乘项,这个累乘项由
激活函数的梯度
和参数W
组成,如果我们采用tanh作为激活函数,其梯度小于1,时间步越多,累乘项越趋近于0,导致梯度消失。 - RNN存在梯度爆炸的原因:参数W如果过大,则会导致累乘项逐渐变大,导致梯度爆炸
3️⃣ 参考
RNN梯度消失与梯度爆炸的原因 - Hideonbush的文章 - 知乎
相关文章:

为什么RNN(循环神经网络)存在梯度消失和梯度爆炸?
1️⃣ 原理分析 RNN前向传播的公式为: x t x_t xt是t时刻的输入 s t s_t st是t时刻的记忆, s t f ( U ⋅ x t W ⋅ s t − 1 ) s_tf(U\cdot x_tW\cdot s_{t-1}) stf(U⋅xtW⋅st−1),f表示激活函数, s t − 1 s_{t-1} …...

【数据库】数据库迁移的注意事项有哪些?
数据库迁移是一个复杂且关键的过程,需要谨慎处理以确保数据的完整性和应用程序的正常运行。以下是一些数据库迁移时需要注意的事项: 1. 充分的前期准备 1.1 评估迁移需求 明确目标:确定迁移的具体目标,例如添加新字段、修改现…...

MQTT协议解析 : 物联网领域的最佳选择
1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…...

pycharm中from[本地包]import文件/模块出现问题(最最最全方法!)
1.通过PYTHONPATH的方法在此处将路径添加上,能够让IDE访问得到。 2.通过选中目标文件所在的文件的文件夹单击右键,如下图所示可以看到下方的mark directory as选项中存在 存在excluded,选择此项可解决问题,如果仍有问题可以尝试其…...

MongoDB在现代Web开发中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 引言 MongoDB 概述 定义与原理 发展…...

Python Bokeh 数据可视化教程
Python Bokeh 数据可视化教程 引言 在数据科学和分析的过程中,数据可视化是一个至关重要的环节。它不仅能帮助我们更好地理解数据,还能在报告和展示中提升数据的可读性和吸引力。Python 作为数据科学的主要工具之一,提供了多种数据可视化库…...

(一)<江科大STM32>——软件环境搭建+新建工程步骤
一、软件环境搭建 (1)安装 Keil5 MDK 文件路径:江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE,安装即可,路径不能有中文。 (2)安装器件支持包 文件路径:江科大stm32入门教程资料…...

内存大小的单位转换
计算机中内存大小的单位转换通常是按照以下规则进行的: 基本单位 1 字节 (Byte) 8 位 (bit) 常见的内存单位及转换关系 1 字节 (Byte) 8 位 (bit)1 千字节 (KB) 1,024 字节 (B)1 兆字节 (MB) 1,024 千字节 (KB) 1,024 * 1,024 字节 (B)1 吉字节 (GB) 1,02…...

如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?
PostMapping 和 PutMapping 是 Spring MVC 中用于处理 HTTP POST 和 PUT 请求的注解。它们分别对应 HTTP 协议中的 POST 和 PUT 方法,通常用于创建和更新资源。下面详细解释如何在 Spring MVC 中使用这两个注解。 1. 使用 PostMapping PostMapping 注解用于处理 H…...

AIGC Agent(智能体)应用开发高级工程师实战培训 —— 线上8周系统教学课程学习路线图
🎯 课程目标 系统掌握AIGC核心技术:学员将通过项目驱动学习,从文本生成、图像创意到智能体开发,全面进阶AIGC技术,探索其在营销、教育、数据处理、知识管理等领域的实际应用。构建AIGC智能体服务体系:学成…...

GDSC、CTRP数据库学习
GDSC 写在前面下载数据疑问1.GDSC、CTRP数据里有TCGA配套的数据?数据类型?CTRP原始数据如何处理 写在前面 开此贴做GDSC的数据分析记录 下载数据 GDSC官网:http://www.cancerrxgene.org/ 由于在官网下载数据过于麻烦,于是我使用…...

【嵌入式】ESP32开发(一)ESP-IDF概述
文章目录 1 前言2 IDF环境配置3 在VS Code中使用IDF3.1 使用ESP-IDF例程3.2 底部按钮的作用【重要!】3.3 高级用法4 ESP-IDF框架分析5 从零开始创建一个项目5.1 组件(component)6 主要参考资料7 遇到的一些问题与解决办法8 对于ESP-IDF开发的一些感受1 前言 对于ESP32的开发…...

最新6.7分非肿瘤纯生信,使用机器学习筛选慢阻肺中的关键基因。机器学习在非肿瘤生信文章中正火,可重复!
关于非肿瘤生信,我们也解读过很多,主要有以下类型 1 单个疾病WGCNAPPI分析筛选hub基因。 2 单个疾病结合免疫浸润,铁死亡,自噬等基因集,机器学习算法等。 3 两种相关疾病联合分析,包括非肿瘤结合非肿瘤&…...

vue 提交表单抹除字段为空的数据
使用背景 在配合后端post请求接口的时候 仅需要将有值的字段传入接口中 关键代码 cleanDataObj(obj) {Object.keys(obj).forEach((key) > {if (obj[key] ) {delete obj[key]}})},demo如下 export default {data() {return {demoObject:{name:小花,sex:,hobb…...

web实验3:虚拟主机基于不同端口、目录、IP、域名访问不同页面
创建配置文件: 创建那几个目录及文件,并且写内容: 为网卡ens160添加一个 IPv4 地址192.168.234.199/24: 再重新激活一下网卡ens160: 重启服务: 关闭防火墙、改宽松模式: 查看nginx端口监听情况:…...

英伟达Isaac Manipulator产品体验
相关配置 Isaac Manipulator3.1.0Isaac Sim4.2.0Ubuntu20.04GPURTX 4090 LaptopCPUI9 13900HXMem64GB 过程记录与反馈 GPU加速效果 请描述您在使用Isaac Manipulator时,调用cuMotion加速库来进行机器人运动规划和轨迹优化等任务的步骤和过程,并记录任…...

网安加·百家讲坛 | 仝辉:金融机构鸿蒙应用安全合规建设方案
作者简介:仝辉,北京娜迦信息科技发展有限公司攻防安全负责人,深耕移动应用安全领域十余年,获得过CISP、CISSP、OSCP、PMP、CCRC-CIASW等相关证书,参与多项移动应用安全标准起草,参与华为、平安集团、中国移…...

PHP Session
PHP Session PHP Session 是一种在 PHP 中用于跟踪用户会话的技术。会话允许在用户浏览网站时存储和访问用户信息。本文将详细介绍 PHP Session 的工作原理、如何创建和销毁会话、会话的安全性和最佳实践。 什么是 PHP Session? 在 Web 开发中,HTTP 是一种无状态的协议,这…...

泷羽sec学习打卡-Linux基础2
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于Linux的那些事儿-Base2 一、Linux-Base2linux有哪些目录呢?不同目录下有哪些具体的文件呢…...

# 【STM32F1】——无线收发模块RF200与串口通信
【STM32F1】——无线收发模块RF200与串口通信 一、简介 本篇主要对调试无线收发模块RF200的过程进行总结,实现了以下功能。 串口普通收发:使用STM32F103C8T6的USART2串口接收中断,实现两个无线收发模块RF200间的通信。二、RF200介绍 电压:3.4-5.5V工作频率:418~455MHz发…...

计算机网络:运输层 —— TCP 协议概述与 TCP 报文段首部格式
文章目录 基本概念主要特点和功能TCP报文段的首部格式字段标志位扩展首部 传输控制协议(Transmission Control Protocol,TCP)协议是互联网上最常用的传输层协议之一,它负责提供可靠的端到端数据传输服务。TCP 协议采用连接导向的通…...

python正则表达式和递归
一、正则表达式 1.基础匹配 学习目标:了解什么是正则表达式,掌握re模块的基础使用 就是一种规则的定义,通过规则去验证给定的目标是否符合定义的规则。 正则的三个基础方法 match match是匹配开头,开头有python就算匹配成功&a…...

JAVA后端生成图片滑块验证码 springboot+js完整案例
前言 现在大部分网部都是图片滑块验证码,这个得要与后端联动起来才是确保接口安全性 通过我们系统在发送手机短息时都会选进行滑块验证,但是我们要保证发送短息接口的全安,具体路思如下 那么这个滑块的必须是与后端交互才能保证安全性&…...

Spring Boot中的自动装配机制
文章目录 1. 什么是自动装配?2. 自动装配是如何工作的?3. 如何开启自动装配?4. 自动装配的注意事项5. 结语推荐阅读文章 在Spring Boot的世界里,自动装配(Auto-configuration)就像春风拂面,轻轻…...

Brave127编译指南 Windows篇:配置Git(四)
1. 概述 在Brave浏览器的开发过程中,Git作为核心版本控制工具扮演着不可或缺的角色。作为当今最广泛使用的分布式版本控制系统,Git为开发者提供了强大的源码管理能力。通过Git,您可以轻松追踪代码变更、管理不同版本,并与其他开发…...

mysql数据库(五)多表查询
多表查询 文章目录 多表查询一、链表查询1.1交叉连接1.2 内连接1.3 左连接1.4 右连接1.5 全连接1.6 例子 二、子查询2.1 in与not in2.2 any/some2.3 all2.4 比较运算符2.5 exists 三、例子 查询中使用的表如下所示 ------------ | id | name | ------------ | 1 | IT | …...

【go从零单排】JSON序列化和反序列化
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,处理 JSON 数据主要依赖于 encoding/json 包。这个包提…...

海外携程机票token 1001分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…...

【算法】——二分查找合集
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:二分查找工具 1:最基础模版 2:mid落点问题 一:最…...

社会工程骗局席卷金融机构
2024 年北美金融机构收到的社交工程诈骗报告数量比一年前增加了 10 倍。数据显示,诈骗现在占所有数字银行欺诈的 23%。 深度伪造和 GenAI 诈骗的危险日益增加 BioCatch 在其 2024 年北美数字银行欺诈趋势报告中公布了这些发现,该报告还详细说明了报告的…...