解码器在 seq2seq 学习中是如何调节的?

How is the decoder conditioned in seq2seq learning?

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

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

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

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

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

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

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

无论如何,形式主义是不变的;解码器始终以编码器输出为条件,因此您将始终最大化 p(yt | yt-1...y0, X) -- 区别在于您决定如何将输入上下文考虑到模型中。