为什么我们在序列预测中同时需要编码器和解码器?

人工智能 机器学习 人工智能设计 序列建模 编码器-解码器
2021-11-02 20:38:29

为什么我们在序列预测中同时需要编码器和解码器?

给定输入,我们可以只有一个 RNNx, 输出一些值y(t)和隐藏状态h(t). 接下来,给定h(t)y(t),下一个输出y(t+1)和隐藏状态h(t+1)应该生产,等等。该架构应仅由一个网络而不是两个独立的网络组成。

1个回答

(老问题,我知道……)

并不是说我们需要序列到序列模型的编码器和解码器——这种“读取”和“生成”的解耦通常会更好地工作。

没有两个 RNN 的序列到序列示例

为了证明我的上述观点,这里有一个机器翻译的例子。当前的机器翻译系统是序列到序列的模型,几乎所有模型都具有编码器和解码器的二分结构。

Eager Translation这样的方法打破了这种隐含的约定。他们学习不使用单独的 RNN 进行编码和解码的翻译模型,但在每个时间步骤 1)读取源令牌和 2)生成目标令牌 - 使用单个 RNN。

为什么编码器-解码器经常工作得更好

具有编码器-解码器结构的序列到序列建模几乎总是意味着编码器和解码器之间的注意力。注意力在编码器和解码器之间传递信息,因为每次解码器必须生成目标序列中的下一项时,注意力网络都会计算所有编码器状态的动态、有用的“摘要”。

这个注意力摘要是不同的,并且会针对每个解码步骤重新计算。另一方面,源序列的编码只进行一次,然后所有编码器状态都保存在内存中。

通过注意力直接查看源序列(使用整个编码器状态序列作为代理)的能力使得编码器-解码器方法优于单个 RNN。

相比之下,单个 RNN 只能直接查看输入序列的一个元素。单个 RNN 的一些有趣场景:

  • 在每个时间步,读取一个源标记,然后写入一个目标标记:源序列中的先前元素仅以有损循环状态表示,而未来元素根本无法访问。
  • 首先读取所有源令牌,然后写入所有目标令牌。:整个源语句的含义必须被压缩成一个固定大小的循环状态向量。