文章和代码已经归档至【Github仓库:<https://github.com/timerring/dive-into-AI> 】或者公众号【AIShareLab】回复 神经网络基础 也可获取。

循环神经网络

序列数据

序列数据是常见的数据类型,前后数据通常具有关联性

例如 “Cats average 15 hours of sleep a day”

循环神经网络入门基础_数据

语言模型

语言模型是自然语言处理 (NLP, Natural Language Processing) 重要技术。

NLP中常把文本看为离散时间序列,一段长度为T的文本的词依次为 循环神经网络入门基础_数据_02, 其中 循环神经网络入门基础_重置_03 是\*\时间步 ( Time Step)\\*t 的输出或标签。

语言模型将会计算该序列概率循环神经网络入门基础_语言模型_04,例如 Cats average 15 hours of sleep a day,这句话中 T = 8.

语言模型计算序列概率:

循环神经网络入门基础_语言模型_05

例如:P( 我, 在, 听, 课 ) = P(我) \* P(在|我)\* P( 听|我 ,在)\* P(课 | 我 ,在,听)

统计\*\语料库(Corpus)\\*中的词频,得到以上概率,最终得到P(我, 在, 听, 课)

缺点: 时间步t的词需要考虑t -1步的词,其计算量随t呈指数增长。

RNN—循环神经网络(Recurrent neural network)

RNN 是针对序列数据而生的神经网络结构,核心在于循环使用网络层参数,避免时间步增大带来的参数激增,并引入\*\隐藏状态(Hidden State)\\*用于记录历史信息,有效处理数据的前后关联性。

循环神经网络入门基础_数据_06

\*\隐藏状态(Hidden State)\\用于记录历史信息,有效处理数据的前后关联性,\\激活函数采用Tanh,将输出值域限制在(-1,1),防止数值呈指数级变化。\\*可以进行如下对比:

循环神经网络入门基础_语言模型_07

RNN构建语言模型,实现文本生成。假设文本序列:“想”,“要”,“有”,“直”,“升”,“机”。

循环神经网络入门基础_重置_08

RNN特性:

  1. 循环神经网络的隐藏状态可以捕捉截至当前时间步的序列的历史信息;
  2. 循环神经网络模型参数的数量不随时间步的增加而增长。(一直是循环神经网络入门基础_语言模型_09循环神经网络入门基础_数据_10循环神经网络入门基础_语言模型_11

循环神经网络入门基础_数据_12

RNN的通过(穿越)时间反向传播(backpropagation through time)

循环神经网络入门基础_语言模型_13

有几条通路,就几项相加。

方便起见,一下分别称为式1-4.

循环神经网络入门基础_语言模型_14

如上,T=3。可以由第二个式子算出循环神经网络入门基础_语言模型_15对于循环神经网络入门基础_重置_16的偏导。

然后由第三个式子计算循环神经网络入门基础_语言模型_15对于循环神经网络入门基础_重置_18的偏导,注意其中的循环神经网络入门基础_语言模型_15对于循环神经网络入门基础_重置_16的偏导已经计算完成了,直接带入即可。

然后以此类推,得到一个循环神经网络入门基础_语言模型_15对于循环神经网络入门基础_重置_18的偏导的通式,见第四个式子。

这里可以用第四个通式计算一下循环神经网络入门基础_语言模型_15对于循环神经网络入门基础_重置_24的偏导,如下:

循环神经网络入门基础_语言模型_25

计算剩余两个参数,由于通路过多,因此这里再计算通路就相对来说复杂了,只需要采用反向传播的思想即可,将问题拆解。但是结果还是很复杂的,如下所示,计算循环神经网络入门基础_数据_26的梯度,使用了循环神经网络入门基础_重置_18的偏导,同时如上,求循环神经网络入门基础_重置_18的偏导还会涉及循环神经网络入门基础_语言模型_29的偏导,递归下去...梯度的计算穿越了时间。

方便起见,一下分别称为式5-6.

循环神经网络入门基础_语言模型_30

因此会存在一个问题:梯度随时间t呈指数变化,易引发梯度消失梯度爆炸。(例如循环神经网络入门基础_语言模型_09,见式4循环神经网络入门基础_语言模型_32涉及一个次方问题,那么循环神经网络入门基础_语言模型_09 < 1会使最终趋于0,引发梯度消失,而若循环神经网络入门基础_语言模型_09 > 1会使最终趋于无穷,引发梯度爆炸)。

GRU—门控循环单元

引入门的循环网络缓解RNN梯度消失带来的问题,引入门概念,来控制信息流动,使模型更好的记住长远时期的信息,并缓解梯度消失。

  • 重置门:哪些信息需要遗忘
  • 更新门:哪些信息需要注意

激活函数为:sigmoid,值域为(0, 1),0表示遗忘,1表示保留。可知,门的值域是(0, 1)之间。

循环神经网络入门基础_重置_35

重置门是用于候选隐藏状态计算过程当中遗忘上一时间步隐藏状态中的哪一些信息。

更新门的作用是更新当前时间步隐藏状态的时候,组合上一时间步隐藏状态循环神经网络入门基础_重置_36。以及当前时间步的候选隐藏状态循环神经网络入门基础_数据_37得到最终的循环神经网络入门基础_语言模型_38

循环神经网络入门基础_重置_39

侯选隐藏状态

输入与上一时间步隐藏状态共同计算得到候选隐藏状态,用于隐藏状态计算。通过重置门,对上一时间步隐藏状态进行选择性遗忘, 对历史信息更好的选择。

GRU:

循环神经网络入门基础_语言模型_40

试比较原来的RNN:

循环神经网络入门基础_重置_41

循环神经网络入门基础_重置_42

隐藏状态

隐藏状态由候选隐藏状态上一时间步隐藏状态组合得来

循环神经网络入门基础_重置_43

循环神经网络入门基础_语言模型_44

GRU特点:

门机制采用Sigmoid激活函数,使门值为(0,1),0表示遗忘, 1表示保留。

若更新门自第一个时间步到 t - 1时间过程中,一直保持为1 , 信息可有效传递到当前时间步

循环神经网络入门基础_重置_43

重置门:用于遗忘上一时间步隐藏状态

循环神经网络入门基础_语言模型_40

更新门: 用于更新当前时间步隐藏状态

循环神经网络入门基础_重置_43

LSTM—长短期记忆网络

LSTM

引入 3 个门记忆细胞,控制信息传递

  • 遗忘门:哪些信息需要遗忘
  • 输入门:哪些信息需要流入当前记忆细胞
  • 输出门:哪些记忆信息流入隐藏状态
  • 记忆细胞: 特殊的隐藏状态,记忆历史信息

循环神经网络入门基础_重置_48

循环神经网络入门基础_数据_49

候选记忆细胞

记忆细胞:可理解为特殊隐藏状态,储存历史时刻信息

循环神经网络入门基础_重置_50

记忆细胞与隐藏状态

记忆细胞由候选记忆细胞上一时间步记忆细胞组合得来

循环神经网络入门基础_数据_51

由输出门控制记忆细胞信息流入隐藏状态

循环神经网络入门基础_数据_52

循环神经网络入门基础_数据_53

总结

循环神经网络入门基础_数据_54