问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Transformer模型详解:Decoder结构与原理

创作时间:
作者:
@小白创作中心

Transformer模型详解:Decoder结构与原理

引用
CSDN
1.
https://blog.csdn.net/liaomin416100569/article/details/138843009

Transformer模型是当前自然语言处理领域的核心技术之一,其解码器(Decoder)部分在序列生成任务中发挥着关键作用。本文将详细介绍Transformer模型中Decoder的结构和原理,帮助读者深入理解这一重要组件的工作机制。

简介

Transformer模型由编码器(Encoder)和解码器(Decoder)两部分组成。这里主要介绍解码器的结构以及在预训练、输入输出和预测时的输入输出。

解码器结构主要包括以下几个部分:

  1. 自注意力层(Self-Attention Layers):与编码器类似,解码器也包含多个自注意力层,用于在解码器端对输出序列的不同位置进行关注。解码器中的自注意力层被修改为接受一个遮盖(masking)向量,以便在计算注意力权重时将未来的信息屏蔽掉,只关注当前位置之前的信息。

  2. 编码器-解码器注意力层(Encoder-Decoder Attention Layers):除了自注意力层外,解码器还包含编码器-解码器注意力层,用于将编码器端的信息与解码器端的信息进行交互,帮助解码器更好地理解输入序列。

  3. 前馈神经网络(Feed-Forward Neural Networks):与编码器一样,解码器也包含前馈神经网络层,用于对特征进行映射和转换。

  4. 位置编码(Positional Encoding):解码器也需要位置编码来将位置信息融入模型中,以便模型能够理解输入序列的顺序信息。

Decoder在预训练、输入输出和预测时的输入输出:

  1. 预训练
  • 输入:在预训练期间,解码器的输入通常是由目标序列(target sequence)以及可选的编码器端输出的上下文信息组成。这些输入经过嵌入(embedding)和位置编码后,被送入解码器中。
  • 输出:解码器预训练的目标是生成目标序列的下一个词的概率分布。因此,在每个时间步,解码器会生成一个预测概率分布,以便训练模型。
  1. 输入输出
  • 输入:在进行输入输出(Inference)时,解码器的输入通常是由上一个时间步生成的词以及编码器端的上下文信息组成。这些输入通过嵌入和位置编码后,传递给解码器。
  • 输出:解码器在每个时间步生成的输出通常是一个概率分布,用于预测下一个词的概率。根据应用场景,可以使用不同的策略(如贪婪搜索、束搜索等)来选择最终的输出序列。
  1. 预测
  • 输入:在预测阶段,解码器的输入通常是由起始符号(如)以及编码器端的上下文信息组成。这些输入经过嵌入和位置编码后,传递给解码器。
  • 输出:解码器生成的输出是一个概率分布,用于预测下一个词的概率。根据应用需求,可以根据生成的概率分布采样得到最终的预测结果。

结构

上图红色部分为Transformer的Decoder block结构,与Encoder block相似,但是存在一些区别:

  • 包含两个Multi-Head Attention层。
  • 第一个Multi-Head Attention层采用了Masked操作。
  • 第二个Multi-Head Attention层的K, V矩阵使用Encoder的编码信息矩阵C进行计算,而Q使用上一个Decoder block的输出计算。
  • 最后有一个Softmax层计算下一个翻译单词的概率。

先理解:自注意力的计算过程

原理

第一个Multi-Head Attention

Decoder block的第一个Multi-Head Attention采用了Masked操作,因为在翻译的过程中是顺序翻译的,即翻译完第i个单词,才可以翻译第i+1个单词。通过Masked操作可以防止第i个单词知道i+1个单词之后的信息。下面以“我有一只猫”翻译成“I have a cat”为例,了解一下Masked操作。

下面的描述中使用了类似Teacher Forcing的概念,不熟悉Teacher Forcing的童鞋可以参考以下上一篇文章Seq2Seq模型详解。在Decoder的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入“”预测出第一个单词为“I”,然后根据输入“ I”预测下一个单词“have”。

Decoder可以在训练的过程中使用Teacher Forcing并且并行化训练,即将正确的单词序列(I have a cat)和对应输出(I have a cat)传递到Decoder。那么在预测第i个输出时,就要将第i+1之后的单词掩盖住,注意Mask操作是在Self-Attention的Softmax之前使用的,下面用0 1 2 3 4 5分别表示“ I have a cat”。

第一步:是Decoder的输入矩阵和Mask矩阵,输入矩阵包含“ I have a cat”(0, 1, 2, 3, 4)五个单词的表示向量,Mask是一个5×5的矩阵。在Mask可以发现单词0只能使用单词0的信息,而单词1可以使用单词0, 1的信息,即只能使用之前的信息。

第二步:接下来的操作和之前的Self-Attention一样,通过输入矩阵X计算得到Q,K,V矩阵。然后计算Q和KT的乘积QKT

第三步:在得到QKT之后需要进行Softmax,计算attention score,我们在Softmax之前需要使用Mask矩阵遮挡住每一个单词之后的信息,遮挡操作如下:

得到MaskQKT之后在MaskQKT上进行Softmax,每一行的和都为1。但是单词0在单词1, 2, 3, 4上的attention score都为0。

第四步:使用MaskQKT与矩阵V相乘,得到输出Z,则单词1的输出向量Z1是只包含单词1信息的。

第五步:通过上述步骤就可以得到一个Mask Self-Attention的输出矩阵Zi,然后和Encoder类似,通过Multi-Head Attention拼接多个输出Zi然后计算得到第一个Multi-Head Attention的输出Z,Z与输入X维度一样。

第二个Multi-Head Attention

Decoder block第二个Multi-Head Attention变化不大,主要的区别在于其中Self-Attention的K, V矩阵不是使用上一个Decoder block的输出计算的,而是使用Encoder的编码信息矩阵C计算的。

根据Encoder的输出C计算得到K, V,根据上一个Decoder block的输出Z计算Q(如果是第一个Decoder block则使用输入矩阵X进行计算),后续的计算方法与之前描述的一致。

这样做的好处是在Decoder的时候,每一位单词都可以利用到Encoder所有单词的信息(这些信息无需Mask)。

什么使用Encoder计算k,v decoder计算Q

在Transformer模型的解码器中,使用了编码器的键(key)和值(value),而使用解码器的查询(query)。这种结构是为了充分利用编码器端对输入序列的理解,同时使得解码器端能够更好地根据自身生成的部分序列来做出决策。这种设计的物理意义可以从以下几个方面来理解:

  1. 利用编码器的上下文信息:编码器对输入序列进行编码,生成了对输入序列全局理解的表示。因此,使用编码器的键和值可以提供丰富的上下文信息,帮助解码器更好地理解输入序列。

  2. 解码器的自注意力:解码器的自注意力机制中,查询用于计算注意力权重,而键和值则用于构建注意力分布。使用解码器的查询意味着模型在计算注意力时更关注当前正在生成的部分序列,这有助于确保生成的序列在语法和语义上的连贯性。

  3. 解耦编码器和解码器:使用不同的键、值和查询将编码器和解码器的功能分开,使得模型更具灵活性和泛化能力。解码器可以独立地根据当前正在生成的序列来调整自己的注意力,而不受编码器端信息的限制。

总之,通过在解码器中使用编码器的键和值,以及使用解码器的查询,Transformer模型能够更好地利用编码器端对输入序列的理解,并在解码器端根据当前正在生成的序列来做出决策,从而提高了生成序列的质量和连贯性。

Softmax预测输出单词

Decoder block最后的部分是利用Softmax预测下一个单词,在之前的网络层我们可以得到一个最终的输出Z,因为Mask的存在,使得单词0的输出Z0只包含单词0的信息,如下:

Softmax根据输出矩阵的每一行预测下一个单词:

这就是Decoder block的定义,与Encoder一样,Decoder是由多个Decoder block组合而成。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号