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 ...
随机推荐
- SCUT - 153 - 小马哥和他的山脉 - 线段树
https://scut.online/p/153 其实不需要用线段树,只关心相邻元素的差,像神仙那样用差分就可以O1维护的. 但是我偏要用. 交之前写的那个,注意没有st本身的线段树只有lazy标记 ...
- 07-Log日志
# 1. 日志相关概念 - 日志的级别(level) - 不同的用户关注不同的程序信息 - DEBUG - INFO - NOTICE - WARNING - ERROR - CRITICAL - A ...
- JavaScript基础8——弹窗案例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Spark集成Kafka实时流计算Java案例
package com.test; import java.util.*; import org.apache.spark.SparkConf; import org.apache.spark.Tas ...
- ReactiveObjC(RAC)的使用汇总
RAC 指的就是 RactiveCocoa ,是 Github 的一个开源框架,能够帮我们提供大量方便的事件处理方案,让我们更简单粗暴地去处理事件,现在分为 ReactiveObjC 和 Reacti ...
- hr员工数据分析(实战)
hr员工数据分析项目实战 (数据已脱敏) 背景说明 某公司最近公司发生多起重要员工意外离职.部分员工工作缺乏积极性等问题,受hr部门委托,开展数据分析工作. 经与hr部门沟通,确定以下需求: 制定数据 ...
- Python在windows下编译成exe文件
1. pip install pyinstaller 2. 在Terminal下输入:“pyinstaller -F -w *.py” 就可以生成exe.生成的文件放在同目录dist下. -F(注意 ...
- error: must use ‘class’ tag to refer to type ‘XXX’ in this scope
开发环境: Qt Creator 4.8.2 在写程序的时候,遇到了编译器报错 error: must use 'class' tag to refer to type 'XXX' in this s ...
- php函数漏洞
1.ereg — 正则表达式匹配 此函数遇 %00 截断. <?php $a = $_GET['pwd']; var_dump(ereg ("^[0-9]+$", $a)); ...
- pspice建立仿真模型元件库
摘自:http://royroyyy.blog.163.com/blog/static/1376506172011026102216175/ PSpice9.2电子元器件模型--由网页下载的model ...