返回介绍

10.4 基于编码-解码的序列到序列架构

发布于 2024-01-20 12:27:18 字数 2281 浏览 0 评论 0 收藏 0

我们已经在图10.5看到RNN如何将输入序列映射成固定大小的向量,在图10.9中看到RNN如何将固定大小的向量映射成一个序列,在图10.3、图10.4、图10.10和图10.11中看到RNN如何将一个输入序列映射到等长的输出序列。

本节我们讨论如何训练RNN,使其将输入序列映射到不一定等长的输出序列。这在许多场景中都有应用,如语音识别、机器翻译或问答,其中训练集的输入和输出序列的长度通常不相同(虽然它们的长度可能相关)。

我们经常将RNN的输入称为“上下文”。我们希望产生此上下文的表示C。这个上下文C可能是一个概括输入序列X=(x(1),…,)的向量或者向量序列。

用于映射可变长度序列到另一可变长度序列最简单的RNN架构最初由Cho et al.(2014a)提出,之后不久由Sutskever et al.(2014)独立开发,并且第一个使用这种方法获得翻译的最好结果。前一系统是对另一个机器翻译系统产生的建议进行评分,而后者使用独立的循环网络生成翻译。这些作者分别将该架构称为编码-解码或序列到序列架构,如图10.12所示。这个想法非常简单:(1)编码器(encoder)或读取器(reader)或输入(input)RNN处理输入序列。编码器输出上下文C(通常是最终隐藏状态的简单函数)。(2)解码器(decoder)或写入器(writer)或输出(output)RNN则以固定长度的向量(见图10.9)为条件产生输出序列。这种架构对比本章前几节提出的架构的创新之处在于长度nx和ny可以彼此不同,而之前的架构约束nx=ny=τ。在序列到序列的架构中,两个RNN共同训练以最大化(关于训练集中所有xy对的平均)。编码器RNN的最后一个状态通常被当作输入的表示C并作为解码器RNN的输入。

图10.12 在给定输入序列的情况下学习生成输出序列的编码器-解码器或序列到序列的RNN架构的示例。它由读取输入序列的编码器RNN以及生成输出序列(或计算给定输出序列的概率)的解码器RNN组成。编码器RNN的最终隐藏状态用于计算一般为固定大小的上下文变量C,C表示输入序列的语义概要并且作为解码器RNN的输入

如果上下文C是一个向量,则编码器RNN只是在第10.2.4节描述的向量到序列RNN。正如我们所见,向量到序列RNN至少有两种接受输入的方法。输入可以被提供为RNN的初始状态,或连接到每个时间步中的隐藏单元。这两种方式也可以结合。

这里并不强制要求编码器与解码器的隐藏层具有相同的大小。

此架构的一个明显不足是,编码器RNN输出的上下文C的维度太小而难以适当地概括一个长序列。这种现象由Bahdanau et al.(2015)在机器翻译中观察到。他们提出让C成为可变长度的序列,而不是一个固定大小的向量。此外,他们还引入了将序列C的元素和输出序列的元素相关联的注意力机制(attention mechanism)。读者可在第12.4.5.1节了解更多细节。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文