文章目录

  • 1. RNN 基本原理
  • 2. RNN 前向传导算法
  • 3. RNN 结构
  • 3.1 经典 RNN 结构
  • 3.2 Bidirectional RNN
  • 3.3 深层 RNN
  • 4. BPTT 算法
  • 5. LSTM 网络
  • 5.1 RNN 的不足
  • 5.2 LSTM简介
  • 5.3 LSTM结构
  • 5.4 LSTM的变体


1. RNN 基本原理

DNN 就是让输入 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据 经历一个 network A,得到输出 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_02,是一个直线型的过程,而 RNN 提出了一个特有的结构,就是 A 上的环线,取名为 hidden state,它不仅作为输出,还作为下一个输入。

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_03


将 RNN 结构展开,更容易理解:RNN 的输入是一个序列 {rnn模型预测之后100个数据 rnn模型的基本原理_DNN_04rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_05rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_06rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_07}

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_08


DNN 与 RNN 输出公式的比较:

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_09


RNN 所做的工作是:在某一个 time step 预测一个 vector,预测的依据不仅来自于当前 time step 所获得的输入 x,还有 RNN 自身的前一个状态,所以我们就能为每一个 time step 的输出构建一个公式:

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_10

  • rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_11 是 t 时刻的状态,它可以是多个向量的集合,rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_11
  • rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_13
  • rnn模型预测之后100个数据 rnn模型的基本原理_DNN_14
  • rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_15 包含了一些与参数 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_16

RNN 也可以像 DNN 一样扩展深度,只不过 RNN 的扩展有两个维度,一个是网络结构上的深度,另一个是输入序列上的长度:

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_17


补充几点:

  • 每一个 time step 内都使用同一个 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_15
  • rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_19
  • 在计算 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_20时,理论上要用前一个状态,但其并不存在,所以通常将 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_20

2. RNN 前向传导算法

令:x 表示输入,o 表示输出,S 表示隐藏层状态(S是网络的记忆单元)

我们已经知道 t 时刻的输出 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_22 是和 t 时刻的输入 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据 以及 t-1 时刻的状态 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_24 有关的,所以

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_25rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_07rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_27 分别表示第 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_28rnn模型预测之后100个数据 rnn模型的基本原理_DNN_29rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_30 时刻的输入;

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_31rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_33 分别表示第 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_28rnn模型预测之后100个数据 rnn模型的基本原理_DNN_29rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_30 时刻的输出;

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_37rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_39 分别表示第 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_28rnn模型预测之后100个数据 rnn模型的基本原理_DNN_29rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_30 时刻隐藏层的状态;

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_43


rnn模型预测之后100个数据 rnn模型的基本原理_DNN_44

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_45

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_44
rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_47

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_11 代入 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_49
rnn模型预测之后100个数据 rnn模型的基本原理_DNN_50

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_51


又由于 RNN 网络参数是共享的,即整个网络用作同一用途的参数 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_52

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_53
rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_54
rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_55

改写 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_58
rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_59

另外,一般认为初始状态 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_60

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_61


我们还知道神经网络中有激活函数的概念,那么 RNN 自然也可以有激活函数(这里将 S 视作隐藏层,o 视作输出层):

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_62
rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_63

而由于参数共享,两种激活函数 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_64rnn模型预测之后100个数据 rnn模型的基本原理_DNN_65

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_66
rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_67

这样就得到最终的等式
rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_68rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_69 通常为 tanh 函数
rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_70rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_71

隐藏层状态 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38 理论上应该包含前面所有 time step 的隐藏状态,但是在实际使用时,为了降低网络复杂度,通常 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38 只包含前面若干步(而非所有)的隐藏状态,同时输出 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32 只与当前隐藏状态 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38

3. RNN 结构

3.1 经典 RNN 结构

