为什么我们在序列预测中同时需要编码器和解码器?
给定输入,我们可以只有一个 RNN, 输出一些值和隐藏状态. 接下来,给定和,下一个输出和隐藏状态应该生产,等等。该架构应仅由一个网络而不是两个独立的网络组成。
为什么我们在序列预测中同时需要编码器和解码器?
给定输入,我们可以只有一个 RNN, 输出一些值和隐藏状态. 接下来,给定和,下一个输出和隐藏状态应该生产,等等。该架构应仅由一个网络而不是两个独立的网络组成。
(老问题,我知道……)
并不是说我们需要序列到序列模型的编码器和解码器——这种“读取”和“生成”的解耦通常会更好地工作。
没有两个 RNN 的序列到序列示例
为了证明我的上述观点,这里有一个机器翻译的例子。当前的机器翻译系统是序列到序列的模型,几乎所有模型都具有编码器和解码器的二分结构。
像Eager Translation这样的方法打破了这种隐含的约定。他们学习不使用单独的 RNN 进行编码和解码的翻译模型,但在每个时间步骤 1)读取源令牌和 2)生成目标令牌 - 使用单个 RNN。
为什么编码器-解码器经常工作得更好
具有编码器-解码器结构的序列到序列建模几乎总是意味着编码器和解码器之间的注意力。注意力在编码器和解码器之间传递信息,因为每次解码器必须生成目标序列中的下一项时,注意力网络都会计算所有编码器状态的动态、有用的“摘要”。
这个注意力摘要是不同的,并且会针对每个解码步骤重新计算。另一方面,源序列的编码只进行一次,然后所有编码器状态都保存在内存中。
通过注意力直接查看源序列(使用整个编码器状态序列作为代理)的能力使得编码器-解码器方法优于单个 RNN。
相比之下,单个 RNN 只能直接查看输入序列的一个元素。单个 RNN 的一些有趣场景: