循环神经网络
循环核
我们可以通过卷积神经网络达成非连续数据的分类目标,并发现某些具有时间序列特征的数据之间存在关联关系。例如,在人类大脑中存在一种称为脑记忆体的记忆机制能够从历史数据中推导出未来的趋势。例如,在鱼类缺氧时___会收缩甚至消失?我们下意识地会推测接下来可能出现的情况可能与缺氧有关。

循环核中的内存单元数量可以被配置以调整容量。一旦确定了内存单元的数量以及输入x和输出y的维度,循环核周围的这些带有训练参数的维度也随之确定。循环核内部存储了每个时间点的状态信息h_t,此时所存储的状态信息h_t即为:

当前时刻的输出为:

其实这就是一种全连接层,在每次前向传播的过程中在循环神经网络的计算核心中存储的状态信息ht都会被不断更新这三个关键的权重矩阵——分别是权重矩阵wxh whh以及输出权重矩阵why在整个训练过程中始终保持不变而在反向传播的过程中这三个权重矩阵会通过梯度下降算法进行优化调整
循环核按时间步展开
即按时间轴方向展开

经过对参数矩阵进行训练优化工作后,在测试阶段我们采用效果最为显著的一组参数矩阵来进行输入数据的前向传播计算以获得最终预测结果。
循环神经网络系统通过循环核提取序列中的时序特征随后将这些特征传递至全连接层完成连续数据序列的整体预测过程
循环计算层
每个循环核构成一个循环计算层

每个循环核中记忆体的个数可以自定义
tensorflow描述循环计算层:
tf.keras.layers.SimpleRNN(记忆体个数, activation='激活函数', return_sequences=是否每个时刻输出ht到下一层)
## activation默认是tanh
## return_sequences=True表示各时间步输出ht
## return_sequences=False表示仅最后时间步输出ht(默认)
## 一般来说,最后一层的循环核用False,中间层用True
AI写代码


注意,送入RNN的训练数据是有要求的,要求是三维数据:

循环计算层计算过程
输入一个字母预测下一个字母(时间步为1):





如果是连续输入四个字母预测下一个字母(时间步为4):

可以看出,在本次前向传播过程中, 模型将输入数据划分为四个时间步长阶段, 并对其中的参数在每次迭代时都会被更新. 此外, 在这一过程结束后, 在最后一个时间步长阶段得到的模型状态 ht 已预先训练完毕并保持稳定状态. 最后通过使用该状态用于生成预测结果, 则可得到最终的结果 a.



Embedding——一种编码方法
在上述案例中,我们采用了独热码对字母进行了编码。这种编码方案要求独热码的宽度必须与词表大小一致;随着词表规模的增长会产生严重的资源浪费问题,在自然语言处理领域这是一个值得深入研究的方向。

来看一下代码实现:



股票预测
这里先用tushare模块下载贵州茅台的日k线数据







用LSTM实现股票预测
传统的RNN基于内存实现短期记忆来预测连续数据,在面对较长序列时会扩展时间步数过多。反向传播更新参数的过程中,在按时间步迭代相乘梯度会导致梯度消失现象出现。因此,在1997年Hochreiter等人提出了一种长短记忆网络LSTM模型来解决这一问题

该模型采用了三个关键参数(门限),它们均基于sigmoid激活函数运行,并使参数范围限定在区间[0, 1]内。
细胞状态由前一时间点长期记忆与遗忘门作用后的结果与当前时刻新知识乘以输入门作用后的结果相加而成。
当存在多层循环网络时,则后续时刻的输入xt即为前一时刻输出ht的结果。
Tensorflow对LSTM的具体说明包括以下几个方面:初始化状态向量、计算遗忘和输入门的具体操作、更新细胞态和输出态的过程以及最后通过全连接层进行预测的具体步骤等详细内容。



GRU实现股票预测
2014年,Chou等人优化了LSTM结构,实现了GRU网络。

Tensorflow描述GRU:



