双向循环神经网络
原文链接:动手学深度学习pytorch版:6.10 双向循环神经网络github:https://github.com/ShusenTang/Dive-into-DL-PyTorch双向循环神经网络之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句
原文链接:动手学深度学习pytorch版:6.10 双向循环神经网络
github:https://github.com/ShusenTang/Dive-into-DL-PyTorch
双向循环神经网络
之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。图6.12演示了一个含单隐藏层的双向循环神经网络的架构。
下面我们来介绍具体的定义。给定时间步 t t t 的小批量输入 X t ∈ R n × d \boldsymbol{X}_{t} \in \mathbb{R}^{n \times d} Xt∈Rn×d (样本数为 n n n, 输入个数为 d d d ) 和隐藏层激活函数为 ϕ ∘ \phi_{\circ} ϕ∘ 在双向循环神经网络 的架构中,设该时间步正向隐藏状态为 H ⃗ t ∈ R n × h \vec{H}_{t} \in \mathbb{R}^{n \times h} Ht∈Rn×h (正向隐藏单元个数为 h ) \left.h\right) h), 反向隐藏状态为 H ← t ∈ R n × h ( \overleftarrow{H}_{t} \in \mathbb{R}^{n \times h}( Ht∈Rn×h( 反向隐藏单元个数为 h ) h) h) 。我们 可以分别计算正向隐藏状态和反向隐藏状态:
H → t = ϕ ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) H ← t = ϕ ( X t W x h ( b ) + H ← t + 1 W h h ( b ) + b h ( b ) ) \begin{aligned} &\overrightarrow{\boldsymbol{H}}_{t}=\phi\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}^{(f)}+\overrightarrow{\boldsymbol{H}}_{t-1} \boldsymbol{W}_{h h}^{(f)}+\boldsymbol{b}_{h}^{(f)}\right) \\ &\overleftarrow{\boldsymbol{H}}_{t}=\phi\left(\boldsymbol{X}_{t} \boldsymbol{W}_{x h}^{(b)}+\overleftarrow{\boldsymbol{H}}_{t+1} \boldsymbol{W}_{h h}^{(b)}+\boldsymbol{b}_{h}^{(b)}\right) \end{aligned} Ht=ϕ(XtWxh(f)+Ht−1Whh(f)+bh(f))Ht=ϕ(XtWxh(b)+Ht+1Whh(b)+bh(b))
其中权重 W x h ( f ) ∈ R d × h , W h h ( f ) ∈ R h × h , W x h ( b ) ∈ R d × h , W h h ( b ) ∈ R h × h 和偏差 b h ( f ) ∈ R 1 × h , b h ( b ) ∈ R 1 × h 均为模型参数。 \boldsymbol{W}_{x h}^{(f)} \in \mathbb{R}^{d \times h}, \boldsymbol{W}_{h h}^{(f)} \in \mathbb{R}^{h \times h}, \boldsymbol{W}_{x h}^{(b)} \in \mathbb{R}^{d \times h}, \boldsymbol{W}_{h h}^{(b)} \in \mathbb{R}^{h \times h \text { 和偏差 } \boldsymbol{b}_{h}^{(f)} \in \mathbb{R}^{1 \times h}, \boldsymbol{b}_{h}^{(b)} \in \mathbb{R}^{1 \times h} \text { 均为模型参数。 }} Wxh(f)∈Rd×h,Whh(f)∈Rh×h,Wxh(b)∈Rd×h,Whh(b)∈Rh×h 和偏差 bh(f)∈R1×h,bh(b)∈R1×h 均为模型参数。
然后我们连结两个方向的隐藏状态 H ⃗ t \vec{H}_{t} Ht 和 H ← t \overleftarrow{H}_{t} Ht 来得到隐藏状态 H t ∈ R n × 2 h \boldsymbol{H}_{t} \in \mathbb{R}^{n \times 2 h} Ht∈Rn×2h, 并将其输入到输出层。 输出层计算输出 O t ∈ R n × q \boldsymbol{O}_{t} \in \mathbb{R}^{n \times q} Ot∈Rn×q (输出个数为 q q q ):
O t = H t W h q + b q , \boldsymbol{O}_{t}=\boldsymbol{H}_{t} \boldsymbol{W}_{h q}+\boldsymbol{b}_{q}, Ot=HtWhq+bq,
小结
- 双向循环神经网络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入)。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)