diff --git a/chapter_natural-language-processing/seq2seq-attention.md b/chapter_natural-language-processing/seq2seq-attention.md index c81d57a3b277772802871080357795a4448de2ba..c5dbfc24c6064ca22a27c862044c6d036c7693b1 100644 --- a/chapter_natural-language-processing/seq2seq-attention.md +++ b/chapter_natural-language-processing/seq2seq-attention.md @@ -51,15 +51,6 @@ $$\overleftarrow{\boldsymbol{h}}_t = f(\boldsymbol{x}_t, \overleftarrow{\boldsym 当我们希望编码器的输入既包含正向传递信息又包含反向传递信息时,我们可以使用双向循环神经网络。例如,给定输入序列$x_1, x_2, \ldots, x_T$,按正向传递,它们在循环神经网络的隐含层变量分别是$\overrightarrow{\boldsymbol{h}}_1, \overrightarrow{\boldsymbol{h}}_2, \ldots, \overrightarrow{\boldsymbol{h}}_T$;按反向传递,它们在循环神经网络的隐含层变量分别是$\overleftarrow{\boldsymbol{h}}_1, \overleftarrow{\boldsymbol{h}}_2, \ldots, \overleftarrow{\boldsymbol{h}}_T$。在双向循环神经网络中,时刻$i$的隐含层变量可以把$\overrightarrow{\boldsymbol{h}}_i$和$\overleftarrow{\boldsymbol{h}}_i$连结起来。 -```{.python .input n=1} -# 连结两个向量。 -from mxnet import nd -h_forward = nd.array([1, 2]) -h_backward = nd.array([3, 4]) -h_bi = nd.concat(h_forward, h_backward, dim=0) -h_bi -``` - ### 解码器 编码器最终输出了一个背景向量$\boldsymbol{c}$,该背景向量编码了输入序列$x_1, x_2, \ldots, x_T$的信息。 diff --git a/chapter_recurrent-neural-networks/bi-rnn.md b/chapter_recurrent-neural-networks/bi-rnn.md index bb4cf549ec96bb19938bd9968fb7da58060aa11d..9eb195e0522088daee114e0a00718cd0deb17cef 100644 --- a/chapter_recurrent-neural-networks/bi-rnn.md +++ b/chapter_recurrent-neural-networks/bi-rnn.md @@ -23,7 +23,7 @@ $$\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hy} + \boldsymbol{b}_y,$$ 双向循环神经网络架构如图6.4所示。和前面介绍的单向循环神经网络不同,给定一段时间序列,双向循环神经网络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并可能捕捉了整个序列的信息。 -[ti] +![双向循环神经网络架构。](../img/bi-rnn.svg) 我们将在“自然语言处理”篇章中应用并实验双向循环神经网络。