深度学习——循环神经网络RNN,GRU,LSTM
循环神经网络RNN,GRU,LSTM
RNN是一类用于处理序列数据的神经网络,在深度学习方面,图像识别、语音识别主要运用卷积神经网络(CNN),而文字语言处理主要运用循环神经网络(RNN)。
语言模型
语言模型(language model)是自然语言处理的重要技术,可用于提升语音识别和机器翻译的性能。自然语言处理中最常见的数据是文本数据。
例如,在语音识别中,给定一段“厨房里食油用完了”的语音,有可能会输出“厨房里食油用完了”和“厨房里石油用完了”这两个读音完全一样的文本序列。如果语言模型判断出前者的概率大于后者的概率,我们就可以根据相同读音的语音输出“厨房里食油用完了”的文本序列。
假设一段长度为TT的文本中的词依次为w1,w2,…,wTw_1,w_2,…,w_Tw1,w2,…,wT那么在离散的时间序列中,wtw_twt可看作在时间步(time step)的输出或标签。给定一个长度为T的词的序列w1,w2,…,wTw_1,w_2,…,w_Tw1,w2,…,wT
语言模型将计算该序列的概率:
亦即词w1,w2,…,wTw_1,w_2,…,w_Tw1,w2,…,wT组合输出一个文本的概率
语言模型的计算
例如,假设序列w1,w2,…,wTw_1,w_2,…,w_Tw1,w2,…,wT中的每个次是一次生成的,则一段含有4个词的文本序列的概率为:
nnn元语法
当序列长度增加时,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。nnn元语法通过马尔可夫假设(虽然并不一定成立)简化了语言模型的计算。这里的马尔可夫假设是指一个词的出现只与前面nn个词相关,即nnn阶马尔可夫链(Markov chain of order nnn)。
如果基于n−1n−1n−1阶马尔可夫链,我们可以将语言模型改写为
什么是RNN
在RNN里面,每一次经过隐藏层输出值的时候,这个输出值会被存到memory里去(用蓝色方块表示memory)。
那下一次当有input时,这些隐藏层的输入不只是考虑input的x1,x2x_1,x_2x1,x2 ,还会考虑存到memory里的值。对它来说除了x1,x2xx_1,x_2xx1,x2x以外,这些存在memory里的值a1,a2a_1,a_2a1,a2 ,也会影响它的output的yyy。
RNN的架构
简单的单个隐藏层的RNN
深度循环神经网络
RNN的架构是可以自己设计的,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。
同多层感知机一样,隐藏层个数和隐藏单元个数都是超参数。此外,如果将隐藏状态的计算换成GRU或者LSTM的计算,我们可以得到深度GRU循环神经网络或深度LSTM循环神经网络。
LSTM
LSTM或GRU单元是近年来RNN成功背后的主要原因之一,特别是在自然语言处理(NLP)中的应用。
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
LSTM 中引入了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞(Memory Cell),从而记录额外的信息。
这个Long Short-term Memor是有三个gate。
当外界某个neural的output想要被写到memory cell里面的时候,必须通过一个input Gate,那这个input Gate要被打开的时候,你才能把值写到memory cell里面去,如果把这个关起来的话,就没有办法把值写进去。
输出的地方也有一个output Gate的执行也与input Gate的一样,打开的时候输出,关闭则反之。
第三个gate叫做forget Gate,forget Gate决定说:什么时候memory cell要把过去记得的东西忘掉。这个forget Gate什么时候会把存在memory的值忘掉,什么时候会把存在memory里面的值继续保留下来。
GRU
门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可以学习的门来控制信息的流动。
门控循环单元是LSTM单元的简化版本,能实现同样的性能,这也说明了为什么它能越来越流行
GRU的输入输出和普通的RNN是输入输出是一样的,上一隐藏状态的ht−1h^{t-1}ht−1和当前的xtx^txt作为input输入GRU,输出output yty^tyt和更新隐藏层状态
GRU的内部结构
双向循环神经网络
之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。
有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。
双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。BRNN有两个RNN上下叠加在一起组成的,输出由这两个RNN的状态共同决定。
我们可以分别计算正向隐藏状态和反向隐藏状态:
然后我们连结两个方向的隐藏状态得到HtH_tHt
- 点赞
- 收藏
- 分享
- 文章举报
- 王小草【深度学习】笔记第六弹--循环神经网络RNN和LSTM
- 深度学习_循环神经网络RNN与LSTM
- 深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现
- 深度学习——循环神经网络/递归神经网络(RNN)及其改进的长短时记忆网络(LSTM)
- 【深度学习】RNN(循环神经网络)之LSTM(长短时记忆)
- 深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
- 深度学习(Deep Learning)读书思考八:循环神经网络三(RNN应用)
- [深度学习]理解RNN, GRU, LSTM 网络
- 深度学习框架TensorFlow学习与应用(七)——循环神经网络(RNN)应用于MNIST数据集分类
- MXNet动手学深度学习笔记:循环神经网络RNN实现
- 深度学习:循环神经网络RNN
- 【深度学习】RNN(循环神经网络)
- July深度学习之RNN循环神经网络
- 循环神经网络教程4-用Python和Theano实现GRU/LSTM RNN, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano
- 深度学习-note-RNN(循环神经网络)
- (Unfinished)RNN-循环神经网络之LSTM和GRU-04介绍及推导
- 循环神经网络教程 第四部分 用Python 和 Theano实现GRU/LSTM RNN
- [置顶] 【深度学习】RNN循环神经网络Python简单实现
- tensorflow 学习笔记12 循环神经网络RNN LSTM结构实现MNIST手写识别