深度学习小白专场之循环神经网络和递归神经网络

全连接神经网络和卷积神经⽹网络,都只能单独的去处理单个的输入,且前后的输入之间毫无关系。但是在一些任务中,我们需要更好的去处理序列的信息,即前后的输⼊之间存在关系。比如,在理解一整句话的过程中,孤立理解组成这句话的词是不够的,我们需要整体的处理由这些词连接起来的整个序列;当我们处理视频时,我们也不能单独地仅仅分析每一帧,⽽要分析这些帧连接起来的整个序列。这就引出了了深度学习领域中另⼀类非常重要的神经网络:循环神经⽹网络(Recurrent Neural Network)。

1.循环神经网络

我们首先来看一下一个简单的循环神经⽹络图,它由输⼊层、一个隐藏层和⼀个输出层组成。我们可以看到,循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s,权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。
深度学习小白专场之循环神经网络和递归神经网络
从上⾯可以看出,循环神经⽹网络的输出值ot,是受前⾯历次输⼊入值xt、xt−1、xt−2. . . 的影响的, 这就是为什么循环神经网络可以往前看任意多个输入值的原因。
对比与卷积神经网络CNN一般用于处理网格化数据如一个图像的神经网络,循环神经网络RNN是一类用于处理序列数据的神经网络。

  • 循环神经网络的训练:
    循环神经网络训练的算法和卷积神经网络,前馈神经网络的训练算法-BP算法的原理是一样的,也包括3个步骤:
    (1)前向计算每一个神经元的输出值
    (2)反向计算每一个神经元的误差项,即误差对加权输入(加法器)的偏导数。这里的加法器就是wx+b
    (3)计算每一个权重的梯度
    注: 应用于展开图且代价为O(tao)的反向传播算法称为通过时间反向传播(BPTT)。
  • CNN和RNN参数共享的区别:卷积的输出是一个序列,其中输出的每一项是相邻几项输入的函数,共享的概念体现在每个时间步中使用的相同的卷积核;而RNN是输出的每一项是前一项的函数。输出的每一项是对先前输出应用相同的更新规则而产生。
  • RNN的几种设计模式:
    (1)每个时间步都有输出,并且隐藏单元和隐藏单元之间有循环连接的循环网络
    (2)每个时间步都有输出,只有当前时刻的输出到下一时刻的隐藏单元之间有循环连接的网络
    (3)隐藏单元之间存在循环连接,但是读取整个序列后产生单个输出的循环网络

隐藏单元之间存在循环的网络非常强大但是训练代价也非常大。

  • 由输出反馈到模型而后产生循环连接的模型可使用导师驱动过程进行训练。训练模型时,导师驱动过程不再使用最大似然准则。 导师驱动过程是一种训练技术,适用于输出与下一时间步的隐藏状态存在连接的RNN。

我们通常希望将RNN的输出解释为一个概率分布,并且通常使用与分布相关联的交叉熵来定义损失。例如均方误差是与单位高斯分布的输出相关联的交叉熵损失,例如前馈网络中所使用的。

  • 循环网络为减少的参数数目付出的代价是优化参数可能变得困难。
  • 我们可以将t=1,2,3···的向量x^(t)序列作为输入的RNN。另一种选择我们可以使用单个向量x作为输入。当x是一个固定大小的向量时,我们可以简单的将其看做产生y序列RNN的额外输入。
    将额外的输入提供到RNN的一些常见方法是:
    (1)在每个时刻作为一个额外输入
    (2)作为初始状态h^(0)
    (3)结合两种方式

将固定长度的向量x映射到Y序列上分布的RNN。这类RNN适应于很多任务,如图注,可以将单个对象作为模型的输入,然后产生描述图像的词序列。

2.双向RNN

对于语⾔模型来说,很多时候光看前面的词是不够的,我们需要看到一个词前后的词,这时候就要用到双向RNN了。下图为双向RNN示例:
深度学习小白专场之循环神经网络和递归神经网络
我们可以看出一般的规律:正向计算时,隐藏层的值st与st−1有关;反向计算时,隐藏层的值s ′t与s ′ t+1有关;最终的输出取决于正向和反向计算的加和。

  • 双向RNN允许输出单元同时依赖过去和未来且对时刻t的输入值最敏感的表示,而不必指定t周围固定大小的窗口。这是前馈网络、卷积网络或具有固定带下的线性缓存器的常规RNN所必须要做的。
  • 在双向RNN中,循环h在时间上向前(向右)传播信息,循环g在时间上向后(向左)传播信息。
    但是实践中,上面介绍的这两种RNN并不能处理较长的序列,主要是由于梯度消失和梯度爆炸的问题。使用其他结构的RNNs可以避免梯度消失问题,⽐如长短时记忆网络(LTSM)和Gated Recurrenr Unit(GRU),这是最流行的做法。同时避免使用饱和性**函数比如sigmoid和tanh函数而采用ReLu函数也可以避免梯度消失问题。对于梯度爆炸问题我们可以通过设置梯度阈值来避免。

3.基于编码-解码的序列到序列架构

  • 我们还可以训练RNN使得输入序列可以变为不一定等长的输出序列。在这很多场景中都有应用,如语音识别、机器识别、或者问答,其中训练集的输入和输出序列的长度通常不相同。我们通常称为将这样的输入称为“上下文”。

4.递归神经网络

  • 递归神经网络代表循环网络的另一个扩展,它被构造为深的树状结构而不是RNN的链状结构。因此是不同的计算图。
  • 递归神经网络的一个明显优势是,对于具有相同长度tao的序列,深度可以急剧地从tao减小到log(tao),这可能有助于解决长期依赖。