0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于 RNN 的解码器架构如何建模

深度学习自然语言处理 来源:深度学习自然语言处理 2023-06-12 17:08 次阅读

Vaswani 等人在其名作 Attention is all you need 中首创了基于 transformer的编码器-解码器模型,如今已成为自然语言处理 (natural language processing,NLP) 领域编码器-解码器架构的事实标准。

最近基于 transformer 的编码器-解码器模型训练这一方向涌现出了大量关于预训练目标函数的研究,例如T5、Bart、Pegasus、ProphetNet、Marge 等,但它们所使用的网络结构并没有改变。

本文的目的是详细解释如何用基于 transformer 的编码器-解码器架构来对序列到序列 (sequence-to-sequence)问题进行建模。我们将重点关注有关这一架构的数学知识以及如何对该架构的模型进行推理。在此过程中,我们还将介绍 NLP 中序列到序列模型的一些背景知识,并将基于 transformer的编码器-解码器架构分解为编码器解码器这两个部分分别讨论。我们提供了许多图例,并把基于 transformer的编码器-解码器模型的理论与其在 transformers 推理场景中的实际应用二者联系起来。请注意,这篇博文不解释如何训练这些模型 —— 我们会在后续博文中涵盖这一方面的内容。

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

截至本文撰写时, transformers 库已经支持的编码器-解码器模型有:T5、Bart、MarianMT以及Pegasus,你可以从 这儿 获取相关信息

本文分 4 个部分:

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

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

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

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

每个部分都建立在前一部分的基础上,但也可以单独阅读。

背景

自然语言生成 (natural language generation,NLG) 是 NLP 的一个子领域,其任务一般可被建模为序列到序列问题。这类任务可以定义为寻找一个模型,该模型将输入词序列映射为目标词序列,典型的例子有摘要和翻译。在下文中,我们假设每个单词都被编码为一个向量表征。因此,个输入词可以表示为个输入向量组成的序列:

因此,序列到序列问题可以表示为找到一个映射,其输入为个向量的序列,输出为个向量的目标序列。这里,目标向量数是先验未知的,其值取决于输入序列:

Sutskever 等 (2014) 的工作指出,深度神经网络 (deep neural networks,DNN)“尽管灵活且强大,但只能用于拟合输入和输出维度均固定的映射。”

因此,要用使用 DNN 模型解决序列到序列问题就意味着目标向量数必须是先验已知的,且必须独立于输入。这样设定肯定不是最优的。因为对 NLG 任务而言,目标词的数量通常取决于输入内容,而不仅仅是输入长度。例如,一篇 1000 字的文章,根据内容的不同,有可能可以概括为 200 字,也有可能可以概括为 100 字。

2014 年,Cho 等人 和 Sutskever 等人 提出使用完全基于递归神经网络 (recurrent neural networks,RNN) 的编码器-解码器模型来解决序列到序列任务。与 DNN 相比,RNN 支持输出可变数量的目标向量。下面,我们深入了解一下基于 RNN 的编码器-解码器模型的功能。

在推理过程中,RNN 编码器通过连续更新其隐含状态对输入序列进行编码。我们定义处理完最后一个输入向量后的编码器隐含状态为。因此,编码器主要完成如下映射:

然后,我们用来初始化解码器的隐含状态,再用解码器 RNN 自回归地生成目标序列。

下面,我们进一步解释一下。从数学角度讲,解码器定义了给定隐含状态下目标序列的概率分布:

根据贝叶斯法则,上述分布可以分解为每个目标向量的条件分布的积,如下所示:

因此,如果模型架构可以在给定所有前驱目标向量的条件下对下一个目标向量的条件分布进行建模的话:

那它就可以通过简单地将所有条件概率相乘来模拟给定隐藏状态下任意目标向量序列的分布。

那么基于 RNN 的解码器架构如何建模

呢?

从计算角度讲,模型按序将前一时刻的内部隐含状态和前一时刻的目标向量映射到当前内部隐含状态和一个logit 向量(下图中以深红色表示):

此处,为 RNN 编码器的输出。随后,对 logit 向量进行softmax操作,将其变换为下一个目标向量的条件概率分布:

更多有关 logit 向量及其生成的概率分布的详细信息,请参阅脚注。从上式可以看出,目标向量的分布是其前一时刻的目标向量及前一时刻的隐含状态的条件分布。而我们知道前一时刻的隐含状态依赖于之前所有的目标向量,因此我们可以说 RNN 解码器隐式(或间接) 地建模了条件分布。

目标向量序列的概率空间非常大,因此在推理时,必须借助解码方法对 =对 进行采样才能高效地生成最终的目标向量序列。

给定某解码方法,在推理时,我们首先从分布中采样出下一个输出向量; 接着,将其添加至解码器输入序列末尾,让解码器 RNN 继续从中采样出下一个输出向量,如此往复,整个模型就以自回归的方式生成了最终的输出序列。

基于 RNN 的编码器-解码器模型的一个重要特征是需要定义一些特殊向量,如(终止符) 和 (起始符) 向量。向量通常意味着中止,出现这个即“提示”编码器输入序列已结束; 如果它出现在目标序列中意味着输出结束,一旦从 logit 向量中采样到,生成就完成了。向量用于表示在第一步解码时馈送到解码器 RNN 的输入向量。为了输出第一个 logit,需要一个输入,而由于在其之前还没有生成任何输入,所以我们馈送了一个特殊的输入向量到解码器 RNN。好,有点绕了!我们用一个例子说明一下。

89fd6f2c-0605-11ee-962d-dac502259ad0.png

上图中,我们将编码器 RNN 编码器展开,并用绿色表示; 同时,将解码器 RNN 展开,并用红色表示。

英文句子I want to buy a car,表示为,,,,,,)。将其翻译成德语: “Ich will ein Auto kaufen",表示为,,,,,,)。首先,编码器 RNN 处理输入向量并更新其隐含状态。请注意,对编码器而言,因为我们只对其最终隐含状态感兴趣,所以我们可以忽略它的目标向量。然后,编码器 RNN 以相同的方式依次处理输入句子的其余部分:、、、、、,并且每一步都更新其隐含状态,直到遇到向量。在上图中,连接展开的编码器 RNN 的水平箭头表示按序更新隐含状态。编码器 RNN 的最终隐含状态,由表示,其完全定义了输入序列的编码,并可用作解码器 RNN 的初始隐含状态。可以认为,解码器 RNN 以编码器 RNN 的最终隐含状态为条件。

为了生成第一个目标向量,将向量输入给解码器,即上图中的。然后通过语言模型头 (LM Head)前馈层将 RNN 的目标向量进一步映射到 logit 向量,此时,可得第一个目标向量的条件分布:

最终采样出第一个目标词(如图中连接和 的灰色箭头所示)。接着,继续采样出第二个目标向量:

依此类推,一直到第 6 步,此时从中采样出,解码完成。输出目标序列为, 即上文中的 “Ich will ein Auto kaufen”。

综上所述,我们通过将分布分解为和 的表示来建模基于 RNN 的 encoder-decoder 模型:

在推理过程中,利用高效的解码方法可以自回归地生成目标序列。

基于 RNN 的编码器-解码器模型席卷了 NLG 社区。2016 年,谷歌宣布用基于 RNN 的编码器-解码器单一模型完全取代其原先使用的的含有大量特征工程的翻译服务 (参见此处)。

然而,基于 RNN 的编码器-解码器模型存在两个主要缺陷。首先,RNN 存在梯度消失问题,因此很难捕获长程依赖性,参见Hochreiter 等 (2001) 的工作。其次,RNN 固有的循环架构使得在编码时无法进行有效的并行化,参见Vaswani 等 (2017) 的工作。

论文的原话是“尽管 DNN 具有灵活性和强大的功能,但它们只能应用于输入和目标可以用固定维度的向量进行合理编码的问题”,用在本文时稍作调整。

这同样适用于卷积神经网络 (CNN)。虽然可以将可变长度的输入序列输入 CNN,但目标的维度要么取决于输入维数要么需要固定为特定值。

在第一步时,隐含状态被初始化为零向量,并与第一个输入向量一起馈送给 RNN。

神经网络可以将所有单词的概率分布定义为。首先,其将输入转换为嵌入向量,该向量对应于 RNN 模型的目标向量。随后将送给“语言模型头”,即将其乘以词嵌入矩阵(即),得到和词表中的每个向量的相似度得分,生成的向量称为 logit 向量,最后再通过 softmax 操作归一化成所有单词的概率分布:。

