×

PyTorch教程10.4之双向递归神经网络

消耗积分:0 | 格式:pdf | 大小:0.13 MB | 2023-06-05

尤立虔

分享资料个

到目前为止,我们的序列学习任务的工作示例是语言建模,我们的目标是在给定序列中所有先前标记的情况下预测下一个标记。在这种情况下,我们只希望以左向上下文为条件,因此标准 RNN 的单向链接似乎是合适的。然而,还有许多其他序列学习任务上下文,在这些上下文中,在向左和向右上下文的每个时间步调整预测是非常好的。例如,考虑词性检测。在评估与给定词相关的词性时,为什么我们不应该考虑两个方向的上下文?

另一项常见任务(通常在针对感兴趣的实际任务微调模型之前用作预训练练习)是屏蔽文本文档中的随机标记,然后训练序列模型以预测缺失标记的值。请注意,根据空白后面的内容,缺失标记的可能值会发生显着变化:

  • 我是___

  • ___饿了。

  • ___饿了,我能吃半头猪。

在第一句话中,“快乐”似乎是一个可能的候选者。“不”和“非常”这两个词在第二句中似乎说得通,但“不”与第三句似乎格格不入。

幸运的是,一种简单的技术可以将任何单向 RNN 转换为双向 RNN Schuster 和 Paliwal,1997我们简单地实现两个单向 RNN 层,它们以相反的方向链接在一起并作用于相同的输入(图 10.4.1)。对于第一个 RNN 层,第一个输入是x1最后的输入是 xT,但是对于第二个 RNN 层,第一个输入是 xT最后的输入是x1. 为了产生这个双向 RNN 层的输出,我们只需将两个底层单向 RNN 层的相应输出连接在一起。

https://file.elecfans.com/web2/M00/AA/43/pYYBAGR9N2OAGJ96AADWxnNwvHE433.svg

图 10.4.1双向 RNN 的架构。

正式地为任何时间步长t,我们考虑一个小批量输入 Xt∈Rn×d(示例数量: n,每个示例中的输入数量:d) 并令隐藏层激活函数为ϕ. 在双向架构中,这个时间步长的前向和后向隐藏状态是H→t∈Rn×hH←t∈Rn×h,分别在哪里h是隐藏单元的数量。前向和后向隐藏状态更新如下:

(10.4.1)H→t=ϕ(XtWxh(f)+H→t−1Whh(f)+bh(f)),H←t=ϕ(XtWxh(b)+H←t+1Whh(b)+bh(b)),

权重在哪里 Wxh(f)∈Rd×h,Whh(f)∈Rh×h,Wxh(b)∈Rd×h, and Whh(b)∈Rh×h, 和偏见bh(f)∈R1×hbh(b)∈R1×h都是模型参数。

接下来,我们连接前向和后向隐藏状态


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !