循环神经网络RNN论文解读

2023-11-10

版权声明:本文为CSDN博主「了不起的赵队」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhaojc1995/article/details/80572098

 

论文名称:RECURRENT NEURAL NETWORK REGULARIZATION

论文地址:https://arxiv.org/pdf/1409.2329.pdf

 

 

1、RNN介绍

RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。从基础的神经网络中知道,神经网络包含输入层、隐层、输出层,通过激活函数控制输出,层与层之间通过权值连接。激活函数是事先确定好的,那么神经网络模型通过训练“学“到的东西就蕴含在“权值“中。这是一个标准的RNN结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。左侧是折叠起来的样子,右侧是展开的样子,左侧中h旁边的箭头代表此结构中的“循环“体现在隐层。图中O代表输出,y代表样本给出的确定值,L代表损失函数。

 

2、RNN特点:

(1)权值共享,图中的W全是相同的,U和V也一样。

(2)前面的输出会影响后面的输出,适合处理序列数据。

(3)损失也是随着序列的推荐而不断积累的。

 

3、rnn多种变体

(1)输入为序列,单个输出(如:分类)

(2)单输入,输出为序列

(3)多输入M,多输出N,且M=N

(4)多输入M,多输出N,且M不等于N(encoder-decoder模型:从名字就能看出,这个结构的原理是先编码后解码。左侧的RNN用来编码得到c,拿到c后再用右侧的RNN进行解码。得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。)

 

4、标准RNN前向传播

各个符号的含义:x是输入,h是隐层单元,o为输出,L为损失函数,y为训练集的标签。这些元素右上角带的t代表t时刻的状态,其中需要注意的是,隐藏单元h在t时刻的表现不仅由此刻的输入决定,还受t时刻之前时刻的影响。V、W、U是权值,同一类型的权连接权值相同。

对于t时刻,隐藏层的输出:

,ϕ()为激活函数,一般来说会选择tanh函数,b为偏置

t时刻的输出:

最终模型的预测输出为:

,其中σ为激活函数,通常RNN用于分类,故这里一般用softmax函数
 

5、RNN反向传播BPTT

BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,求各个参数的梯度就是此算法的核心。

再次拿出这个结构图观察,需要寻优的参数有三个,分别是U、V、W。与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前,那么我们就来先求解参数V的偏导数。

(1)参数V的偏导数:

这个式子看起来简单但是求解起来很容易出错,因为其中嵌套着激活函数函数,是复合函数的求道过程。

RNN的损失也是会随着时间累加的,所以不能只求t时刻的偏导。

(2)L对W的偏导数为(W和U的偏导的求解需要涉及到历史数据,偏导求起来相对复杂,假设是在第三个时刻 ):

L在t时刻对W偏导数的通式:

(3)L在第三个时刻对U的偏导数:

L在t时刻对U偏导数的通式:

 

6、梯度消失问题

前面说过激活函数是嵌套在里面的,如果我们把激活函数放进去,拿出中间累乘的那部分:

累乘会导致激活函数导数的累乘,进而会导致“梯度消失“和“梯度爆炸“现象的发生。

sigmoid函数和导数图:

tanh函数和导数图:

由上图可知:sigmoid函数的导数范围是(0,0.25],tach函数的导数范围是(0,1],他们的导数最大都不大于1,这样累乘会引起梯度消失问题。具体参见激活函数对比:https://blog.csdn.net/qq_32172681/article/details/98474079

解决“梯度消失“的方法主要有:
(1)选取更好的激活函数
(2)改变传播结构

对于(1),一般选用ReLU函数作为激活函数,ReLU函数的图像为:

ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了“梯度消失“的发生。

但是,如果左侧横为0的导数有可能导致把神经元学死,不过设置合适的步长(学习率)也可以有效避免这个问题的发生。

对于(2),提出了LSTM结构。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环神经网络RNN论文解读 的相关文章

  • 调用百度翻译接口c++api

    这是我之前录制的一个视频 里面有比较具体的讲解 哔哩哔哩自制的讲解视频 百度的接口api介绍网站 先贴个运行效果 界面没有做比较漂亮的优化 看起来比较丑哈哈哈哈啊 但是五脏俱全哦 贴个图吧 具体的实现思路此处不再赘述 源代码下载百度网盘链接
  • n的阶乘的位数

    输入N求N的阶乘的10进制表示的长度 例如6 720 长度为3 Input 输入N 1 lt N lt 10 6 Output 输出N的阶乘的长度 Sample Input 6 Sample Output 3 include

