zoukankan      html  css  js  c++  java
  • Bidirectional RNN (BRNN)

    整理并翻译自吴恩达深度学习系列视频:序列模型第一周,有所详略。

    Bidirectional RNN (BRNN)

    Prerequisite:
    Gated Recurrent Unit(GRU)
    Long Short term memory unit(LSTM)

    Unidirectional RNN/Forward directional only RNN

    在这里插入图片描述
    基本的RNN结构不能获取某个预测输出之后的信息,只能根据前面的输入做判断,比如 y ^ &lt; 3 &gt; hat{y}^{&lt;3&gt;} y^<3>,只能根据"He"、"said"两个输入单词做判断,而其之后的"bears"是命名实体判别中的重要依据,却不能被考虑进去。于是双向循环网络就被发明出来了。

    Bidirectional RNN (BRNN)

    在这里插入图片描述
    双向循环网络不仅仅有基本循环网络的forward components,增加了反向的backward components(如图黄色部分),连接方式同forward components,不同之处在于其有单独的激活函数a,并且激活函数值传递的方式与forward components相反。请注意与反向传播做区分,这里并没有计算导数。

    这构成了一个有向无环图(Acyclic graph),注意forward components和backward components是互不连接的。一般来说,来从前往后计算,再从后往前计算,计算过程相互独立,互不干扰。

    计算预测输出值,变成了:
    y ^ &lt; t &gt; = g ( W y [ a → &lt; t &gt; , a ← &lt; t &gt; ] + b y ) hat{y}^{&lt;t&gt;}=g(W_y[overrightarrow{a}^{&lt;t&gt;},overleftarrow{a}^{&lt;t&gt;}]+b_y) y^<t>=g(Wy[a <t>,a <t>]+by)

    为了区别forward components和backward components,前者的激活函数记为 a → &lt; t &gt; overrightarrow{a}^{&lt;t&gt;} a <t>,后者的激活函数记为 a ← &lt; t &gt; overleftarrow{a}^{&lt;t&gt;} a <t>。箭头的方向表示了其值传递的方向。

    当然,普通的RNN blocks也可以替换为GRU blocks或者LTSM blocks.

    Pros & Cons

    首先前面叙述的单向的网络不能考虑后面的输入这一问题得到了解决。在计算某个输出值时,双向循环网络不仅能考虑forward components计算的激活函数值,也能考虑到backward components计算的激活函数值,即它考虑到了所有位置的输入,并且能在句子的任意位置输出预测值。

    对于有大量文本的NLP问题,如果你有完整的句子,想要label句子里的单词,使用LSTM单元的双向循环网络是最为常用的,而且也是首选的方法。

    双向循环网络的缺点是在任意位置输出预测之前,你需要完整的数据序列(比如一个完整句子)。在一个语音识别的应用场景下,BRNN需要整个语音即说话人全部说完才能进行处理,实时性可能受到影响。实际的语音识别系统通常有更加复杂的模块来解决这一问题,而不是之前介绍的标准BRNN结构。

  • 相关阅读:
    php 将富文本编辑后的内容取出
    阿里云Windows远程连接出现身份验证错误,要求的函数不正确”的报错。
    composer切换中国镜像
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    golang ioutil 包源码阅读
    ssh 远程登录 REMOTE HOST IDENTIFICATION HAS CHANGED 问题
    Golang -- fallthrough
    Golang 执行 go run main.go 显示 undefined
    Golang Playground 进度条示例
    关系型数据库和非关系型数据库(NOSQL)
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842496.html
Copyright © 2011-2022 走看看