RNN 有很大的灵活性,下面是几种最典型的 RNN 结构:

  • one to one(Vanilla Neural Network),是最朴素的 RNN 结构,可用于图像分类
  • one to many(Image Captioning 看图说话)image -> sequence of words
  • many to one(Sentiment Classification 情感分析)sequence of words -> sentiment
  • many to many(Machine Translation 机器翻译)seq of words -> sq of words;(Video Classification on frame level 视频分类)

3.2 Bidirectional RNN

Bidirectional RNN 也可以叫做双向 RNN,它的输出 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32 取决于 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_78,其中 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38 是 t 时刻的状态,它取决于两个因素,上面已经讲过这里不再赘述;而 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_78 就是双向 RNN 有别于基本 RNN 的地方,rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_78 取决于 t 时刻的输入 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据 和 t+1 时刻的状态 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_83(因为这里是从后向前传播),所以我们可以推得 t 时刻的输出 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32 为:

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_85

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_86


单向传递的 RNN 缺点在于,它可以利用历史信息,却无法利用未来信息。就好比在做阅读题时,我们往往需要“联系上下文”才能得出正确答案,如果能够让 RNN 利用未来信息,那么评估性能应该会更好。

3.3 深层 RNN

不论是基本的 RNN 结构还是双向 RNN 结构,都有一个共同的缺点,就是网络层数比较浅,因为每一个 time step 只有一个隐藏层 S,所以很自然就想要加深 RNN 网络的层数。

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_87


深层 RNN 每一步都有多层网络,所以该网络有更强的学习能力和表达能力,但同时复杂性也提高了,需要训练更多的数据。

4. BPTT 算法

BPTT(Back Propagation Through Time 时序反向传播)算法,主要难点在于各个 state 之间的通信,即梯度除了按照空间结构(rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_32 -> rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38 -> rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_07)传播以外,还要沿着时间通道传播rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_38 -> rnn模型预测之后100个数据 rnn模型的基本原理_DNN_37 -> rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_06 -> rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_94),这样就难以写成一个统一形式,所以可以采用循环的方法来计算各个梯度。

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_95


rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_96 为隐藏层的激活函数

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_97 为输出层的变换函数

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_98 作为模型的损失函数,其中标签 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_99

因为 RNN 处理的通常为序列数据(假设输入序列长度为 n),所以还可以计算接受完序列中所有样本后的总损失,此时模型的总损失可以表示为:
rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_100

由于输出 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_101,其中 rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_102

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_103rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_104( * 表示 element wise 乘法)
rnn模型预测之后100个数据 rnn模型的基本原理_DNN_105rnn模型预测之后100个数据 rnn模型的基本原理_DNN_106

从而有:(rnn模型预测之后100个数据 rnn模型的基本原理_DNN_107 表示矩阵乘法)
rnn模型预测之后100个数据 rnn模型的基本原理_DNN_108

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_109

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_110总梯度为:

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_111

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_112


时间通道上的局部梯度

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_113

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_114

再利用时间通道上的局部梯度计算 U 和 W 的梯度
rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_115

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_116

5. LSTM 网络

全名为 Long-short term memory (LSTM) networks

5.1 RNN 的不足

RNN 可以看作是同一个神经网络的多次复制,每次使得信息从当前 step 传递到下一个 step,所以 RNN 的核心就是做当前的任务时,可以连接先前的信息。

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_117


但关键是,只有当相关信息和预测词的位置之间的间隔非常小时,RNN 才可以学会使用先前的信息。比如说:我学了八年法语,我能说一口很流利的_______。这时 RNN 就能很准确地预测出,接下来的词是“法语”。这就是相关信息和预测词之间的间隔比较小的情况(参考图5.1.2)。

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_118


但是当场景变得复杂,相关信息和预测词之间的距离很远时,RNN 会丧失学习连接如此远的信息的能力。比如说:我学了八年法语,因为我大学期间前往法国做交换生,而且到了那里之后我发现我非常喜欢这个国家,balabala,因此,我能说一口流利的_______。这就是相关信息和预测词之间的间隔比较大的情况(参考图5.1.3)。

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_119


为什么 RNN 记不住更久远的信息?

