Unstanding LSTM
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的更多相关文章
- Long Short-Term Memory (LSTM)公式简介
Long short-term memory: make that short-term memory last for a long time. Paper Reference: A Critica ...
- Theano:LSTM源码解析
最难读的Theano代码 这份LSTM代码的作者,感觉和前面Tutorial代码作者不是同一个人.对于Theano.Python的手法使用得非常娴熟. 尤其是在两重并行设计上: ①LSTM各个门之间并 ...
- (转)LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION
LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION Wed 21st Dec 2016 Neural Networks these days are th ...
- LSTM 分类器笔记及Theano实现
相关讨论 http://tieba.baidu.com/p/3960350008 基于教程http://deeplearning.net/tutorial/lstm.html LSTM基本原理http ...
- Long-Short Memory Network(LSTM长短期记忆网络)
自剪枝神经网络 Simple RNN从理论上来看,具有全局记忆能力,因为T时刻,递归隐层一定记录着时序为1的状态 但由于Gradient Vanish问题,T时刻向前反向传播的Gradient在T-1 ...
- Python中利用LSTM模型进行时间序列预测分析
时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...
- lstm
http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 这里介绍lstm写的很不错,尤其是按照不同的part进行解析,感觉很好,很清晰.
- 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 ...
- rnn lstm
资料收集:https://github.com/kjw0612/awesome-rnn 代码+例子+物理意义:https://iamtrask.github.io/2015/11/15/anyone- ...
随机推荐
- GC详解及Minor GC和Full GC触发条件
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
- C# DocumentCompleted事件多次条用解决方案
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { ...
- SpringBoot + MySQL + MyBatis 整合 Redis 实现缓存操作
本地安装 Redis Redis 安装:https://www.cnblogs.com/oukele/p/11373052.html 项目结构: SpringBootRedis 工程项目结构如下: ...
- C# Transaction 事务处理
class //student [Serializable] public class Student { public string FirstName { get; set; } public s ...
- 自制tomcat镜像
1.编写dockerfile FROM centos MAINTAINER raygift@qq.com # 安装vim RUN yum -y install vim net-tools ENV BA ...
- Drainage Ditches (HDU - 1532)(最大流)
HDU - 1532 题意:有m个点,n条管道,问从1到m最大能够同时通过的水量是多少? 题解:最大流模板题. #include <iostream> #include <algor ...
- Java操作文件那点事
刚开始学Java时候,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己结合API来整理一下,有错的话请指正,也希 ...
- c 判断数字是否有限
/* isfinite example */ #include <stdio.h> /* printf */ #include <math.h> /* isfinite, sq ...
- SpringMVC--DispatcherServlet
DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spri ...
- awk、grep、sed
awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...