一、为什么有BP神经网络,CNN,还要有RNN?
答:(1)神经网络包括CNN,输入和输出都是相互独立的。但有些任务,后续的输出与之前的内容是相关的。
如:“我是中国人,则我的母语是_?”
(2)RNN引入了”记忆”的概念,循环是指它的每个元素都执行相同的任务,但是输出依赖于输入和记忆
二、RNN的结构
从左边的图可以看出来,X是输入,O是输出,W执行的是循环的操作,循环的更新。我们可以按照时间序列把它展开成右边的图,其中,X(t)是时间t处的输入,S(t)是时间t处的“记忆”,S(t)=f(UX(t)+WS(t-1)),f可以是tanh等等**函数,O(t)是时间t的输出,比如是预测下个词的话,可能是softmax输出的属于每个候选词的概率。
关于RNN的结构再整理一些细节问题:
可以把隐状态S(t)视作“记忆体”,捕捉了之前时间点上的信息。
输出的O(t)由当前时间及之前所有的“记忆”共同计算得到。
实际应用中,S(t)并不能捕捉和保留之前所有的信息。
RNN整个神经网络都共享一组参数(U,V,W),极大减小了需要训练和预估的参数量
右图中的O(t)在有些任务下是不存在的,比如文本情感分析,其实只需要最后的output结果就行。
三、不同类型的RNN
(1)双向RNN
有些情况下,当前的输出不只依赖于之前的序列元素,还可能依赖之后的序列元素。比如从一段话踢掉部分词,让你补全。
最简单直观的理解就是2个RNN叠加。
(2)深层双向RNN
深层双向RNN和双向RNN比较类似,区别只是每一步/每个时间点我们设定多层结构。实际应用的时候,这种方式可以让我们的神经网络有更大的容量(但这也意味着我们需要更多的训练数据)
四、LSTM(long short-term memory)长短期记忆网络
虽然上面的RNN解决了对之前信息保存的问题。
但是它存在长期依赖问题:
看电影的时候,某些情节的推断需要依赖很久以前的一些细节。很多其他的任务也一样。
很可惜随着时间间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。
也就是说,记忆容量有限,一本书从头到尾一字不漏的去记,肯定离得越远的东西忘得越多。
所以解决的办法就是LSTM,哈哈,这个引入好生涩,好尴尬啊。。。
把上面的RNN的记忆细胞用下图表示出来:
而LSTM的记忆细胞结构变得稍显复杂了些。
是不是有点看不懂呢,别着急我们下面慢慢解释。
LSTM关键在于“细胞状态”(记忆细胞),可以理解为之前的S。。。
细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
那么LSTM该怎么去控制”细胞状态”呢?
通过“门”让信息选择性通过,来去除或者增加信息到细胞状态。
包含一个sigmoid神经网络层 和 一个pointwise乘法操作
Sigmoid 层输出0到1之间的概率值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”
重点中的重点来了(加粗一下表示重要) 下面要介绍LSTM的几个关键”门”操作
第1步:决定从“细胞状态”中丢弃什么信息 => “忘记门”
比如完形填空中填“他”或者“她”的问题,细胞状态可能包含当前主语的类别,当我们看到新的代词,我们希望忘记旧的
代词。
第2步:决定放什么新信息到“细胞状态”中
(1).Sigmoid层决定什么值需要更新
(2).Tanh层创建一个新的候选值向量
(3).上述2步是为状态更新做准备
第3步:更新“细胞状态”
1.更新
2.把旧状态与
3.加上
第4步:基于“细胞状态”得到输出
1.首先运行一个sigmoid 层来确定细胞状态的哪个部分将输出
2.接着用tanh处理细胞状态(得到一个在-1到1之间的值),再将它和sigmoid门的输出相乘,输出我们确定输出的那部分。
3.比如我们可能需要单复数信息来确定输出“他”还是“他们”
五、LSTM的变体
变种1:
增加”peephole connection”。让门层 也会接受细胞状态的输入。
变种2:之前是分开确定需要忘记和添加的信息,这里是一同做出决定
变种3:Gated Recurrent Unit (GRU),2014年提出
1.将忘记门和输入门合成了一个单一的更新门
2.同样还混合了细胞状态和隐藏状态,和其他一些改动。
3.比标准LSTM简单。
=====================================================================
学习过程中一些新的总结(补充):
1.为什么循环神经网络可以往前看任意多个输入值?
由上面RNN的展开结构图可得:
(1)记忆
(2)输出
下面反复把(2)代入到(1)得:
从上面可以看出
2.应用公式详解双向RNN
下面的公式推导可能会用到下图:
从上图可以看出,双向卷积神经网络的隐藏层要保存两个值,一个
现在,我们已经可以看出一般的规律:正向计算时,隐藏层的值
输出
正向记忆
反向记忆
从上面三个公式我们可以看到,正向计算和反向计算不共享权重,也就是说U和U’、W和W’、V和V’都是不同的权重矩阵。
3.深度循环神经网络
前面我们介绍的循环神经网络只有一个隐藏层,我们当然也可以堆叠两个以上的隐藏层,这样就得到了深度循环神经网络。如下图所示:
我们把第i个隐藏层的值表示为
…………
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络(RNN)与LSTM - Python技术站