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