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 ...
随机推荐
- Entity Framework 6.0 Tutorials(1):Introduction
以下系统文章为EF6.0知识的介绍,本章是第一篇 原文地址:http://www.entityframeworktutorial.net/entityframework6/introduction.a ...
- Entity Framework Tutorial Basics(41):Multiple Diagrams
Multiple Diagrams in Entity Framework 5.0 Visual Studio 2012 provides a facility to split the design ...
- Python基础入门-IF语句
今天给大家分享一下Python中的IF语句的使用场景以及注意事项.主要内容如下: 1.python中的真假 2.Python操作符 3.if语句实例和嵌套实例 4.if语句中的if嵌套实例 5.and ...
- 编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for
建议18:foreach不能代替for 上一个建议中提到了foreach的两个优点:语法更简单,默认调用Dispose方法,所有我们强烈建议在实际的代码编写中更多的使用foreach.但是,该建议也有 ...
- Hibernate不能建表的问题
项目使用hibernate进行正向工程建立表,各项配置都正确,但就是不能生成对应的表,这就纳闷了!! 类: public class Market { private Long id; private ...
- 关于VBS的一个怪现象
今天一个同学让我帮忙写一个程序,要求是: 输入一个n,返回从0到n中任意个数的组合,返回取异或结果为0的组合.来看VBS代码 n = p = "" ^n - s = s = s ) ...
- Lucene的基本概念----转载yufenfei的文章
Lucene的基本概念 Lucene是什么? Lucene是一款高性能.可扩展的信息检索工具库.信息检索是指文档搜索.文档内信息搜索或者文档相关的元数据搜索等操作. 信息检索流程如下: 1. 将即将检 ...
- jquery $.each()循环退出
$.each()循环跳出,应该用return 来返回 在each代码块内不能使用break和continue,要实现break和continue的功能的话,要使用其它的方式:break----用ret ...
- sysbase 笔记
Alter 在已有数据的表中新增一个字段: ALTER table ciecdb.ciec.eci_mansmfile ADD num int default 0;
- [SinGuLaRiTy] 高级搜索算法
[SinGuLaRiTy-1039] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 迭代加深搜索(ID) 迭代加深搜索,实质上就是限定下界的 ...