输入与输出:
输入:序列上不同时刻的数据依次传入,每一时刻必须有输入
输出:对序列下一时刻的预测;对当前时刻信息的处理结果,每一时刻不一定要有输出。
用途:处理和预测序列数据。
当前输出与之前的信息有关,体现在网络结构上就是,就是会记忆之前的信息,并利用之前的信息影响后面节点的输出,即隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括隐藏层上一刻的输出。
对比
对比 | 全连接神经网络FNN | 卷积神经网络CNN | 循环神经网络RNN |
---|---|---|---|
网络结构 | 层与层之间节点全部连接,每层之间的节点无连接 | 层与层之间节点部分连接,每层之间的节点无连接 | 每层之间的节点有连接 |
参数共享 | 无 | 在不同的空间位置共享参数 | 在不同的时间位置共享参数 |
损失函数 | — | ---- | 每一时刻都有输出,总损失为所有时刻的损失函数的总和 |
理解
每一时刻对于模块A来说,读取输入 x t x_t xt以及上一刻的隐藏状态 h t − 1 h_{t-1} ht−1,得到输出 o t o_t ot,并且更新隐藏层的状态为 h t h_t ht。 o t o_t ot与 h t h_t ht( o t o_t ot= h t h_t ht)都由 x t x_t xt和 h t − 1 h_{t-1} ht−1共同决定, h t − 1 h_{t-1} ht−1浓缩前面序列 x 0 x_0 x0、 x 1 x_1 x1、… x t − 1 x_{t-1} xt−1的信息,用于作为输出 o t o_t ot的参考。
注意1:在不同时刻,模块A的运算和变量是相同的,RNN可看做统一神经网络结构(循环体)被无限复制的结果,能够使用有限的参数处理任意长度的序列。
注意2:序列长度可以无限延长、但是 h h h状态维度有限,不可能将序列的全部信息保存下来,因此模型必须学习只保留与后面任务 o t o_t ot、 o t + 1 o_{t+1} ot+1…相关的最重要的信息
模型构建
如何设计循环体的网络结构是循环神经网络解决实际问题的关键
循环体结构:
a) 最简单的——使用单层全连接神经网络作为循环体,单一tanh循环体结构
循环神经网络的状态通过一个向量表示,向量维度称之为隐藏层的大小 n n n,
输入包含两部分:当前时刻的输入样本维度为 x x x,上一刻的状态维度为 n n n,