1 RNN概述

我们已经知道BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题.

  • BP算法,CNN之后, 为什么还有RNN?
    细想BP算法,CNN(卷积神经网络)我们会发现, 他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果. 但是, 对于一些与时间先后有关)的, 比如视频的下一时刻的预测,文档前后文内容的预测等, 这些算法的表现就不尽如人意了.因此, RNN就应运而生了.
  • 什么是RNN?
    RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种’记忆’功能.
    RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
  • RNN的主要应用领域有哪些呢?
    RNN的应用领域有很多, 可以说只要考虑时间先后顺序的问题都可以使用RNN来解决.这里主要说一下几个常见的应用领域:
    ① 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理
    ② 机器翻译, 机器写小说
    ③ 语音识别
    ④ 图像描述生成
    ⑤ 文本相似度计算
    ⑥ 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域.

2 RNN(循环神经网络)

2.1 RNN模型结构

前面我们说了RNN具有时间"记忆"的功能, 那么它是怎么实现所谓的"记忆"的呢?

BP相比于CNN优势 bp cnn rnn_神经网络


如图所示, 我们可以看到RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成.

并且会发现在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法.

2.2 循环神经网络的前向传播算法

BP相比于CNN优势 bp cnn rnn_机器学习_02

如图所示为Hidden Layer的层级展开图。BP相比于CNN优势 bp cnn rnn_机器学习_03表示时间序列,BP相比于CNN优势 bp cnn rnn_应用领域_04表示输入的样本,BP相比于CNN优势 bp cnn rnn_应用领域_05表示样本在时间t处的的记忆,BP相比于CNN优势 bp cnn rnn_人工智能_06BP相比于CNN优势 bp cnn rnn_神经网络_07表示输入的权重, BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_08表示此刻输入的样本的权重, BP相比于CNN优势 bp cnn rnn_人工智能_09表示输出的样本权重。 参数BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_10是各只有一个,只是随着时间不断更新迭代。

BP相比于CNN优势 bp cnn rnn_应用领域_11时刻, 一般初始化输入BP相比于CNN优势 bp cnn rnn_机器学习_12, 随机初始化BP相比于CNN优势 bp cnn rnn_人工智能_13 进行下面的公式计算:
BP相比于CNN优势 bp cnn rnn_神经网络_14
其中,BP相比于CNN优势 bp cnn rnn_机器学习_15BP相比于CNN优势 bp cnn rnn_机器学习_16均为激活函数. 其中 BP相比于CNN优势 bp cnn rnn_机器学习_15 可以是 BP相比于CNN优势 bp cnn rnn_人工智能_18 等激活函数,BP相比于CNN优势 bp cnn rnn_机器学习_16通常是 BP相比于CNN优势 bp cnn rnn_神经网络_20 也可以是其他。
时间向前推进,此时的状态BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_21作为时刻1的记忆状态将参与下一个时刻的预测活动,也就是:
BP相比于CNN优势 bp cnn rnn_神经网络_22
以此类推, 可以得到最终的输出值为:
BP相比于CNN优势 bp cnn rnn_人工智能_23
注意:

  1. 这里的BP相比于CNN优势 bp cnn rnn_应用领域_24在每个时刻都是相等的(权重共享).
  2. 隐藏状态可以理解为: BP相比于CNN优势 bp cnn rnn_神经网络_25

2.3 循环神经网络的反向传播算法

前面我们介绍了RNN的前向传播的方式, 那么RNN的权重参数BP相比于CNN优势 bp cnn rnn_神经网络_26都是怎么更新的呢?
每一次的输出值BP相比于CNN优势 bp cnn rnn_机器学习_27都会产生一个误差值BP相比于CNN优势 bp cnn rnn_神经网络_28, 则总的误差可以表示为:
BP相比于CNN优势 bp cnn rnn_机器学习_29
则损失函数可以使用交叉熵损失函数也可以使用平方误差损失函数.

