0


DeepLearning 中的 RNN 与 BRNN(双向RNN)

RNN

下图为 RNN 隐藏层单元的可视化呈现:

BRNN

下图,紫色表示正向连接,绿色表示反向连接,通过下图箭头连接,这个网络就构成了一个无环图。如图,给定一个输入序列 X<1>--X<4>,这个序列首先计算前向的a<1>, 然后计算a<2>,接着a<3>, a<4>;而反向序列则是从a<4>开始,计算a<3>,注意这里是前向传播而不是反向传播。图中的前向传播,一部分计算是从左到右,一部分是从右到左。

计算完了a<3>,可以用这些激活值去计算反向的 a<2>,然后是反向的 a<1>。把所有这些激活值都计算完了,就可以计算预测结果了,这其中涉及到一个激活函数 y<t>,作用于 W_y + t 时刻的前向激活值a<t> + 反向激活值a<t>。

给一个例子,假设想要的得到预测结果 y<3>:信息从X<1>过来,流经前向的 a<1> , X<2> ---> a<2>, X<3> ---> a<3> ----> y<3>,而 X<4>来的信息 ---> 反向的 a<4> ---> 反向的 a<3> ---> y<3>。​​​​​​​这就使得时间 3 的预测结果不仅输入了过去的信息X<1>, X<2>,还有现在的信息X<3>以及未来的信息X<4>。

并且,这些基本单元不仅仅是标准的 RNN 单元,还可以是 LSTM 单元,GRU 单元。

双向RNN这种改进方法不仅能用于基本的 RNN 结构,也能用 GRU 和 LSTM 。通过这种改变,就可以用 RNN 或 GRU或 LSTM 构建的模型,并且能够预测任意位置,即使是在句子的中间,因为模型能够考虑整个句子的信息。

当然,双向 RNN 网络模型的缺点就是需要完整的数据序列才能够预测任意位置 。比如说,你需要构建一个语音识别系统,那么双向 RNN 模型需要考虑整个语音表达,但是通过这个去实现的话,则需要等待这个人说完然后获取整个语音表达才能处理这段语音并进一步做语音识别。对于实际的语音识别的应用,通常会有更加复杂的模块,而不仅仅是用我们见过的标准的RNN模型。

但是对于很多nlp的应用,如果你总是可以获取整个句子,这个标准的RNN算法实际上很高效。


本文转载自: https://blog.csdn.net/weixin_43600245/article/details/124954989
版权归原作者 顾盼你模样 所有, 如有侵权,请联系我们删除。

“DeepLearning 中的 RNN 与 BRNN(双向RNN)”的评论:

还没有评论