1.RNNs

  我们可以把RNNs看成一个普通网络做多次复制后叠加在一起组合起来,每一个网络都会把输出传递到下一个网络中。

  把RNNs按时间步上展开,就得到了下图;

  

  从RNNs链状结构可以容易理解到他是和序列信息相关的。

2.长时期依赖存在的问题

  随着相关信息和预测信息的间隔增大,RNNs很难把他们关联起来了。

  但是,LSTMs能解决这个问题

3. LSTM网络

  Long Short Term Memory networks(长短期记忆网络)通常叫为LSTMS。LSTMs被设计用于避免前面提到的长时期依赖,他们的本质就是能够记住很长时期的信息。

  RNNs都是由完全相同的结构复制而成的,在普通的RNNs中,这个模块非常简单,比如仅是单一的tanh层。

  

  LSTMs也有类似的结构,不过重复模块部分不是一个简单的tanh层,而是4个特殊层。

   

  先定义用到的符号:

  

3.1 LSTMs的核心思想

  LSTMs最关键地方在于cell,即绿色部分的状态和结构图上横穿的水平线

  

  cell状态像是一条传送带,向量从cell上传过,只做了少量的线性运算,信息很容易穿过cell而不做改变(实现了长时期的记忆保留)

  cell state 好比是一个记忆器,不断往cell输入数据,他会不断变化来记忆之前输入的信息。

  可以看到,Ct-1到Ct经过两步,第一步是一个point wise的乘法操作,用来忘记不再需要的记忆,第二步是point wise的加操作,把Xt中有用的信息加到记忆中。

  LSTMs通过门(gates)的结构来实现增加或者删除信息。

  门可以实现选择性地让信息通过,通过一个sigmod神经层和一个逐点相乘的操作来实现。

  

  sigmod层输出的值为0到1,表示对应信息应该被通过的权重,0表示不让通过,1表示让所有信息通过。

  每个LSTM由3个门结构,来实现保护和控制cell状态,分别是遗忘门forget gate layer、传入门input gate layer、输出门output gate layer。

3.2逐步理解LSTM

  3.2.1遗忘门

    LSTM第一步是要决定丢弃哪些信息,这通过一个叫做forget gate layer的sigmod层实现。

    

  这里出现了ht-1,ht-1是输出,也是来自Ct-1,不过多了一层计算,可以理解为基于Ct-1给出的预测

  根据图上右边的公式,总的参数个数为s*(s+Xt的位数),可见Wf的规模是和S的大小直接相关的,s越大,虽然保存的信息越多,但是模型的参数规模也会按照平方数量上升。

  一个根据所有上下文信息来预测下一个词的语言模型,每个cell状态都应该保存当前主语的性别(保留信息),接下来才能正确使用代词,当我们又开始描述一个新主语的时候,就用改把上文中的主语性别给忘了才对(忘记信息)

  3.2.2传入门

  LSTM下一步是要决定哪些新信息要加入到cell 状态中来。包括两个部分,1.把Xt中的信息转换为Ct-1一样长度的向量,这个过程就是带波浪线Ct所做的事,第二事对带波浪线的Ct进行一个信息筛选,筛选的功能是通过it和带波浪线的Ct的相乘来实现的,这和上面的ft非常相似,ft表示forget,it表示input,一个是对原有信息进行筛选,一个是对新的信息进行筛选。

  

  在我们的语言模型中,我门把新的主语的性别信息加入cell状态中,替换老的状态信息。

  有了上述结构,就能够更新cell状态了Ct-1 to  Ct 即把两部分筛选的信息合并起来。

  3.2.3输出门

  最后我们要来决定输出什么值,这个输出值是依赖于cell的状态Ct,还要经过一个过滤处理。

  首先,我门使用一个sigmoid层决定Ct中哪部分信息被输出,然后把Ct通过一个tanh层(把数值都归到-1到1),把tanh层的输出和sigmoid层计算出来的权重相乘,得到最后的输出结果。

  在语言模型中,模型刚刚接触了一个代词,接下来可能要输出一个动词,这个输出可能和代词的信息息息相关了,比如动词应该采用单数形式还是复数形式,所以我们要把刚学到的和代词相关的信息加入到cell状态中,才能进行正确的预测。

  

4.LSTM的变种

  4.1增加peephole connections 

    在所有门之前都与状态线相连,使得状态信息对门的输出值产生影响,但有一些论文只在部分门前添加。

    

  4.2耦合遗忘门和输入门

    

  将遗忘门和输入们耦合在一起,遗忘多少就更新多少新状态,没有遗忘就不用更新。

  4.3GRU

    将遗忘门和输入门统一为更新门,而且把h和c合并了。

    