由于每一步的输出不仅仅依赖当前步的网络,并且还需要前若干步网络的状态,那么这种BP改版的算法叫做Backpropagation Through Time(BPTT) , 也就是将输出端的误差值反向传递,运用梯度下降法进行更新。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。当然这里的BPTT和DNN中的BP算法也有很大的不同点,即这里所有的BP相比于CNN优势 bp cnn rnn_人工智能_30在序列的各个位置是共享的,反向传播时我们更新的是相同的参数。
总的损失函数:
BP相比于CNN优势 bp cnn rnn_神经网络_31
为了方便观察,对状态更新公式进行整理,
BP相比于CNN优势 bp cnn rnn_人工智能_32
对于BP相比于CNN优势 bp cnn rnn_人工智能_09而言,只和BP相比于CNN优势 bp cnn rnn_人工智能_34相关,因此更新公式如下:
BP相比于CNN优势 bp cnn rnn_应用领域_35

对于BP相比于CNN优势 bp cnn rnn_神经网络_07而言,除了BP相比于CNN优势 bp cnn rnn_机器学习_27之外,还与BP相比于CNN优势 bp cnn rnn_神经网络_38相关,因此比较麻烦,不过可以按照偏食法则进行求导。
BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_39

BP相比于CNN优势 bp cnn rnn_应用领域_40
最后是对U的更新方法.
BP相比于CNN优势 bp cnn rnn_人工智能_41
BP相比于CNN优势 bp cnn rnn_应用领域_42

我们知道,sigmoid 函数的导数范围是(0, 0.25], tanh 函数的导数范围是 (0, 1] ,他们的导数最大都不大于 1。因此在上面求梯度的乘积中,随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于 0,这就会引起梯度消失现象。梯度消失就意味着那一层的参数再也不更新了,则模型的训练毫无意义。Relu 函数一定程度上可以解决梯度消失的问题,但是容易引起梯度爆炸的问题。此外 tanh 函数的收敛速度要快于 sigmoid 函数,而且梯度消失的速度要慢于 sigmoid 函数。
  利用BPTT算法训练网络时容易出现梯度消失的问题,当序列很长的时候问题尤其严重,因此上面的RNN模型一般不能直接应用。而较为广泛使用的是RNN的一个特例LSTM。

2.4 维度

BP相比于CNN优势 bp cnn rnn_应用领域_43


BP相比于CNN优势 bp cnn rnn_应用领域_44

函数 BP相比于CNN优势 bp cnn rnn_机器学习_16 代表BP相比于CNN优势 bp cnn rnn_神经网络_20层,BP相比于CNN优势 bp cnn rnn_机器学习_15 一般是BP相比于CNN优势 bp cnn rnn_人工智能_48函数,初始的隐层BP相比于CNN优势 bp cnn rnn_神经网络_49一般就是一个全为0的向量(不是矩阵)

3 LSTM(Long Short Term Memory, 长短期记忆网络 )

前面我们介绍了RNN的算法, 它处理时间序列的问题的效果很好, 但是仍然存在着一些问题, 其中较为严重的是容易出现梯度消失或者梯度爆炸的问题(BP算法和长时间依赖造成的). 注意: 这里的梯度消失和BP的不一样,这里主要指由于时间过长而造成记忆值较小的现象.

因此, 就出现了一系列的改进的算法, 这里介绍主要的两种算法: LSTM 和 GRU.
LSTM 和 GRU对于梯度消失或者梯度爆炸的问题处理方法主要是:

  • 对于梯度消失: 由于它们都有特殊的方式存储”记忆”,那么以前梯度比较大的”记忆”不会像简单的RNN一样马上被抹除,因此可以一定程度上克服梯度消失问题。
  • 对于梯度爆炸:用来克服梯度爆炸的问题就是gradient clipping,也就是当你计算的梯度超过阈值c或者小于阈值-c的时候,便把此时的梯度设置成c或-c。

