循环神经网络(RNN)原理以及实战

  • 一. RNN的网络结构及原理
  • 二. RNN的改进
    • 2.1.双向RNN
    • 2.2. 深层双向RNN
  • 五. Pyramidal RNN
  • 六.RNN的训练-BPTT
  • 七.RNN与CNN的结合应用:看图说话
  • 八.RNN项目练手

一. RNN的网络结构及原理

一般的神经网络应该有的结构如下图所示:


循环神经网络(RNN)原理以及实战_第1张图片
图一 神经网络结构

既然我们已经有了人工神经网络和卷积神经网络,为什么还要循环神经网络?
因为无论是卷积神经网络,还是人工神经网络,他们的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,比如猫和狗。 但现实世界中,很多元素都是相互连接的,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如股票随时间的变化;或者比如说当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个 序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个 序列

一句话:我昨天上学迟到了,老师批评了____。

这里填空,人应该都知道是填“我“。因为我们是根据上下文的内容推断出来的,但计算机要做到这一步就相当得难了。因此,就有了现在的循环神经网络(Recurrent Neural Network),它的本质是:像人一样拥有记忆的能力。因此,他的输出就依赖于当前的输入和记忆。

RNN网络引入定向循环,能够处理那些输入之间前后关联的问题。打破了传统神经网络结构层与层之间全连接,每层节点之间无连接的转态,不在是输入-隐层-输出的模式。
RNN的目的:处理序列数据
RNN的内容:一个序列当前的输出与前面的输入也有关系。
RNN的具体做法:网络会对前面的信息进行记忆,并应用于当前输出的计算中,即隐层之间的节点不再无连接,并且隐层的输入不仅包括输入层的输出,还包括上一时刻隐层的输出。
RNN的功能特点:1、隐层节点之间可以互连也可以自连2、网络共享权重U、V、W3、RNN网络中,每一步的输出不是必须的,每一步的输入也不是必须的。
RNN用途:语言模型和文本生成研究、机器翻译、语音识别、图像描述生成。
循环神经网络种类繁多,基本循环神经网络结构如下图,它由输入层、一个隐藏层和一个输出层组成,把序列按时间展开:


循环神经网络(RNN)原理以及实战_第2张图片
图二 循环神经网络结构

其中每个圆圈可以看作是一个单元,而且每个单元做的事情也是一样的,因此可以折叠呈左半图的样子。用一句话解释RNN,就是一个 单元结构重复使用

  • xt x t 是时间t处的输入 ;
  • st s t 是时间t处的“记忆”,St=f(UXt+WSt−1),f可以是tanh等 ;
  • ot o t 是时间t出的输出,比如是预测下个词的话,可能是softmax输出的属于每个候选词的概率

循环神经网络在t时刻接收到输入 xt x t 之后,隐藏层的值是 st s t ,输出值是 ot o t 。关键一点是, st s t 的值不仅仅取决于 xt x t ,还取决于 st1 s t − 1 。我们可以用下面的公式来表示循环神经网络的计算方法:
ot=g(Vst)(1) (式1) o t = g ( V s t )
st=f(Uxt+Wst1)(2) (式2) s t = f ( U x t + W s t − 1 )
式1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值作为这一次的输入的权重矩阵,f是激活函数。
循环层和全连接层的区别就是循环层多了一个权重矩阵 W。如果反复把式2带入到式1,我们将得到:

ot=g(Vst)=Vf(Uxt+Wst1)=Vf(Uxt+Wf(Uxt1+Wst2))=Vf(Uxt+Wf(Uxt1+Wf(Uxt2+Wst3)))=Vf(Uxt+Wf(Uxt1+Wf(Uxt2+Wf(Uxt3+Wst4))))(3)(4)(5)(6)(7) (3) o t = g ( V s t ) (4) = V f ( U x t + W s t − 1 ) (5) = V f ( U x t + W f ( U x t − 1 + W s t − 2 ) ) (6) = V f ( U x t + W f ( U x t − 1 + W f ( U x t − 2 + W s t − 3 ) ) ) (7) = V f ( U x t + W f ( U x t − 1 + W f ( U x t − 2 + W f ( U x t − 3 + W s t − 4 ) ) ) )

从上面可以看出,循环神经网络的输出值,是受前面历次输入值 xt x t xt1 x t − 1 xt2 x t − 2 xt3 x t − 3 、…影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。
RNN中的结构细节:

  1. 可以把 st s t 当作隐状态,捕捉了之前时间点上的信息。就像你去考研一样,考的时候记住了你能记住的所有信息。
  2. ot o t 是由当前时间以及之前所有的记忆得到的。就是你考研之后做的考试卷子,是用你的记忆得到的。
  3. 很可惜的是, st s t 并不能捕捉之前所有时间点的信息。就像你考研不能记住所有的英语单词一样。
  4. 和卷积神经网络一样,这里的网络中每个cell都共享了一组参数(U,V,W),这样就能极大的降低计算量了。
  5. ot o t 在很多情况下都是不存在的,因为很多任务,比如文本情感分析,都是只关注最后的output结果的。就像考研之后选择学校,学校不会管你到底怎么努力,怎么心酸的准备考研,而只关注你最后考了多少分。

RNN训练:采用BP误差反向传播算法、梯度下降算法。

二. RNN的改进

RNN网络的改进模型:SRN、BRNN、LSTM、GRU、Deep BRNN、ESN、CW-RNN。

2.1.双向RNN

2.2. 深层双向RNN

五. Pyramidal RNN

六.RNN的训练-BPTT

七.RNN与CNN的结合应用:看图说话

八.RNN项目练手

你可能感兴趣的:(深度学习,深度学习)