目前为止我们考虑的所有循环神经网络有一个"因果"结构,意味着在时刻tt的状态只能从过去的序列x(1),,x(t1)x^{(1)},\cdots,x^{(t-1)}以及当前的输入x(t)x^{(t)}捕获信息。 我们还讨论了某些在yy可用时,允许过去的yy值信息影响当前状态的模型。

然而,在许多应用中,我们要输出的y(t)y^{(t)}的预测可能依赖于整个输入序列

[success]
例子:识别人名
He said, "Teddy bears are on sale!"
He said, "Teddy Roosevelt was a great president!"

例如,在语音识别中,由于协同发音,当前声音作为音素的正确解释可能取决于未来几个音素,甚至潜在的可能取决于未来的几个词,因为词与附近的词之间存在语言学上的依赖:如果当前的词有两种声学上合理的解释,我们可能要在更远的未来(和过去)寻找信息区分它们。 这在手写识别和许多其他序列到序列学习的任务中也是如此,将会在下一节中描述。

双向循环神经网络(或双向RNN)为满足这种需要而被发明{cite?}。 他们在需要双向信息的应用中非常成功{cite?},如手写识别{cite?},语音识别{cite?}以及生物信息学{cite?}。

[success]
优点:network在产生output时看过的input更广。

顾名思义,双向RNN结合时间上从序列起点开始移动的RNN和另一个时间上从序列末尾开始移动的RNN。 \fig?展示了典型的双向RNN,其中h(t)h^{(t)}代表通过时间向前移动的子RNN的状态,g(t)g^{(t)}代表通过时间向后移动的子RNN的状态。 这允许输出单元o(t)o^{(t)}能够计算同时依赖于过去和未来且对时刻tt周围的输入值最敏感的表示,而不必指定tt周围固定大小的窗口(这是前馈网络、卷积网络或具有固定大小的先行缓存器的常规RNN所必须要做的)。

[success]
书上画得太丑了,还是这个图画得比较清晰

Click to show

\begin{figure}[!htb] \ifOpenSource \centerline{\includegraphics{figure.pdf}} \else \centerline{\includegraphics{Chapter10/figures/bidirectional_rnn}} \fi \caption{典型的双向循环神经网络中的计算,意图学习将输入序列

这个想法可以自然地扩展到2维输入,如图像,由\emph{四个}RNN组成,每一个沿着四个方向中的一个计算:上、下、左、右。 如果RNN能够学习到承载长期信息,那在2维网格每个点(i,j)(i, j)的输出Oi,jO_{i,j}就能计算一个主要捕捉局部信息但同时又依赖于长期输入的表示。 相比卷积网络,应用于图像的RNN计算成本通常更高,但允许同一特征图的特征之间存在长期横向的相互作用{cite?}。

[warning] 允许同一特征图的特征之间存在长期横向的相互作用

实际上,对于这样的RNN,前向传播公式可以写成表示使用卷积的形式,计算自底向上到每一层的输入(在整合横向相互作用的特征图的循环传播之前)。

[warning] [?] 这一段看不懂

results matching ""

    No results matching ""