自学内容网 自学内容网

深度学习基础—双向RNN和深层RNN

1.双向RNN

深度学习基础—循环神经网络(RNN)icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/143417972?fromshare=blogdetail&sharetype=blogdetail&sharerId=143417972&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

        在《循环神经网络(RNN)》这篇博客我们已经知道,普通的RNN结构有一些缺点,比如下图这个案例:

        要识别Teddy是否是人名的一部分,普通RNN在第3个时间步时只能学习到Teddy以前的内容,而比较关键的词在第4个时间步,因此要想解决这个问题,就需要让网络有预知“未来”的能力,双向循环神经网络正是有这样能力的结构。

        上图所示就是双向RNN的结构,给定序列x<1>,...,x<4>,前向序列从x<1>输入,反向序列从x<4>输入,把所有的正向激活值(带->的a)和所有的反向激活值(带<-的a)计算出来后,在结合正向激活值和反向激活值进行预测,公式如下所示:

        因此,对于每一个时间步的输出,我们不仅考虑了过去的信息,也考虑的未来的信息,这对于人名识别的准确率将会大大提升。

        双向RNN的优点是预测考虑了整个序列的信息。缺点是需要完整的数据的序列。

2.深层RNN

        编号3所示的结构即为我们常见的RNN结构,现在不再用a<0>来表示,符号改为a[1]<0>,[1]表示第一层,<0>表示时间步0。然后我们构建3层这样的结构,这就构成了一个简单的深层RNN(实际上,3层已经不小了,由于时间序列可能会很长,因此这样的RNN可能规模很大)。假如计算编号5所示的a[2]<3>的激活值,公式如下:

        a[2]<3>接受两个输入,第一层同一个时间步3的激活值和第二层上一个时间步2的激活值,然后传递给下一个时间步和下一层,由于这样的结构,构建的深层RNN学习能力也更强大。

        我们还可以将输出的y<1>这样的位置继续加深,但这些加深的层数在水平方向并不连接。也可以将普通RNN单元替换成GRU单元或者LSTM单元。更可以将每层换成双向RNN。当然越复杂的结构需要的训练资源更加多,时间更长。


原文地址:https://blog.csdn.net/sniper_fandc/article/details/143457364

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!