循环神经网络(RecurrentNN):有记忆的神经网络

什么是循环神经网络?循环神经网络可以解决什么问题?

鱼离不开__?下意识的预测出可能性最大的字——“水”。这是因为人大脑中存在记忆,能够将鱼和水联系在一起。

循环核

  • 循环核:参数时间共享,循环层提取时间信息。
  • 循环核具有记忆力,圆柱体是记忆体,记忆体下面、侧面、上面分别有三组待训练的参数矩阵。通过不同时刻的参数共享,实现了对时间序列的信息提取。可以设定记忆体的个数以改变记忆体的容量

解释上面的公式:

  • $y_{t}$是当前时刻循环核的输出特征;$h_{t}$是每个时刻的状态信息;by是偏置;softmax为激活函数。
  • $𝑥_{𝑡}$为当前时刻的输入特征;$ℎ_{𝑡−1}$为记忆体上一时刻存储的状态信息;bh为偏置;tanh为激活函数。

反向传播时:三个参数矩阵wxh、whh、why被梯度下降法更新。

前向传播时:记忆体内存储的状态信息ht,在每个时刻都被刷新,三个参数矩阵wxh、whh、why自始至终都是固定不变的。

循环核时间步展开

将循环核按时间步展开就是把循环核按照时间轴方向展开,可以得到上图。每个时刻的状态信息$h_{𝑡}$将会被更新,但记忆体周围的参数矩阵和两个偏置项是固定不变的,我们最终要得到的、训练优化的是这些参数矩阵。训练完成后,使用效果最好的参数矩阵执行前向传播,然后输出预测结果。这些参数矩阵就像我们人脑中成年累月累积下来的记忆数据,在遇到鱼离不开__?的时候,能够经过前向传播得到结论是“水”。

$y_{t}$就是神经网络的末层。从公式上来看$t_{t}$就是一个全连接的神经网络。借助全连接网络实现预测,

循环核计算层

每个循环核构成一层循环计算层,循环计算层的层数是向输出方向增长的。

有几个循环核就构成了几个循环计算层。

通过字母预测的例子:体会循环网络的手动计算过程

本小节通过手动计算循环计算层的前向传播体会一个字母预测的例子。

字母预测:输入a预测出b,输入b预测出c,输入c预测出d,输入d预测出e,输入e预测出a。

使用独热码对五个字母进行编码

因为神经网络的输入都是数字,所以我们先要把用到的a、b、c、d、e这五个字母用数字表示。最简单直接的方法就是用独热码对这五个字母编码。每个字母用一个独热码进行表示。(实际中可使用其他编码方式)

初始化wxh、whh和why三个参数矩阵

随机生成了Wxh、Whh和Why三个参数矩阵,记忆体的个数为3,初始状态ht为[0.0 0.0 0.0]

记忆体的个数选取3:

计算当前时刻的状态信息$h_{t}$

计算当前时刻的状态信息$h_{t}$如图右下角,开始计算。

经过tanh()函数后,记忆体$h_{t}$被刷新得到ht:

这一过程就是脑中的记忆被当前输入新的的事物更新了。

$$\begin{aligned} \mathrm{h}_{t} &=\tanh \left(x_{t} w_{x h}+h_{t-1} \mathrm{w}_{h h}+\mathrm{bh}\right) \\ &=\tanh ([-2.3 \quad 0.8 \quad 1.1]+0+[0.5\quad0.3\quad-0.2]) \\ &=\tanh [-1.8 \quad 1.1 \quad 0.9]=[-0.9 \quad 0.8 \quad 0.7] \end{aligned} $$​

输出yt是把提取到的时间信息,通过全连接进行识别预测的过程,是整个网络的输出层,ht是当前记忆体内的数值[-0.9 0. 8 0. 7],乘以这个绿色的参数矩阵why,加上偏置矩阵by,得到[-0.7 -0.5 3.3 0.0 -0.7],过softmax函数得到[0.02 0.02 0.91 0.03 0. 02],可见模型认为有91%的可能性输出字母c,所以循环网络输出了预测结果c。

$$\begin{aligned} \mathrm{y}_{t}=& \operatorname{softmax}\left(h_{t} w_{h y}+b y\right) \\ =& \operatorname{softmax}([-0.7\quad-0.6\quad2.9\quad0.7\quad-0.8]+[0.0 \quad 0.1 \quad 0.4 \quad-0.7\quad0.1]) \\ &=\operatorname{softmax}([-0.7 \quad- 0.5 \quad 3.3 \quad0.0\quad-0.7]) \\ &=[0.02 \quad 0.02 \quad 0.91 \quad 0.03 \quad 0.02] \end{aligned}$$

前向传播算出预测矩阵

这一步就是学习完成后预测的过程,通过前向传播来实现的。

接下来$y_{t}$是把提取到的时间信息通过全连接预测。

通过字母预测的例子:体会循环网络的TensorFlow计算过程

本节目标:学习循环神经网络,用RNN、LSTM、GRU实现连续数据的预测(以股票预测为例)。

代码部分:

训练计算过程Ⅱ

把时间核按时间步展开,连续输入多个字母预测下一个字母的例子,以连续输入四个字母预测下一个字母为例。说明循环核按时间展开后,循环计算过程。

​仍然使用三个记忆体,初始时刻记忆体内的记忆是0,用一套训练好的参数矩阵,说明循环计算的前向传播过程,在这个过程中的每个时刻参数矩阵是固定的,记忆体会在每个时刻被更新。