Long Short Term 网络,一般就叫做 LSTM ,是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!

  所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层((这个tanh层就是一个函数,tanh就是双曲正切函数,可以将输入的值转化为-1到1之间的一个值,通常用于对信息的压缩处理,或者规范化处理)。

BP相比于CNN优势 bp cnn rnn_神经网络_50


下图为LSTM算法的结构图.

BP相比于CNN优势 bp cnn rnn_应用领域_51

图中有三种元素:红色圈圈,黄色方块,黑色信息流。
红色的圈圈就是各种处理过程,×代表乘法,+就是加法。黄色方块代表神经网络的一个层,σ是指sigmoid函数层,把数据压缩到0到1的范围。黑色信息流主要要注意信息的流向。

和RNN不同的是: RNN中,就是个简单的线性求和的过程. 而LSTM可以通过“门”结构来去除或者增加“细胞状态”的信息,实现了对重要内容的保留和对不重要内容的去除. 通过Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”.

用于遗忘的门叫做"遗忘门", 用于信息增加的叫做"信息增加门",最后是用于输出的"输出门". 这里就不展开介绍了.

下面就一步步地分解上面的结构,逐层的理解:

3.1 Cell state(单元状态流)——LSTM的核心

单元状态流就是下面这个水平直线,类似于传送带,直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

因此,它主要用于“记忆当前的状态,上面包含记忆的删除、更新等。

BP相比于CNN优势 bp cnn rnn_人工智能_52


LSTM有三个“门”来保护和控制cell state。

3.2 遗忘门

遗忘门(forget gate)顾名思义,是控制是否遗忘的,在LSTM中即以一定的概率控制是否遗忘上一层的隐藏细胞状态。遗忘门子结构如下图所示:

BP相比于CNN优势 bp cnn rnn_人工智能_53

再次说明一下,BP相比于CNN优势 bp cnn rnn_应用领域_54是上个网络的output(输出),BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_55当前网络的input(输入)。BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_55在这里的作用是为了根据当前输入的新的信息来决定要忘记哪些历史信息

信息输入了之后,BP相比于CNN优势 bp cnn rnn_应用领域_57层就会把信息转化为BP相比于CNN优势 bp cnn rnn_机器学习_58,如果决定要忘记,BP相比于CNN优势 bp cnn rnn_机器学习_58就是0,如果这个信息要保留,则为1,选择部分记忆则按照实际情况输出0~1的数。

为什么要有“遗忘门”?例如,当我们碰到一个新的主语,如Peter,因为是男的,所以如果后面要用代词的话,就要用he而不能用she。但是可能我们在理解之前的语句的时候,cell state中保存的主语是Alice,这样的话我们就需要把Alice忘掉,否则后面的代词就不知道咋用了。

3.3 输入门

输入门(input gate)负责处理当前序列位置的输入,确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,BP相比于CNN优势 bp cnn rnn_人工智能_48 层称 “输入门层” 决定什么值我们将要更新。然后一个 BP相比于CNN优势 bp cnn rnn_应用领域_61 层创建一个新的候选值向量 BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_62 ,来加入新的BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_55信息。

BP相比于CNN优势 bp cnn rnn_应用领域_64

在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。所以在更新新的细胞状态时,主要要做的两件事就是决定哪些历史信息该流入当前细胞中(遗忘们控制),决定哪些新的信息该流入细胞中(输入们控制)

输入门包括两步,第一步是将BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_55中的信息转换为和BP相比于CNN优势 bp cnn rnn_人工智能_66一样长度的向量,也就是对BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_55标准化的过程,此过程就是上图中下面的带波浪线的BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68所做的事情,第二步就是将带波浪线的BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68也进行一个信息筛选,筛选后的信息才最终会加到BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68中。这个信息筛选功能就是通过和BP相比于CNN优势 bp cnn rnn_机器学习_71进行point wise 的相乘来实现的,这和上面的BP相比于CNN优势 bp cnn rnn_机器学习_58非常相似。BP相比于CNN优势 bp cnn rnn_机器学习_58就表示forget,BP相比于CNN优势 bp cnn rnn_机器学习_71就表示input,一个对原有信息进行筛选,一个对新的信息进行筛选

下面就是要把两部分筛选的信息合并到一起:

BP相比于CNN优势 bp cnn rnn_神经网络_75


至此,我们的BP相比于CNN优势 bp cnn rnn_人工智能_66成功地进化到了BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68,还有一件事没有做,就是要根据BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68产生本步的预测BP相比于CNN优势 bp cnn rnn_神经网络_79。下面就来看看。

3.4 输出门

终于要输出了,输出的结果依赖于cell state,这时前面的遗忘、输入的作用就显现出来了。

BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_80


注意这个图里面:

BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_81


同样的,根据BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68产生BP相比于CNN优势 bp cnn rnn_神经网络_79时,我们也要经过一个筛选,这个筛选就由BP相比于CNN优势 bp cnn rnn_机器学习_27来承担,BP相比于CNN优势 bp cnn rnn_机器学习_27就是代表output的意思。同时,对BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68做了一个BP相比于CNN优势 bp cnn rnn_应用领域_61的变换,目的是让其每一位都在-1和1之间。

3.5 小结

输入门、遗忘门、输出们所对应的函数都是 sigmoid 函数(因为 Sigmoid 函数的输出值范围为0-1,相当于控制门的百分比过滤),因此输出的结果是[0, 1],当为0时,门完全关闭,当为1时,门完全打开。输入们控制这当前输入值有多少信息流入到当前的计算中,遗忘门控制着历史信息中有多少信息流入到当前计算中,输出们控制着输出值中有多少信息流入到隐层中。所有LSTM除了有三个门来控制当前的输入和输出,其他的和RNN是一致的。 
BP相比于CNN优势 bp cnn rnn_神经网络_88

3.6 LSTM前向传播算法

LSTM模型有两个隐藏状态 BP相比于CNN优势 bp cnn rnn_神经网络_79 , BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_68 ,模型参数几乎是RNN的4倍,因为现在多了 BP相比于CNN优势 bp cnn rnn_人工智能_91 这些参数。
  前向传播过程在每个序列索引位置的过程为:
    1)更新遗忘门输出:
      BP相比于CNN优势 bp cnn rnn_机器学习_92
      
    2)更新输入门两部分输出:
      BP相比于CNN优势 bp cnn rnn_机器学习_93
      BP相比于CNN优势 bp cnn rnn_神经网络_94
      
    3)更新细胞状态:
      BP相比于CNN优势 bp cnn rnn_应用领域_95
      
    4)更新输出门输出:
      BP相比于CNN优势 bp cnn rnn_机器学习_96
      BP相比于CNN优势 bp cnn rnn_BP相比于CNN优势_97
      
    5)更新当前序列索引预测输出:
      BP相比于CNN优势 bp cnn rnn_神经网络_98

