2

我正在尝试使用 RNN 理解序列到序列的学习。到目前为止我所理解的是,编码器的输出用于调节解码器。

然而,我有两个来源,在我看来,它们以不同的方式进行调节,我想知道哪种方式是有效的(可能两者都是)或者我是否错过了什么。

资料来源:Yoav Goldberg 的自然语言处理神经网络方法

据我了解作者,解码器在每一步都使用状态向量和解码器输出以及序列的下一部分进行操作。因此,解码器的状态向量与编码器的结果分离。

在此处输入图像描述

资料来源:Francois Chollet 十分钟介绍 Keras 中的序列到序列学习

据我了解作者和来源,解码器提供编码器状态作为初始状态。因此,解码器的状态向量就是解码器的输出。解码器步骤仅取决于通过状态向量的编码器输出。

在此处输入图像描述

4

1 回答 1

2

有很多方法可以将编码器输出馈送到解码器;要么连续将其输入解码器,要么允许它实例化解码器隐藏状态(直接或在浅层变换之后),甚至在将解码器输出与编码器输出连接起来,然后将它们中的两个传递到最终输出预测(见 Cho et.al '14)。通常,您输入解码器的每个额外向量都会以相当不利的方式扩展其计算复杂性;例如,如果您决定在每一步将编码器输出 E 作为输入,您将输入空间从“X”增加到“X+E”,这意味着参数空间增加了 E*H(在简单的 RNN 情况下) ,即不考虑门控),其中 H 是您的隐藏大小。这确实增加了网络的容量,但也增加了过度拟合的趋势,

无论如何,形式主义保持不变;解码器始终以编码器输出为条件,因此您将始终最大化 p(y t | y t-1 ...y 0 , X) - 不同之处在于您决定如何将输入上下文纳入模型.

于 2018-12-05T10:28:07.787 回答