RNN(循环神经网络)
-
RNN示意图
x x x是一个向量,它表示输入层的值; s s s是一个向量,它表示隐藏层的值; U U U是输入层到隐藏层的权重矩阵; o o o也是一个向量,它表示输出层的值; V V V是隐藏层到输出层的权重矩阵。循环神经网络的隐藏层的值 s s s不仅仅取决于当前这次的输入 x x x,还取决于上一次隐藏层的值 s s s。权重矩阵 W W W就是隐藏层上一次的值作为这一次的输入的权重。输出值 o t {o}_{t} ot,是受前面历次输入值 x t 、 x t − 1 、 x t − 2 {x}_{t}、{x}_{t-1}、{x}_{t-2} xt、xt−1、xt−2、…影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。
-
计算公式:
-
双向循环神经网络
- 示意图
- 计算公式:
- 示意图
LSTM(长短时记忆网络)
- 单元状态(cell state)
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
在t时刻,LSTM的输入有三个:当前时刻网络的输入值 x t x_t xt、上一时刻LSTM的输出值 h t − 1 h_{t-1} ht−1、以及上一时刻的单元状态 c t − 1 c_{t-1} ct−1;
LSTM的输出有两个:当前时刻LSTM输出值 h t h_{t} ht、和当前时刻的单元状态 c t c_{t} ct。
用到了门(gate)的概念。门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。
LSTM用两个门来控制单元状态c的内容,一个是遗忘门(forget gate),它决定了上一时刻的单元状态 c t − 1 {c}_{t-1} ct−1有多少保留到当前时刻 c t {c}_{t} ct;另一个是输入门(input gate),它决定了当前时刻网络的输入 x t {x}_{t} xt有多少保存到单元状态 c t {c}_{t} ct。LSTM用输出门(output gate)来控制单元状态 c t {c}_{t} ct有多少输出到LSTM的当前输出值 h t {h}_{t} ht。
LSTM需要学习的参数共有8组,分别是:遗忘门的权重矩阵 W f {W}_{f} Wf和偏置项 b f {b}_{f} bf、输入门的权重矩阵 W i {W}_{i} Wi和偏置项 b i {b}_{i} bi、输出门的权重矩阵 W o {W}_{o} Wo和偏置项 b o {b}_{o} bo,以及计算单元状态的权重矩阵 W c {W}_{c} Wc和偏置项 b c {b}_{c} bc。
- LSTM单元结构:
-
遗忘门:
-
输入门:
-
用于描述当前输入的单元状态,它是根据上一次的输出和本次输入来计算的:
-
当前时刻的单元状态
-
输出门
-
LSTM最终的输出
-
GRU
GRU 是LSTM 的一个变体,GRU 保持了 LSTM 的效果同时又使结构更加简单。
GRU 只剩下两个门,即更新门和重置门。
-
更新门
用于控制前一时刻的状态信息被代入到当前状态的程度,更新门的值越大说明前一时刻的状态信息带入越多。 -
重置门
用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略得越多。 -
GUR单元结构