5.为什么LSTM比RNN能解决长时期依赖?

  RNN是怎么修改Ht的?Ht = tanh(W Xt + U Ht-1),这是一个复合函数,符合函数求偏导是连乘,其中tanh是双曲正切,在X偏大或者偏小的时候导数接近为0,反向传播时,当链路比较长时,就没有梯度传回来矫正参数了。

  而LSTM不是复合函数,而是两个函数求和,f(x) +g(x)求偏导,得到两个偏导的和,就算有一个约等于0,也不会导致整体约等于0.

  LSTM最大的变化就是把RNN的连乘变成了求和,不会严重地出现梯度消失的问题。

    

  

Unstanding LSTM的更多相关文章

  1. Long Short-Term Memory (LSTM)公式简介

    Long short-term memory: make that short-term memory last for a long time. Paper Reference: A Critica ...

  2. Theano:LSTM源码解析

    最难读的Theano代码 这份LSTM代码的作者,感觉和前面Tutorial代码作者不是同一个人.对于Theano.Python的手法使用得非常娴熟. 尤其是在两重并行设计上: ①LSTM各个门之间并 ...

  3. (转)LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION

    LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION Wed 21st Dec 2016   Neural Networks these days are th ...

  4. LSTM 分类器笔记及Theano实现

    相关讨论 http://tieba.baidu.com/p/3960350008 基于教程http://deeplearning.net/tutorial/lstm.html LSTM基本原理http ...

  5. Long-Short Memory Network(LSTM长短期记忆网络)

    自剪枝神经网络 Simple RNN从理论上来看,具有全局记忆能力,因为T时刻,递归隐层一定记录着时序为1的状态 但由于Gradient Vanish问题,T时刻向前反向传播的Gradient在T-1 ...

  6. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  7. lstm

    http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 这里介绍lstm写的很不错,尤其是按照不同的part进行解析,感觉很好,很清晰.

  8. RNN and LSTM saliency Predection Scene Label

    http://handong1587.github.io/deep_learning/2015/10/09/rnn-and-lstm.html  //RNN and LSTM http://hando ...

  9. rnn lstm

    资料收集:https://github.com/kjw0612/awesome-rnn 代码+例子+物理意义:https://iamtrask.github.io/2015/11/15/anyone- ...

随机推荐

  1. ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available

    1) 端口错 client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress, ...

  2. 详解Python 切片语法

    Python的切片是特别常用的功能,主要用于对列表的元素取值.这篇文章主要介绍了详解Python 切片语法,需要的朋友可以参考下 Python的切片是特别常用的功能,主要用于对列表的元素取值.使用切片 ...

  3. http响应Last-Modified和ETag

    http响应Last-Modified和ETag [日期:2008-06-16] 来源:  作者: [字体:大 中 小] 基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一 ...

  4. 用python做数据分析4|pandas库介绍之DataFrame基本操作

    原文地址 怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构 ...

  5. 我想查看数据库名,输入命令:select name from v$database;为什么会说表和视图不存在

    你看一下你连接数据库的用户,需要有DBA权限才能看到这个表.

  6. 数据库学习之一--DBMS种类

    一.定义 数据库(DB):数据库是将大量数据保存尔来,通过计算机加工而成的可以进行高效访问的数据集合: 数据库管理系统(DBMS):是一种操纵和管理数据库信息的大型管理软件,用于建立,使用和维护数据库 ...

  7. CodeChef October Lunchtime 2019 Division 2

    HIT: Khaled in HIT 题目描述 Khaled 教练是 HIT(Hag Institute of Technology)一位名师.但是,他有一些困扰. 最近,Khaled 教练正在教一门 ...

  8. [Poj] Roads in the North

    http://poj.org/problem?id=2631 树的直径裸题 dfs/bfs均可 /* dfs */ #include <iostream> #include <cst ...

  9. ansible-cmdb 解析(ansible all -m setup )收集过来的信息并以html方式显示。

    首先安装 ansible-cmdb 直接pip install ansible-cmdb 安装 然后执行收集信息命令 ansible all -m setup >/tmp/out/ 修改下ans ...

  10. maven项目无法查看类库的源码

    一个Maven项目有两种类库,分别是JRE System Libaray和Maven Dependencies. JRE System Libaray 一般有两种方法指定. 1.由pom.xml中的m ...