因为传统 RNN 难以训练,罪魁祸首就是梯度消失梯度爆炸 。因为训练时我们采用的是 Backward-propagation(gradient descent),当时间序列比较长时,梯度就可能消失到 0 或 发散到 NaN,我们很难给出一些合适的初始参数让网络进行稳定的训练。

在实际应用中,由于 RNN 会出现梯度消失和梯度爆炸问题,所以为了解决这些问题,就提出了经典了 LSTM。

5.2 LSTM简介

为什么 RNN 记不住很久远的信息,但 LSTM 就可以?
因为 LSTM 会选择性地忘记一些不重要的信息,把重要的信息关联在一起。RNN 的缺点正是 LSTM 所解决的,而且 LSTM 比 RNN 更容易训练。

LSTM(Long-Short Term Memort Networks)是一种特殊的 RNN 类型,优势在于可以学习长期依赖信息

LSTM 相对于 RNN 的改变就是将 RNN 的每一个 state 看一个 cell,我们对这个 cell 的结构进行改进,从而实现一些复杂的功能。

对比 RNN 的 state 和 LSTM 的 cell:

在RNN中,cell 模块就只是一个很简单的结构,比如一个 tanh。

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_120


rnn模型预测之后100个数据 rnn模型的基本原理_DNN_121


在 LSTM 中,cell 变得更加复杂,包含了 4 个结构进行交互。

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_122


在每个 cell 中,每个黄色小方块就是一个 Neural Network Layer,每个粉色圆圈是一次运算操作。

5.3 LSTM结构

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_123


gate(门): LSTM 的特色就是 gate,通过这一结构达到去除或增加信息到细胞状态的能力,即 gate 就是一种让信息选择式通过的方法,它包含一个 sigmoid 层和一个 pointwise 乘法操作

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_124


sigmoid 层输出 0 ~ 1 之间的数值,描述了每个部分有多少量可以通过。最极端的情况下,0 表示“不允许任何量通过(完全舍弃)”,1 表示“允许任意量通过(完全保留)”。

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_125


第一步: 第一个 sigmoid 层,称作 fotget gate(忘记门),它决定了从细胞状态中丢弃哪些信息。因为 LSTM 想要记住更长的信息,那么就要学会忘记一些不重要的信息。就好比我们在做视频分析时,相邻的几帧场景都差不多,那就没有必要记住所有的帧。

forget gate 会读取前一个输出 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_126当前输入 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_14,判断当前这一帧有没有价值,输出一个 0 ~ 1 之间的数值 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_128,让 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_128 与细胞旧状态 rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_130 进行点乘,丢弃掉需要丢弃的信息。

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_131


第二步: 包含了两部分,第二个 sigmiod 层和一个 tanh 层,它决定了什么样的新信息被存放在细胞状态中。

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_132


sigmoid 层称为“输入门层”,决定将要更新什么值;

tanh 层生成一个新的候选值向量 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_133,被加入到状态中第三步: 将第一步得到的结果(选择丢弃之后)和第二步的结果进行相加。就得到了新的候选值 rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_133

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_135


第四步:确定输出值。输出基于两个因素,一个是细胞状态,另一个是前一个输出。

  • 使用 sigmoid 层来确定细胞状态的哪些部分将要输出
  • tanh 对新的细胞状态进行处理(得到一个在 -1 到 1 之间的值)
  • 将两者进行相乘,得到最后的输出 rnn模型预测之后100个数据 rnn模型的基本原理_DNN_136

5.4 LSTM的变体

rnn模型预测之后100个数据 rnn模型的基本原理_rnn模型预测之后100个数据_137


(1)在每个 gate 上增加 peephole,大部分论文中不是所有 gate 都会加

rnn模型预测之后100个数据 rnn模型的基本原理_激活函数_138


(2)另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是使用同一个门一同做出决定,这里rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_139

rnn模型预测之后100个数据 rnn模型的基本原理_DNN_140


(3)

rnn模型预测之后100个数据 rnn模型的基本原理_参数设置_141