3.1循环神经网络数学理解

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1循环神经网络数学理解相关的知识,希望对你有一定的参考价值。


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

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过随时间反向传播算法来学习。

1、给网络增加记忆能力

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

1.1、延时神经网络

一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)。比较有代表性的模型是延时神经网络。

延时神经网络是在前馈网络中的非输出层都添加一个延时器,记录最近几次神经元的输出。在第 t t t 个时刻,第 l + 1 l+1 l+1 层神经元和第 l l l 层神经元的最近 p p p 次输出相关,即:
h t ( l + 1 ) = f ( h t ( l ) , h t − 1 ( l ) , . . . , h t − p ( l ) ) h_t^{(l+1)}=f(h_t^{(l)},h_{t-1}^{(l)},...,h_{t-p}^{(l)}) ht(l+1)=f(ht(l),ht1(l),...,htp(l))
延时神经网络在时间维度上共享权值,以降低参数数量。因此对于序列输入来讲,延时神经网络就相当于卷积神经网络

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

**自回归模型(Autoregressive Model,AR)**是统计学上常用的一类时间序列模型,用一个变量 y t y_t yt的历史信息来预测自己:
y t = w 0 + ∑ i = 1 p w p y t − i + ϵ t y_t=w_0+\\sum_{i=1}^{p}{w_py_{t-i}}+\\epsilon_t yt=w0+i=1pwpyti+ϵt
其中 p p p为超参数, w p w_p wp为参数, ϵ t ∼ N ( 0 , σ 2 ) \\epsilon_t\\sim N(0,\\sigma^2) ϵtN(0,σ2)为第t个时刻的噪声,方差 σ 2 \\sigma^2 σ2和时间无关。

有外部输入的非线性自回归模型(Nonlinear Autoregressive with Exogenous Inputs Model,NARX)是自回归模型的扩展,在每个时刻 t t t都有一个外部输入 x t x_t xt ,产生一个输出 y t y_t yt 。NARX通过一个延时器记录最近几次的外部输入和输出,第 t t t个时刻的输出 y t y_t yt 为:
y t = f ( x t , x t − 1 , . . . , x t − p , y t − 1 , y t − 2 , . . . , y t − q ) y_t=f(x_t,x_{t-1},...,x_{t-p},y_{t-1},y_{t-2},...,y_{t-q}) yt=f(xt,xt1,...,xtp,yt1,yt2,...,ytq)
其中 f ( ⋅ ) f(·) f() 表示非线性函数,可以是一个前馈网络, p p p q q q为超参数。

2. 基本循环神经网络

循环神经网络在隐藏层会对之前的信息进行存储记忆,然后输入到当前计算的隐藏单元中,也就是隐藏层的内部节点不再是相互独立的,而是互相有消息传递。隐藏层的输入不仅可以由两部分组成,输入层的输出和隐藏层上一时刻的输出,即隐藏层内的节点自连;隐藏层的输入还可以由三部分组成,输入层的输出、隐藏层上一时刻的输出、上一隐藏层的状态,即隐藏层内的节点不仅自连还互连。结构如图1所示。

图 1 : 循 环 神 经 网 络 结 构 图 图1:循环神经网络结构图 1

如果我们把上图右边部分展开,循环神经网络也可以画成下面这个样子:

图2:循环神经网络展开图

图 2 : 循 环 神 经 网 络 展 开 图 图2:循环神经网络展开图 2

对于图2的网络,计算过程如下:

  • x t x^t xt表示第 t t t步(step)的输入。比如 x 1 x^1 x1为第二个词的词向量( x 0 x^0 x0为第一个词);

  • h t h^t ht为隐藏层的第 t t t步的状态,它是网络的记忆单元。 h t h^t ht根据当前输入层的输出与上一时刻隐藏层的状态 h t − 1 h^{t-1} ht1 进行计算,如公式1所示。其中, U U U是输入层到隐藏层的权重矩阵权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重, b b b为偏置。 f ( x ) f(x) f(x)一般是非线性的激活函数,如 t a n h tanh tanh R e L U ReLU ReLU
    h t = f ( U x t + W h t − 1 + b ) (1) h_t=f(Ux^{t}+Wh^{t-1}+b)\\tag{1} ht=f(Uxt+Wht1+b)(1)

  • o t o^t ot是第 t t t步的输出。输出层是全连接层,即它的每个节点和隐含层的每个节点都互相连接,V是隐藏层到输出层的权重矩阵 g ( x ) g(x) g(x)是激活函数。
    o t = g ( V ∗ h t ) (2) o^t=g(V*h^t)\\tag{2} ot=g(Vht)(2)
    如果将(1)式循环带入(2)式可得:
    KaTeX parse error: No such environment: equation at position 8: \\begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \\begin{split}…

由式(3)可以看出,循环神经网络的输出值与前面多个时刻的历史输入值有关,这就是为何循环神经网络能够往前看任意多个输入值的原因,也就是为何循环神经网络能够对序列数据建模的原因。

3. 双向循环神经网络

3.1 双向循环神经网络的介绍

对于语言模型来说,很多时候单向循环神经网络表现是不好的,比如下面这句话:

我的手机坏了,我打算____一部新手机。

可以想象,如果我们只看横线前面的词,手机坏了,那么我是打算修一修?换一部新的?还是大哭一场?这些都是无法确定的。但如果我们也看到了横线后面的词是『一部新手机』,那么,横线上的词填『买』的概率就大得多了。

对于上面的语言模型,单向循环神经网络是无法对此进行建模的。因此,我们需要用双向循环神经网络,如图3所示。

图3:双向循环神经网络

图 3 : 双 向 循 环 神 经 网 络

以上是关于3.1循环神经网络数学理解的主要内容,如果未能解决你的问题,请参考以下文章

3.1 RNN 循环神经网络 概述(下篇)

循环神经网络(RNN)简介

重磅综述 | 神经网络机器学习的数学理解

关于自适应的线性模型与神经网络非线性模型的一些理解:

循环神经网络简易理解

我对BP网络的简单的理解