Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt。而在下一个时间节点t+1,ht与下一时刻的输入xt+1将线性组合后,pass through一个activation function,如tanh,产生状态ht+1.

LSTM Unit解决了Naive RNN上Vanishing Gradient 和 Exploding Gradient的问题。如下图所示,首先可以看到1在time dimension上,最上方类似传送带的结构,是cell state。我们可以理解为memory,然后在其下方分别有三个gate,是foget gate, input gate and output gate.

Cell State:即上图中最上方的传送带结构,是在时间维度上传递所谓的Cell State,即长期记忆。在Jurgen Schmidhuber的论文"Recurrent Nets that Time and Count"中,称该结构为Constant Error Carrousel(CEC)。可以把CEC理解为《Inside Out》中的memory library,存储着开心、愤怒、悲伤和恐惧的记忆。

疑问:Library是静止的,在传送带上传递个啥?回答:其实作为人脑记忆库而言,看似并没有被放在一个传送带上做类似上图的工作,但实际上,当人体静止不动的时候,我们也被放在时间的车轮上滚滚向前。所以我们如果从此刻开始,记忆的图书馆里,不出、不进,安心的做一个植物人,那么在LSTM的结构中,仅仅保留最上方的那条传输带就可以了.

也即:
C(t)=C(t-1)
Input Gate: 但既然我们在日复一日的工作、生活并产生记忆,那么就必然涉及到新记忆的存储。存还是不存?存在哪里?这个记忆球是否真的重要?此时Input Gate就发挥作用了。对于记忆Library而言,该Gate是一个审核单元,很多不需要的记忆球即刻就被丢弃了,保护了记忆库不被干扰,而对于需要存储的记忆,Input Gate会分配权重。像一家人一起打冰球的这种记忆单元,一定是非常非常重要的,在电影中,它可是Family Island的组成部分哦。

Forget Gate: 为了保证library不被爆仓,当新的记忆单元需要存储时,就会有工作人员,在电影中叫做Fogetter,在LSTM中叫做Forget Gate,来清扫这些没用的记忆球并丢弃。

Output Gate: 在输出部分,虽然我们有很多很多很多的记忆球,但在某一时刻并不需要把所有东西都输出出来。拿出该拿出的就是刚刚好,否则对于输出层而言,也是一种干扰。所以,在输出ht的时候,output gate会从记忆库中选择需要的记忆球,以合适的方式进行输出。像极了inside out中,headquarter利用传输管道,提取记忆球并进行放映的步骤。

Peephole: 最后一个问题是,到底谁来控制这些Gate? 在最初版本的LSTM中,Gates的状态是由当前时刻的输入xt和上一时刻的输出ht-1线性组合后pass through一个sigmoid function来控制的。而目前新版的LSTM则加入了Peephole,即长时记忆单元的值,用当前时刻的输入、前一时刻的输出、前一时刻的长时记忆,三者线性组合再做sigmoid压缩来决定,即:
g = σ(W*xt+V*ht-1+U*ct-1)
这样的设计其实也符合了人脑记忆的工作模式:通过当前的事件,刚刚发生的事情,以及过去的记忆,来共同决定下一步的动作。
当然,和Inside Out电影不同的是,目前并没有情绪或心理学的应用在LSTM中,不过个人倒着实对于Sentiment Analysis有些兴趣,不如今后再来进一步讨论。
Recurrent Neural Network(3):LSTM Basics and 《Inside Out》的更多相关文章
- Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM
yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...
- Recurrent Neural Network(循环神经网络)
Reference: Alex Graves的[Supervised Sequence Labelling with RecurrentNeural Networks] Alex是RNN最著名变种 ...
- 循环神经网络(Recurrent Neural Network,RNN)
为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...
- Recurrent Neural Network[survey]
0.引言 我们发现传统的(如前向网络等)非循环的NN都是假设样本之间无依赖关系(至少时间和顺序上是无依赖关系),而许多学习任务却都涉及到处理序列数据,如image captioning,speech ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- 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[Content]
下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...
- 【NLP】Recurrent Neural Network and Language Models
0. Overview What is language models? A time series prediction problem. It assigns a probility to a s ...
随机推荐
- vue数据响应式的一些注意点
有关对象属性值不触发视图更新的情况: Vue 不能检测到对象属性的添加或删除,由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 ...
- JVM虚拟机基础知识
1. Java的发展 Java之父:詹姆斯·高斯林 2. Java的技术体系 Java 程序设计语言 JVM class文件格式 编译器 Java API 第三方Java类库 三个版本: Java S ...
- python时间测量
使用自定义装饰器测量时间 def test_time(func): def inner(*args, **kw): t1 = datetime.datetime.now() print('开始时间:' ...
- 线程工具类 - CyclicBarrier(循环栅栏)
CyclicBarrier官方文档 一.原理 CyclicBarrier是另外一种多线程并发控制实用工具.它和CountDownLatch非常类似,它也可以实现线程的计数等待,但它的功能比CountD ...
- django之子应用中开发视图函数
一:修改视图函数 报错:ImportError: No module named 'django' 原因是:pycharm中的解释器未选择虚拟环境里面的python3 from django.shor ...
- [洛谷P4172] WC2006 水管局长
问题描述 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水 ...
- python基本数据预处理语法函数(1)
numpy包: ####数组###########from numpy import * shape #获取维度 size #获取长度 arange(0,5,1) #生成数组函数,从0到5以1为间隔 ...
- Dubbo学习-4-dubbo简单案例-2-服务提供者和消费者配置
在上一篇帖子的基础上,开始使用dubbo来实现RPC调用: 根据dubbo的架构图可知,需要做以下几件事情: 1.将服务提供者注册到注册中心(暴露服务) (1)引入dubbo依赖, 这里依赖2.6.2 ...
- MySql 的类型和Java的类型
参考:https://www.cnblogs.com/jerrylz/p/5814460.html 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 ...
- R语言预测实战(第一章)
本例使用forecast包中自带的数据集wineind,它表示从1980年1月到1994年8月, 由葡萄酒生产商销售的容量不到1升的澳大利亚酒的总量.数据示意如下: #观察曲线簇 len=1993-1 ...