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 ...
随机推荐
- win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)
目录 话题 (191) 笔记 (137) 资料区 (2) 评价 (33) 介绍 讨论区 话题 win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据( ...
- Math对象(min()-max()-ceil()-floor()-round()和abs())
1.Math.min() 功能:求一组数的最小值,返回值:Number 如果里面有非数字则返回NaN 2.Math.max() 功能:求一组数的最大值,返回值:Number 3.Math.ceil() ...
- websocket无法注入bean问题解决方案
websocket服务端往往需要和服务层打交道,因此需要将服务层的一些bean注入到websocket实现类中使用,但是呢,websocket实现类虽然顶部加上了@Component注解,依然无法通过 ...
- python 安装opencv及问题解决
正常安装模式 pip install opencv-python==3.4.5.20 pip install opencv-contrib-python==3.4.5.20 -i http://pyp ...
- 在子组件中触发事件,传值给父组件-vue
1.通过$emit触发事件 在子组件<x-test>中触发事件: <button @click="toSearchProduct()">搜索</but ...
- Java中最基本的集合接口:初识Collection
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 一些 Collection允许相同的 ...
- 在 CentOS 上部署 GitLab (自托管的Git项目仓库)
参考资料https://github.com/mattias-ohlsson/gitlab-installer/blob/master/gitlab-install-el6.sh 环境准备OS: Ce ...
- python 日期封装
import time import datetime import locale class TimeUtil: def __init__(self, curtime=None): self.cur ...
- vue服务器端渲染指南研究
什么是服务器端渲染(SSR)? Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲染为服务器端的 HT ...
- [luogu]P1133 教主的花园[DP]
[luogu]P1133 教主的花园 ——!x^n+y^n=z^n 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会 ...