深度学习四从循环神经网络入手学习LSTM及GRU

循环神经网络 简介

循环神经网络(Recurrent Neural Networks, RNN) 是一类用于处理序列数据的神经网络。之前的说的卷积神经网络是专门用于处理网格化数据(例如一个图像)的神经网络,而循环神经网络专门用于处理序列数据(例如\(x^{(1)},x^{(2)},···,x^{(T)},\))的神经网络。

应用场景

一些要求处理序列输入的任务,例如:

语音识别(speech recognition)

时间序列预测(time series prediction)

机器翻译(machine translation)

手写识别(handwriting recognition)

RNN产生的原因

通常我们人类思考,不会从是每一秒都要从一件事的开始进行思考。就像你正在读这篇文章,你所理解的每一个词都是从之前的基础上来的。你永远不会把之前的词丢掉从新开始思考。也就是说思考都是持续性的。

而我们之前讨论的传统的神经网络是做不到让思考持续性的,这是它们的一个主要的问题。而RNN的出现,就是为了解决这一个问题。也就是让思考具有持续性!

符号

在正式讨论之前,我们先明确一些符号和概念:

\(x^{(t)}\) :是在时刻 t 包含的向量,即时刻 t 的输入

\(\tau\):序列长度

时间步:time step,这不是现实中的时间,而是序列数据的每一次的输入。时间步索引表示序列中的位置。

简单RNN结构

Simple Recurrent Network(SRN) 是 Elman 在 1990 年提出的,所以又叫ELem Network,基本结构如下:

深度学习四从循环神经网络入手学习LSTM及GRU

可以看出,和传统的神经网络结构相比,RNN最大的不同在于它的隐藏层节点(H1,H2,H3)和记忆单元(S1,S2,S3)(“context” layer)之间存在直接连接(虚线)。

也就是:

说每一次隐藏节点输出的时候,出了传递激活后的信息到下一层,还会被复制到记忆单元中。

隐藏层节点除了和输入节点(I1,I2,I3)之间存在连接以外,还和 context layer 之间存在直接连接(实线)。即隐藏层同时接收来自输入层和 context layer 的输入

context layer 无限期的保留状态信息。每次网络接收一个输入都会用 context layer 来记住产生输出所需要的信息。

从上述信息中可以看出,循环神经网络名字中循环的由来,即网络本身是一个循环的序列结构。

我们可以用这样的图来简洁的表示 SRN。其中 \(A\) 表示一个神经网络结构块。\(x_t\) 表示输如,\(h_t\) 表示输出。在这个图中神经网络的基本结构被压缩了,从 \(x_t\)\(A\) 的一条线实际上是上面的从输入节点到输出节点的全部连接。同样的 \(A\)\(h_t\) 也是一样。而且下图中忽略掉了 context layer 的存在。

深度学习四从循环神经网络入手学习LSTM及GRU

如果我们再进一步思考,会发现上面的图和普通的神经网络好像又没有什么区别。因为我们可以把上面的图展平成一个等价的前馈结构,从而更好的观察神经网络的结构。这相当于一个共享权重的网络结构。

深度学习四从循环神经网络入手学习LSTM及GRU

这种链状的性质表明循环神经网络与序列和列表密切相关。RNN 也正是用于处理此类数据的神经网络的自然结构。

RNN中的反向传播

在循环神经网络中应用反向传播被称为 通过时间反向传播 backpropagation through time(BPTT),如下图所示:

深度学习四从循环神经网络入手学习LSTM及GRU

我们可以反向传播一个 time step, 也可以反向传播固定数目的 time steps,也可以直接反向传播到序列的最开始。

之后应该还需单独写一篇文章来分析BPTT,现在还不太会推导实现。

其他的RNN结构

有的时候,我们会在输入层和输出层之间添加直接的连接,又叫 shortcut。如下图所示:

深度学习四从循环神经网络入手学习LSTM及GRU

Jordan Networks:在输出层添加一个返回到隐藏层的连接。

长期依赖的问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspfgp.html