在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。在生物神经网络中,神经元之间的连接关系要复杂得多。前馈神经网络可以看作一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但是在很多现实任务中,网络的输出不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。比如一个 有限状态自动机,其下一个时刻的状态(输出)不仅仅和当前输入相关,也和当前状态(上一个时刻的输出)相关。此外,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序数据相关的问题时,就需要一种能力更强的模型.

循环神经网络 (Recurrent Neural Network,RNN)是一类具有 短期记忆 能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过 随时间反向传播算法 [Werbos, 1990] 来学习。随时间反向传播算法即按照时间的逆序将错误信息一步步地往前传递.当输入序列比较长时,会存在梯度爆炸和消失问题 [Bengio et al., 1994; Hochreiter et al., 1997, 2001],也称为长程依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制(Gating Mechanism)。

此外,循环神经网络可以很容易地扩展到两种更广义的记忆网络模型:递归神经网络图网络

给网络增加记忆能力

为了处理这些时序数据并利用其历史信息,我们需要让网络具有 短期记忆 能力。而前馈网络是一种静态网络,不具备这种记忆能力。

一般来讲,我们可以通过以下三种方法来给网络增加短期记忆能力。

延时神经网络

一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)。比较有代表性的模型是 延时神经网络 (Time Delay Neural Network,TDNN)[Lang et al., 1990; Waibel et al., 1989]。

延时神经网络是在前馈网络中的非输出层都添加一个延时器,记录神经元的最近几次活性值。在第 $t$ 个时刻,第 $l$ 层神经元的活性值依赖于第 $𝑙 − 1$ 层神经元的最近 $K$ 个时刻的活性值,即

$$ h_t^{(l)} = f(h_t^{(l-1)}, h_{t-1}^{(l-1)}, …, h_{t-K}^{(l-1)}) $$ 其中 $h_t^{(l)} \isin \reals^{M_l} $ 表示第 $l$ 层神经元在时刻 $t$ 的活性值,$M_l$ 为第 $l$ 层神经元的数量。通过延时器,前馈网络就具有了短期记忆的能力。

有外部输入的非线性自回归模型

自回归模型 (AutoRegressive Model,AR)是统计学上常用的一类时间序列模型,用一个变量 $y_t$ 的历史信息来预测自己。

$$ y_t = w_0 + \sum_{k=1}^K w_ky_{t-k} + \varepsilon_t $$ 其中 $K$ 为超参数,$w_0, …, w_k$ 为可学习参数,$\varepsilon_t \backsim N(0,\sigma^2)$ 为第 $t$ 个时刻的噪声,方差 $\sigma^2$ 和时间无关。

有外部输入的非线性自回归模型 (Nonlinear AutoRegressive with Exoge- nous Inputs Model,NARX)[Leontaritis et al., 1985] 是自回归模型的扩展,在每个时刻 $t$ 都有一个外部输入 $x_t$,产生一个输出 $y_t$。NARX 通过一个延时器记录最近 $K_x$ 次外部输入和最近 $K_y$ 次的输出,第 $t$ 个时刻的输出 $y_t$ 为 $$ y_t = f(x_t, x_{t-1},…, x_{t-K_x}, y_{t-1}, y_{t-2}, …, y_{t-K_y}) $$ 其中 $f(\cdot)$ 表示非线性函数,可以是一个前馈网络,$K_x$ 和 $K_y$ 为超参数。

循环神经网络

循环神经网络 (Recurrent Neural Network,RNN)通过使用带自反馈的神经元,能够处理任意长度的时序数据。

给定一个输入序列 $x_1∶T = (x_1, x_2, …, x_t, …, x_T )$,循环神经网络通过下面公式更新带反馈边的隐藏层的活性值 $h_t$

𝒉𝑡 = 𝑓(𝒉𝑡−1, 𝒙𝑡)

其中𝒉0 =0,𝑓(⋅)为一个非线性函数,可以是一个前馈网络. 图6.1给出了循环神经网络的示例,其中 “延时器” 为一个虚拟单元,记录神

经元的最近一次(或几次)活性值.

参考资料