随机推荐

  • 如何使用 Selenium 实现自动化操作?

    目录 前言 一 关于Selenium 1 1 为什么选择它作为web自动化的测试工具 1 2 Selenium操作浏览器的原理 二 实现一个简单的自动化 2 1 使用自动化操作浏览器 2 2 Selenium常用的API 2 2 1 查找页
  • ffmpeg拆分合成音视频

    拆 ffmpeg i a mp4 an vcodec copy out mp4 ffmpeg i a mp4 vn acodec copy out amr 合 ffmpeg i out mp4 i out amr ok mp4
  • C++基础知识(二十五)--- STL案例之演讲比赛

    问题 24个人 分4组 每组6人 三轮比赛 每轮淘汰一半 第三轮6人决出前三名 10个评委打分 选手最终得分是去掉最高最低取平均 思路 1 用 vector 存储编号 编号对应选手 2 用 map 保存选手信息 键值是编号 实值是选手 3
  • 如何将旧硬盘数据完美迁移到新硬盘

    1 创建一个PE启动盘 准备一个装有PE的U盘或者移动硬盘 可以到网上下载一个PE工具盘的ISO文件 然后用UltraISO打开ISO文件 点击启动菜单选择写入硬盘映像 写入方式USB HDD 写入完成之后 再点击 便捷启动 选择写入新的硬
  • python array保存为csv文件,并加载

    import numpy numpy savetxt train x csv train x delimiter train x csv numpy loadtxt open train x csv rb delimiter skiprow
  • win10远程桌面连接ubuntu20(RDP)

    此方法是基于RDP Remote Display Protocol 协议 1 安装xrdp sudo apt get install xrdp 2 开启rdp服务 systemctl start xrdp 3 使rdp开机自启 system
  • IDEA 如何自动导入(import)

    如果大家正在使用一个未曾导入 import 过的类 或者它的静态方法或者静态字段 IDEA 会给出对应的建议 只要按下 option 和回车就可以接受建议 但我觉得这样做仍然很麻烦 不够智能化 怎么办呢 打开 IDEA 的首选项 找到 Ed
  • H2数据库-快速指南

    H2数据库 简介 H2是开源的轻量级Java数据库 它可以嵌入Java应用程序中或以客户端 服务器模式运行 H2数据库主要可以配置为作为内存数据库运行 这意味着数据将不会持久存储在磁盘上 由于具有嵌入式数据库 因此它不用于生产开发 而主要用
  • 成为Qt开发大牛,从入门到精通,一步一步走完整个学习路线!

    简介 本文为 C QT 学习路线大纲 资料 文章底部 Qt 可以做什么 Qt 虽然经常被当做一个 GUI 库 用来开发图形界面应用程序 但这并不是 Qt 的全部 Qt 除了可以绘制漂亮的界面 包括控件 布局 交互 还包含很多其它功能 比如多
  • 盘点一下不到100行的给力代码

    作者 景略集智 https jizhi im blog post short and excellent code 只需10行Python代码 我们就能实现计算机视觉中目标检测 from imageai Detection import O
  • qt 创建第二个ui_QT多个ui文件使用

    在使用QT做应用程序的时候几乎都会用到比较多的对话框 下面内容讲解下如何使用多个ui文件进行设计 注 下面使用的是Ubuntu16 04下的QT5 首先先建立一个工程 编译后结果如下 上面只有一个按钮 现在我们新建一个ui 然后点击该按钮来
  • 直方图-绘制子图subplot imshow

    显示好几幅图片在一个窗口内 逗号可以省略 其实imshow这个函数前两篇博客中已经开始使用了 与matlab中的使用很相似 下面介绍一下 若要显示灰度图片 参数为 cam plt cm gray 若要显示彩色图片 opencv 读入的图片默
  • Docker CE 学习笔记2 : Docker 安装后的步骤

    目录 1 以非 root 用户管理 Docker 2 配置Docker 在系统启动时运行 3 使用不同的存储引擎 4 配置Docker守护进程侦听连接的位置 4 1 配置远程访问使用systemd单元文件 参考 https docs doc
  • .net core 连接Mysql

    1 安装依赖包 在这里插入图片描述 https img blog csdnimg cn 16e74e954c414688b26af8b9d92fd793 png x oss process image watermark type d3F5
  • python -range()

    range 函数 range 101 可以用来产生0到100范围的整数 需要注意的是取不到101 range 1 101 可以用来产生1到100范围的整数 相当于前面是闭区间后面是开区间 range 1 101 2 可以用来产生1到100的
  • 时间卷积网络TCN:CNN也可以处理时序数据并且比LSTM更好

    本文回顾了 Shaojie Bai J Zico Kolter 和 Vladlen Koltun 撰写的论文 An Empirical Evaluation of Generic Convolutional and Recurrent Ne
  • top命令详解

    Top命令查看的内容 第一行是任务队列信息 06 29 43 当前时间 up 4 12系统运行时间 2 users当前登录用户数 load average 0 00 0 00 0 00系统负载 即任务队列的平均长度 第二行 为进程信息 Ta
  • linux部署tomcat项目详细教程(安装linux到部署tomcat)

    近来想要研究下linux 所以就搭了个linux系统来配置服务器玩玩 这里分了个目录 如果已经安装好虚拟机或者linux系统的小伙伴可以直接跳过前面的安装介绍 直接看部署 文章目录 一 总步骤说明 二 安装虚拟机 三 创建linux系统 四
  • DQL基础查询

    一 基础查询 1 语法 select 查询列表 from 表名 select后面跟的查询列表 可以有多个部分组成 中间用逗号隔开 例如 select 字段1 字段2 表达式 from 表 2 特点 查询的结果集是一个虚拟表 3 执行顺序 f
  • 循环神经网络RNN论文解读

    版权声明 本文为CSDN博主 了不起的赵队 的原创文章 遵循CC 4 0 by sa版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net zhaojc1995 article details 80572