波束搜索 (beam search) 是其中一种解码方法。本文不会对不同的解码方法进行介绍,如对此感兴趣,建议读者参考 此文。

Sutskever 等 (2014) 的工作对输入顺序进行了逆序,对上面的例子而言,输入向量变成了 (,,,,,,)。其动机是让对应词对之间的连接更短,如可以使得和 之间的连接更短。该研究小组强调,将输入序列进行逆序是他们的模型在机器翻译上的性能提高的一个关键原因。

责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 解码器
    +关注

    关注

    9

    文章

    1073

    浏览量

    40158
  • 建模
    +关注

    关注

    1

    文章

    280

    浏览量

    60500
  • rnn
    rnn
    +关注

    关注

    0

    文章

    67

    浏览量

    6803

原文标题:背景 | 基于 Transformers 的编码器-解码器模型

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #硬声创作季 带你重新认识一下DC300音频解码器。 #发烧音响 #DAC解码器  #BRZHIFI 

    解码器音响音频解码器
    深海狂鲨
    发布于 :2022年11月22日 02:06:06

    AVS解码器

    各位游客,我上传的RM52J版本的AVS解码器,是AVS-P2标准的最后版本。
    发表于 03-30 21:43

    红外解码器

    红外解码器
    发表于 12-08 20:35

    具有外部穿孔的Viterbi解码器如何解码呢?

    根据维特比解码器数据表,硬编码不能进行擦除(外部穿孔)(即仅对软编码有效)。如果我有硬输入,我将如何解码呢?我已经在解码器之前解析了我的数据。我现在需要知道的是,如果我有一个硬输入,我将如何使我
    发表于 03-14 10:19

    解码器的工作原理是什么?

    解码器是用于对数字媒体文件(如歌曲或视频)进行压缩或解压缩的软件。Windows Media Player 和其他程序使用编解码器来播放并创建数字媒体文件。
    发表于 04-06 09:00

    怎么理解真正的编码解码器

      在进入关于编码解码器的现实之前,让我们对复用进行简要的思考。通常我们会在需要将一些输入信号一次一个地加载到一个单独负载的应用程序中。选择输入信号中的一个输入信号的过程称为多路复用。这种操作
    发表于 09-01 17:48

    解码器常见故障及解决方法

      一、为什么解码器码转灯不闪?  现象:软件设置(灯不闪,主要是码转换未进行工作,先从软件设置着手解决这个问题)  解决方案:1、软件中的解码器设置(解码器协议、com口、波特率、
    发表于 12-11 14:12

    如何去制作红外遥控解码器

    红外遥控解码器的电路原理是什么?如何去制作红外遥控解码器?其步骤流程是怎样的?
    发表于 04-19 07:00

    请问如何控制解码器解码的速度呢

    请问如何控制解码解码的速度,我发现在解码过程中添加延时会导致解码器错误线程A 往mpp解码器送数据 调用函数decode_put_packe
    发表于 09-15 16:05

    DTMF解码器原理是什么?

    DTMF 解码器原理
    发表于 10-27 08:29

    PyTorch教程10.6之编码器-解码器架构

    电子发烧友网站提供《PyTorch教程10.6之编码器-解码器架构.pdf》资料免费下载
    发表于 06-05 18:12 0次下载
    PyTorch教程10.6之编码器-<b class='flag-5'>解码器</b><b class='flag-5'>架构</b>

    PyTorch教程-10.6. 编码器-解码器架构

    10.6. 编码器-解码器架构¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的头像 发表于 06-05 15:44 575次阅读
    PyTorch教程-10.6. 编码器-<b class='flag-5'>解码器</b><b class='flag-5'>架构</b>

    基于transformer的编码器-解码器模型的工作原理

    与基于 RNN 的编码器-解码器模型类似,基于 transformer 的编码器-解码器模型由一个编码器和一个解码器组成,且其编码器和解码器
    发表于 06-11 14:17 1313次阅读
    基于transformer的编码器-<b class='flag-5'>解码器</b>模型的工作原理

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

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读
    的头像 发表于 06-16 16:53 508次阅读
    基于 Transformers 的编码器-<b class='flag-5'>解码器</b>模型

    神经编码器-解码器模型的历史

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读
    的头像 发表于 06-20 15:42 472次阅读
    神经编码器-<b class='flag-5'>解码器</b>模型的历史