RNN 循环神经网络公式总结

RNN 网络

RNN 模型计算分为两步,第一步,计算第t个时间步的隐藏层a;第二步,计算 t 步的预测值y。

其中 Wax 和 Waa 两组参数分别与前一层的激活 a 和当前数据 x 结合,也可将其合二为一,并与 x 和 a 的连接计算。

在 RNN 网络中最常用激活函数是 tanh,有时也用 ReLU,一般只在最后一层使用 sigmoid 或 softmax。

LSTM 网络

相对于基础的 RNN,LSTM 增加了 c(Cell)状态单元,可将其看做在计算激活 a 的过程中保存的当前状态。它与 a 都在工作过程中一直向下一步传递。

公式中的Γ表示门控 gate,门控使用 sigmoid 函数计算得出 0-1 之间的值,用于过滤(保留或去掉)数据。LSTM 中增加的门控分别是:遗忘门 f,输入门 i 和输出门 o,它们分别控制在更新当前 cell 内容时,之前的 cell 占比,当前的 cell 占比,以及如何用 cell 生成a。

举个简单的例子:用 LSTM 生成文字,当输入“回车”时,说明本段已结束,之前的内容被遗忘门丢弃;当前输入是“笑脸”时,输入本身没太大意义,被输入门丢弃;如果之前输入了“本段没”,当前时间步又输入了“用”,加在一起是“本段没用”,则输出门将其丢弃。(请领会精神)。

一般 RNN 的层数不会特别多(三层就差不多了),除了层数以外,还需要按时间步向后传播,计算量也很大。门控值由前一激活层 a 和当前时间步的数据 x 计算得出,每一门控分别对应一组参数 w 和 b,因此,参数比 RNN 大三倍。这与 Attention 注意力机制非常相似,用当前输入和当前状态计算权值,给数据流加权。

GRU 网络

GRU 可视为 LSTM 的变体,它使用了两个门控,更新门 u 控制当前状态和之前状态的占比(LSTM 使用输入门和遗忘门实现);去掉了输出门,用状态值作为激活值,简化算法结构;另外加入了重置门 r,用于控制当状状态对前一状态的依赖程度。

深度神经网络一般都面临梯度爆炸和梯度消失的问题,梯度爆炸问题可以通过加入归一化层或梯度修剪的方式解决,LSTM 和 GRU 主要用于缓解梯度消失问题,如 GRU 中当更新门趋近 0 时,当前状态与之前状态相等,类似于用残差网络解决梯度消失问题。它使 RNN 网络能在更长的时间步中工作,并支持更深层次的网络。

双向网络

双向网络在求 y 时,需要计算向前的激活层和向后的激活层,常用解决类似于完型填空的问题,需要考虑上下文的场景。