一. RNN的网络结构及原理
一般的神经网络应该有的结构如下图所示:
图一 神经网络结构
既然我们已经有了人工神经网络和卷积神经网络,为什么还要循环神经网络?
因为无论是卷积神经网络,还是人工神经网络,他们的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,比如猫和狗。 但现实世界中,很多元素都是相互连接的,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如股票随时间的变化;或者比如说当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个 序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个 序列。
一句话:我昨天上学迟到了,老师批评了____。
这里填空,人应该都知道是填“我“。因为我们是根据上下文的内容推断出来的,但计算机要做到这一步就相当得难了。因此,就有了现在的循环神经网络(Recurrent Neural Network),它的本质是:像人一样拥有记忆的能力。因此,他的输出就依赖于当前的输入和记忆。
RNN网络引入定向循环,能够处理那些输入之间前后关联的问题。打破了传统神经网络结构层与层之间全连接,每层节点之间无连接的转态,不在是输入-隐层-输出的模式。
RNN的目的:处理序列数据
RNN的内容:一个序列当前的输出与前面的输入也有关系。
RNN的具体做法:网络会对前面的信息进行记忆,并应用于当前输出的计算中,即隐层之间的节点不再无连接,并且隐层的输入不仅包括输入层的输出,还包括上一时刻隐层的输出。
RNN的功能特点:1、隐层节点之间可以互连也可以自连2、网络共享权重U、V、W3、RNN网络中,每一步的输出不是必须的,每一步的输入也不是必须的。
RNN用途:语言模型和文本生成研究、机器翻译、语音识别、图像描述生成。
循环神经网络种类繁多,基本循环神经网络结构如下图,它由输入层、一个隐藏层和一个输出层组成,把序列按时间展开:
图二 循环神经网络结构
其中每个圆圈可以看作是一个单元,而且每个单元做的事情也是一样的,因此可以折叠呈左半图的样子。用一句话解释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
,还取决于
st−1
s
t
−
1
。我们可以用下面的公式来表示循环神经网络的计算方法:
ot=g(Vst)(式1)
(式1)
o
t
=
g
(
V
s
t
)
st=f(Uxt+Wst−1)(式2)
(式2)
s
t
=
f
(
U
x
t
+
W
s
t
−
1
)
式1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值作为这一次的输入的权重矩阵,f是激活函数。
循环层和全连接层的区别就是循环层多了一个权重矩阵 W。如果反复把式2带入到式1,我们将得到:
从上面可以看出,循环神经网络的输出值,是受前面历次输入值 xt x t 、 xt−1 x t − 1 、 xt−2 x t − 2 、 xt−3 x t − 3 、…影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。
RNN中的结构细节:
- 可以把 st s t 当作隐状态,捕捉了之前时间点上的信息。就像你去考研一样,考的时候记住了你能记住的所有信息。
- ot o t 是由当前时间以及之前所有的记忆得到的。就是你考研之后做的考试卷子,是用你的记忆得到的。
- 很可惜的是, st s t 并不能捕捉之前所有时间点的信息。就像你考研不能记住所有的英语单词一样。
- 和卷积神经网络一样,这里的网络中每个cell都共享了一组参数(U,V,W),这样就能极大的降低计算量了。
- ot o t 在很多情况下都是不存在的,因为很多任务,比如文本情感分析,都是只关注最后的output结果的。就像考研之后选择学校,学校不会管你到底怎么努力,怎么心酸的准备考研,而只关注你最后考了多少分。
RNN训练:采用BP误差反向传播算法、梯度下降算法。
二. RNN的改进
RNN网络的改进模型:SRN、BRNN、LSTM、GRU、Deep BRNN、ESN、CW-RNN。