RNN(recurrent neural network)学习笔记
参考:https://www.jianshu.com/p/9dc9f41f0b29 以及《白话深度学习与TensorFlow》
与前馈神经网络、卷积神经网络等不同之处在于,RNN具有一定的记忆暂存功能,模拟了大脑的记忆性。具体来说,就是把之前的输入产生的影响量化后与当前输入一起传递到网络中训练。因此,RNN可以有效解决上下文相关场景下的问题,如自然语言处理等等。
RNN示意图及时间维度上的展开图如下:

其中,Xi为当前输入,hi为A模块对Xi处理得到的输出。对于一个输入序列X来说,某一个Xi的值可能会影响到之后的时间或空间上的输出hj,训练过程就是要学习影响的量化关系。传统的RNN训练过程的损失函数采用BPTT算法得到,但是如果有多个输入时,那么就需要求一系列的导数并连乘起来,显然这种损失函数既加大了运算复杂度,又会引发梯度消失或梯度爆炸问题。
因此,传统RNN理论上可以实现,但是训练效果很不理想。研究人员又提出了LSTM算法来进行RNN的训练。
LSTM算法即长短期记忆网络(long short-term memory),是对标准RNN的一种改进,该算法引入了忘记门(forget gate)机制,有效规避了传统RNN的梯度爆炸和梯度消失问题。
单层的LSTM拓扑结构如下图所示:

下面对LSTM单元进行分析:
(1)图例说明

(2)LSTM

LSTM单元就是这样连接的效果,一个一个首尾相接,同一层的会把前面单元的输出作为后面单元的输入;前一层的输出会作为后一层的输入。下面是对LSTM单元的各部分剖析。

首先,从左到右会有一个向量传输,该过程有两个交互过程,一个是左侧的乘号,另一个是右侧的加号,加号是普通的向量线性叠加,乘号则是表明Ct-1被一个乘法器乘以一个系数。

乘法器的系数来源于上图的结构,左侧的ht-1和下面输入的xt经过连接操作,然后通过线性单元和一个Sigmoid函数后生成一个0~1之间的数字作为系数输出。这个部分就是一个忘记门(forget gate),1 表示“完全保留”,0 表示“完全舍弃”。这一部分是决定丢弃什么信息。

下一步则是确定要保留什么新信息,如上图。该结构由两个小的神经网络层组成,一个是Sigmoid函数,称为“输入门”层,决定要更新什么信息,然后一个 tanh 层创建一个新的候选值向量会被加入到状态中,其中tanh函数可以把一个值映射到-1~1之间。

之后,确定当前单元状态Ct,也就是将Ct-1更新为Ct。如上图,把旧状态与 ft 相乘,丢弃掉我们确定需要丢弃的信息。接着加上部分新信息。

最后,确定输出什么值(ht)。如上图所示,首先,我们运行一个 Sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态Ct通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 Sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
总的来说,LSTM通过Sigmoid函数得到0~1之间的值来控制忘记程度,通过tanh函数来生成新的候选结果,将新的候选结果与忘记程度做乘法来实现部分信息的丢弃/保留。每个LSTM单元的状态都是由一部分上一单元的状态和一部分候选值(由当前单元输入和上一单元输出连接操作后进行tanh映射生成)线性叠加而来,而每个LSTM单元的输出则是该单元的部分状态。
RNN(recurrent neural network)学习笔记的更多相关文章
- 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...
- 深度学习课程笔记(十五)Recurrent Neural Network
深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Recurrent Neural Network系列3--理解RNN的BPTT算法和梯度消失
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 这是RNN教程的第三部分. 在前面的教程中,我们从头实现了一个循环 ...
- 循环神经网络(Recurrent Neural Network,RNN)
为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...
- 论文笔记:ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks
ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks2018-03-05 11:13:05 ...
- Recurrent Neural Network Language Modeling Toolkit代码学习
Recurrent Neural Network Language Modeling Toolkit 工具使用点击打开链接 本博客地址:http://blog.csdn.net/wangxingin ...
- Recurrent neural network (RNN) - Pytorch版
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...
- 4.5 RNN循环神经网络(recurrent neural network)
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1 RNN循环神经网络 ...
- Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM
yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...
随机推荐
- JSP内置对象与servlet对应关系
隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...
- Requests接口测试(三)
一.定制请求头 我们先来看一下,关于请求头的定制演示,相信了解http协议的小伙伴应该对请求头部headers请求头部并不陌生,那么作为实际工作中的我们,如果想自定义一些请求头的信息,我们应该怎么办呢 ...
- Java WEB中的HttpServletResponse数据传递
1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...
- 使用Adobe Illustrator + ArcGIS绘制地图 | Map Design Using ArcGIS + Adobe Illustrator
国内GIS/Cartography同行大部分使用CorelDraw绘制地图.相比之下,国外同行则更多使用Adobe Illustrator绘制地图.CorelDraw和Illustrator两个软件均 ...
- RecyclerView添加两种布局
简介: 本篇博客主要介绍如何在RecyclerView中添加两种布局 思路:主要重写Recyclerview.Adapter中的一些方法 1.public int getItemViewType(in ...
- [.net 多线程]Barrier
当需要[一组任务]并行地运行一连串的阶段,但是每一个阶段都要等待所有他任务完成前一阶段之后才能开始,可以通过Barrier实例来同步这一类协同工作.Barrier初始化后,将等待特定数量的信号到来,这 ...
- Vue axios发送Http请求
axios 1.cnpm install axios --save 2.在vue文件中引入,import Axios from 'axios' 3.使用,Axios.get(url).then((re ...
- 团队内的沟通方式:网络 OR 当面
4月1日,我和老王稍微聊了聊关于互联网的工作方式,团队的成员不在一个地方,通过远程互联网的方式进行沟通是不是OK.现在确实有很多公司是有多地的分公司,子公司,不同的团队在不同的办公室中,甚至一个大团队 ...
- php代码审计6审计xss漏洞
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的html代码,从而盗取用户资料,利用用户身份进行某种动作或者对 ...
- servlet 核心技术
servlet 核心技术 servlet 生命周期 在 servlet 生命周期中,servlet 容器完成加载 servlet 类和实例化一个 servlet 实例,并通过3个方法来完成生命周期中的 ...