双向RNN

普通的RNN只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。

比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。

BRNN有两个RNN上下叠加在一起组成的,输出由这两个RNN的状态共同决定。

从前往后:从1到t时刻正向计算,得到并保存每个时刻的隐藏层的输出向后传播

从后往前:从t时刻向1反向传播,得到并保存每个时刻向后隐藏层的输出

\overrightarrow{h_t}=g(x_tW_{xh}^{(f)}+\overrightarrow{h}_{t-1}W_{hh}^{(f)}+b_h^{(f)})

 \overleftarrow{h_t^{'}}=g(x_tW_{xh}^{(b)}+\overleftarrow{h}_{t+1}^{'}W_{hh}^{(b)}+b_h^{(b)})

对于每个时刻t,输入会同时提供给两个方向相反的RNN。

计算过程是,先从前往后计算h_1、h_2...,h_t,再从后往前计算,最终得到两个隐状态

完整的隐藏状态是把前向和后向的隐藏状态拼接起来

H_t=[\overrightarrow{h_t},\overleftarrow{h^{'}_t}]

如果前向和后向的隐状态都是1000*1维的,拼接后的H_t就是1000*2维的

输出由这两个单向RNN共同决定:

y_t=H_tW_{hq}+b_q

注意:

双向RNN需要保存两个方向的权重矩阵,所以需要的内存约为RNN的两倍。

两条RNN完全独立,不共享参数也不共享状态


 

参考:(46条消息) Keras学习:05.RNN和双向RNN讲解及实践_AI学习社的博客-CSDN博客_双向rnn

41-双向循环神经网络和代码实现-自然语言处理-pytorch_哔哩哔哩_bilibili 

RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练_哔哩哔哩_bilibili

(46条消息) (五)通俗易懂理解——双向LSTM_Dreamdreams8的博客-CSDN博客_双向lstm


(46条消息) 一幅图真正理解LSTM、BiLSTM_⊙月的博客-CSDN博客_bilstm

猜你喜欢

转载自blog.csdn.net/Michale_L/article/details/126304723
RNN
今日推荐