双向RNN模型在序列的某点处不仅可以获取之前的信息,还可以获取未来的信息
用只有4个单词的句子,x<1>到x<4>。这个网络有一个前向的循环单元a→<1>,a→<2>,a→<3>,a→<4>,这四个循环单元都有一个当前输入x输入进去,得到预测的y^<1>,y^<2>,y^<3>和y^<4>
再增加一个反向循环层:a←<1>,a←<2>,a←<3>,a←<4>
给定一个输入序列x<1>到x<4>,这个序列先后计算前向的a→<1>,a→<2>,a→<3>,a→<4>,而反向序列从a←<4>开始,计算完了反向的a←<4>,可以用这些激活值计算反向a←<3>,a←<2>,a←<1>
值得注意的是计算的是网络激活值,这不是反向传播而是前向的传播,图中前向传播一部分计算是从左到右,一部分计算是从右到左。把所有激活值都计算完了就可以计算预测结果
预测结果:
y^=g(Wg[a→<t>,a←<t>]+by) 这些基本单元不仅仅是标准RNN单元,也可以是GRU单元或者LSTM单元
双向RNN网络模型的缺点是需要完整的数据的序列才能预测任意位置。比如要构建一个语音识别系统,双向RNN模型需要等待整个语音说完,获取整个语音表达才能处理这段语音,并进一步做语音识别