1.11 双向循环神经网络(Bidirectional RNN)

双向RNN模型在序列的某点处不仅可以获取之前的信息,还可以获取未来的信息

用只有4个单词的句子,x<1>x^{<1>}x<4>x^{<4>}。这个网络有一个前向的循环单元a<1>a^{\rightarrow <1>}a<2>a^{\rightarrow <2>}a<3>a^{\rightarrow <3>}a<4>a^{\rightarrow <4>},这四个循环单元都有一个当前输入xx输入进去,得到预测的y^<1>\hat y^{<1>}y^<2>\hat y^{<2>}y^<3>\hat y^{<3>}y^<4>\hat y^{<4>}

再增加一个反向循环层:a<1>a^{\leftarrow <1>}a<2>a^{\leftarrow <2>}a<3>a^{\leftarrow <3>}a<4>a^{\leftarrow <4>}

给定一个输入序列x<1>x^{<1>}x<4>x^{<4>},这个序列先后计算前向的a<1>a^{\rightarrow <1>}a<2>a^{\rightarrow <2>}a<3>a^{\rightarrow <3>}a<4>a^{\rightarrow <4>},而反向序列从a<4>a^{\leftarrow <4>}开始,计算完了反向的a<4>a^{\leftarrow <4>},可以用这些激活值计算反向a<3>,a<2>,a<1>a^{\leftarrow <3>},a^{\leftarrow <2>},a^{\leftarrow <1>}

值得注意的是计算的是网络激活值,这不是反向传播而是前向的传播,图中前向传播一部分计算是从左到右,一部分计算是从右到左。把所有激活值都计算完了就可以计算预测结果

预测结果:

y^=g(Wg[a<t>,a<t>]+by)\hat y^{} =g(W_{g}\left\lbrack a^{\rightarrow <t>},a^{\leftarrow <t>} \right\rbrack +b_{y})

这些基本单元不仅仅是标准RNN单元,也可以是GRU单元或者LSTM单元

双向RNN网络模型的缺点是需要完整的数据的序列才能预测任意位置。比如要构建一个语音识别系统,双向RNN模型需要等待整个语音说完,获取整个语音表达才能处理这段语音,并进一步做语音识别

Last updated