知道了前向传播,反向传播和RNN中的一样,也是借助梯度下降来训练模型,具体的训练过程可以看

4 BiLSTM

前向的LSTM与后向的LSTM结合成BiLSTM。比如,我们对“我爱中国”这句话进行编码,模型如下图所示。

BP相比于CNN优势 bp cnn rnn_人工智能_99


前向BP相比于CNN优势 bp cnn rnn_神经网络_100的依次输入“我”,“爱”,“中国”得到三个向量BP相比于CNN优势 bp cnn rnn_应用领域_101。后向BP相比于CNN优势 bp cnn rnn_人工智能_102的依次输入“中国”,“爱”,“我”得到三个向量BP相比于CNN优势 bp cnn rnn_应用领域_103。最后将前向和后向的隐向量进行拼接得到BP相比于CNN优势 bp cnn rnn_人工智能_104,即BP相比于CNN优势 bp cnn rnn_人工智能_105。对于情感分类任务来说,我们采用的句子的表示往往是$ [h_{L2},h_{R2}]$。因为其包含了前向与后向的所有信息,如下图所示。

BP相比于CNN优势 bp cnn rnn_应用领域_106

5 GRU算法

GRU是2014年提出的一种LSTM改进算法. 它将忘记门和输入门合并成为一个单一的更新门, 同时合并了数据单元状态和隐藏状态, 使得模型结构比之于LSTM更为简单. GRU只包含更新门和重置门。

BP相比于CNN优势 bp cnn rnn_神经网络_107


GRU是LSTM的一种变体,综合来看:

1、两者的性能在很多任务上不分伯仲。

2、GRU 参数相对少更容易收敛,但是在数据集较大的情况下,LSTM性能更好

3、GRU只有两个门(update和reset),LSTM有三个门(forget,input,output)

LSTM还有许多变体,但不管是何种变体,都是对输入和隐层状态做一个线性映射后加非线性激活函数,重点在于额外的门控机制是如何设计,用以控制梯度信息传播从而缓解梯度消失现象。