循环核:参数时间共享,循环层提取时间信息
具有记忆力,通过不同时刻的参数共享,实现了对时间序列的信息提取
yt :当前时刻循环核的输出特征——求解过程为一个全连接层
ht :记忆体当前时刻存储的状态信息
ht-1:记忆体上一时刻存储的状态信息
bh、by:偏置项
训练优化的就是这些参数矩阵,训练完成后,使用效果最好的参数矩阵执行前向传播,输出预测结果。
循环神经网络:借助循环核提取时间特征后,送入全连接网络
借助全连接网络,实现连续数据预测。
循环计算层:向输出方向生长
每个循环核构成一层循环计算层
TF描述循环计算层
tf.keras.layers.SimpleRNN(记忆体个数, activation='激活函数',
return_sequences = 是否每个时刻输出ht到下一层)
activation = '激活函数' #不写默认tanh
return_sequences = True #各时间步输出ht,常在中间层循环核使用
return_sequences = False #仅最后时间步输出ht(默认),常在最后一层循环核使用
例如:SimpleRNN(3, return_sequence=True)
循环核在每个时间步输出ht可用下图表示
循环核仅在最后一步输出ht
API对送入循环层的数据维度有要求,送入循环层的数据是三维的,即x_train维度:
[送入样本数,循环核时间展开步数,每个时间步输入特征个数]
(1时间步=1循环核个数)
例如下图
循环计算过程举例
1、使用一个字母预测下个字母
初始时ht中为全零
在输入字母b的向量经过计算后更新ht。可理解为脑中记忆因当前输入事物而更新了。
输出yt,就是把提取到的时间信息,通过全连接进行识别预测的过程,是整个网络的输出层。
用RNN实现输入一个字母,预测下一个字母(one-hot编码)
搭建具有三个记忆体的循环层,3为超参数。记忆体个数越多,记忆力越好,但占用的资源更多。
2、使用四个字母预测下个字母
在四个时间步中用到的参数矩阵wxh、偏置项bh数值相同
用RNN实现输入连续四个字母,预测下一个字母(one-hot编码)
即abcd->e bcde->a cdea->b deab->c eabc->d