当前位置: 首页 > news >正文

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)

上一篇中讨论了一般性的原则,这里我们具体讨论通过时间反向传播(backpropagation through time,BPTT)的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。

出于简单的目的,我们以一个没有偏置参数的循环神经网络,其在隐藏层中的激活函数使用恒等函数(\phi \left ( x \right )=x)。

对于时间步t,单个样本的输入及其标签分别为\mathbf{x}_{t}\in \mathbb{R}^{d}y_{t}。计算隐状态\mathbf{h}_{t}\in \mathbb{R}^{h}和输出\mathbf{o}_{t}\in \mathbb{R}^{q}的公式为

\mathbf{h}_{t}=\mathbf{W}_{hx}\mathbf{x}_{t}+\mathbf{W}_{hh}\textbf{h}_{t-1}

\mathbf{o}_{t}=\mathbf{W}_{qh}\mathbf{h}_{t}

其中,权重参数为\mathbf{W}_{hx}\in \mathbb{R}^{h\times d}\mathbf{W}_{hh}\in \mathbb{R}^{h\times h}\mathbf{W}_{qh}\in \mathbb{R}^{q\times h}

目标函数为:

L=\frac{1}{T}\sum_{t=1}^{T}l\left ( y_{t} ,\mathbf{o}_{t}\right )

通常,训练这个模型需要对这些参数分别进行梯度计算:\partial L/\partial \textbf{W}_{hx}\partial L/\partial \textbf{W}_{hh}\partial L/\partial \textbf{W}_{qh}

\frac{\partial L}{\partial \textbf{o}_{t}}=\frac{\partial l\left ( \textbf{o}_{t},y_{t} \right )}{T\cdot \partial o_{t}}\in \mathbb{R}^{q}

\frac{\partial L}{\partial \mathbf{W}_{qh}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{o}_{t}}\textbf{h}_{t}^{\top }

\frac{\partial L}{\partial \mathbf{W}_{hx}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{h}_{t}}\textbf{x}_{t}^{\top }

\frac{\partial L}{\partial \mathbf{W}_{hh}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{h}_{t}}\textbf{h}_{t-1}^{\top }

其中:\frac{\partial L}{\partial \mathbf{h}_{t}}=\sum_{i=t}^{T}\left (\textbf{W} _{hh}^{\top } \right )^{T-i}\textbf{W}_{qh}^{\top }\frac{\partial L}{\partial \textbf{o}_{T+t-i}}

\frac{\partial L}{\partial \mathbf{h}_{t}}中可以看到,这个简单的线性例子已经展现出长序列模型的一些关键问题:

它陷入到了\textbf{W} _{hh}^{\top }的潜在的非常大的指数幂。在这个指数幂中,小于1的特征值将会消失(出现梯度消失),大于1的特征值将会发散(出现梯度爆炸)。

相关文章:

  • 使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程
  • selenium 报错
  • STM32G4x FLASH 读写(修改HAL库驱动)
  • Mac 生成Android签名证书 .keystore文件
  • 【PostgreSQL】从零开始:(二十一)数据类型-布尔类型
  • UE5 水材质注意要点
  • 前端ICON库
  • Linux shell编程学习笔记37:readarray命令和mapfile命令
  • 版本化数据库管理工具Flyway介绍和Spring Boot集成使用
  • python算法例22 下一个更大的数
  • 3842充电器电路图大全
  • 数据库编程大赛:一条SQL计算扑克牌24点
  • Hive-基础介绍
  • Golang 的内存管理
  • Bash 脚本学习
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Apache的基本使用
  • gulp 教程
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JAVA多线程机制解析-volatilesynchronized
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • ng6--错误信息小结(持续更新)
  • Rancher-k8s加速安装文档
  • SOFAMosn配置模型
  • 百度小程序遇到的问题
  • 机器学习 vs. 深度学习
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开发基于以太坊智能合约的DApp
  • 盘点那些不知名却常用的 Git 操作
  • 如何设计一个比特币钱包服务
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 正则与JS中的正则
  • 交换综合实验一
  • 如何正确理解,内页权重高于首页?
  • ​【已解决】npm install​卡主不动的情况
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #pragma once
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (06)金属布线——为半导体注入生命的连接
  • (3)llvm ir转换过程
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (定时器/计数器)中断系统(详解与使用)
  • (二)pulsar安装在独立的docker中,python测试
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据