当前位置:   article > 正文

编码器-解码器 | 基于 Transformers 的编码器-解码器模型

transformer 解码

来自:Hugging Face

进NLP群—>加入NLP交流群

基于 transformer 的编码器-解码器模型是 表征学习模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外,建议读者对 自注意力 (self-attention) 架构 有一个基本了解,可以阅读 Jay Alammar 的 这篇博文 复习一下原始 transformer 模型。

本文分 4 个部分:

  • 背景 - 简要回顾了神经编码器-解码器模型的历史,重点关注基于 RNN 的模型。

  • 编码器-解码器 - 阐述基于 transformer 的编码器-解码器模型,并阐述如何使用该模型进行推理。

  • 编码器 - 阐述模型的编码器部分。

  • 解码器 - 阐述模型的解码器部分。

每个部分都建立在前一部分的基础上,但也可以单独阅读。这篇分享是第二部分 编码器-解码器。如果你还没有看过 第一部分 背景,可以先读一读。

编码器-解码器

2017 年,Vaswani 等人引入了 transformer 架构,从而催生了 基于 transformer 的编码器-解码器模型。

与基于 RNN 的编码器-解码器模型类似,基于 transformer 的编码器-解码器模型由一个编码器和一个解码器组成,且其编码器和解码器均由 残差注意力模块 (residual attention blocks) 堆叠而成。基于 transformer 的编码器-解码器模型的关键创新在于: 残差注意力模块无需使用循环结构即可处理长度 可变的输入序列 。不依赖循环结构使得基于 transformer 的编码器-解码器可以高度并行化,这使得模型在现代硬件上的计算效率比基于 RNN 的编码器-解码器模型高出几个数量级。

回忆一下,要解决 序列到序列 问题,我们需要找到输入序列 到变长输出序列 的映射。我们看看如何使用基于 transformer 的编码器-解码器模型来找到这样的映射。

与基于 RNN 的编码器-解码器模型类似,基于 transformer 的编码器-解码器模型定义了在给定输入序列 条件下目标序列 的条件分布:

基于 transformer 的编码器部分将输入序列 编码为 隐含状态序列 ,即:

然后,基于 transformer 的解码器负责建模在给定隐含状态序列 的条件下目标向量序列 的概率分布:

根据贝叶斯法则,该序列分布可被分解为每个目标向量 在给定隐含状态 和其所有前驱目标向量 时的条件概率之积:

因此,在生成 时,基于 transformer 的解码器将隐含状态序列 及其所有前驱目标向量 映射到 logit 向量 。然后经由 softmax 运算对 logit 向量 进行处理,从而生成条件分布 。这个流程跟基于 RNN 的解码器是一样的。然而,与基于 RNN 的解码器不同的是,在这里,目标向量 的分布是 显式 (或直接) 地以其所有前驱目标向量 为条件的,稍后我们将详细介绍。此处第 0 个目标向量 仍表示为 向量。有了条件分布 ,我们就可以  自回归 生成输出了。至此,我们定义了可用于推理的从输入序列 到输出序列 的映射。

我们可视化一下使用 基于 transformer 的编码器-解码器模型 _自回归_地生成序列的完整过程。

1e5f60efdab8ab07aa1c4f6546fd12da.png

上图中,绿色为基于 transformer 的编码器,红色为基于 transformer 的解码器。与上一节一样,我们展示了如何将表示为 ,,,,,, 的英语句子 “I want to buy a car” 翻译成表示为 ,,,,,, 的德语句子 “Ich will ein Auto kaufen”。

首先,编码器将完整的输入序列 = “I want to buy a car” (由浅绿色向量表示) 处理为上下文相关的编码序列 。这里上下文相关的意思是, 举个例子 , 的编码不仅取决于输入 = “buy”,还与所有其他词 “I”、“want”、“to”、“a”、“car” 及 “EOS” 相关,这些词即该词的 上下文

接下来,输入编码 与 BOS 向量 ( ) 被一起馈送到解码器。解码器将输入 和   变换为第一个 logit (图中以深红色显示),从而得到第一个目标向量 的条件分布:

然后,从该分布中采样出第一个目标向量 = (由灰色箭头表示),得到第一个输出后,我们会并将其继续馈送到解码器。现在,解码器开始以 = “BOS” 和   = “Ich” 为条件来定义第二个目标向量的条件分布 :

再采样一次,生成目标向量 = “will”。重复该自回归过程,直到第 6 步从条件分布中采样到 EOS:

这里有一点比较重要,我们仅在第一次前向传播时用编码器将 映射到 。从第二次前向传播开始,解码器可以直接使用之前算得的编码 。为清楚起见,下图画出了上例中第一次和第二次前向传播所需要做的操作。

491d1ea7ddad2439d7c7d0eb14c4eb93.png

可以看出,仅在步骤 时,我们才需要将 “I want to buy a car EOS” 编码为 。从 开始,解码器只是简单地复用了已生成的编码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/873614
推荐阅读
相关标签