Bootstrap

【深度学习】NLP之Transformer (2) Decoder

主要围绕着decoder部分展开。吸收了网上博客的内容,进行了下自己的输出。。。

目录

1. Decoder的问题

2. 回顾 transformer​

3. mask

3.1. Padding Mask

3.2. Sequence mask

4. QA


1. Decoder的问题

传统seq2seq是按照时间顺序展开,所以decoder就是按照time,一步一步输入。

【深度学习】NLP之Transformer (1)  中介绍了,transformer是并行的,就是说这个句子,在一开始输入再经过encoder就能得到每个词的r1、r2 ... 了。

所以decoder这里又是如何进行的呢?

preview

如上图,decoder大概就是这样的。

下面详细分析一下,“这里的q=k=encoder输出,v=decoder上层输出” 这句话的含义。

带着一些问题继续学习。┏(^0^)┛

(1)在预测阶段,mask矩阵是如何掩盖未来信息的?

seq mask矩阵。

(2)decoder中mask后反向传播算法过程细节,如何保证training和inference的一致性?

(3)如果不一致(decoder不用mask)会怎么样?

信息穿越。

(4)在测试或者预测时,Transformer里decoder为什么还需要seq mask

在测试或者预测时,Transformer里decoder为什么还需要seq mask? - 知乎

(5)encoder-decoder multi-head attention K、Q、V的来源?Transformer原理详解 - 变成海的话的文章 - 知乎

encoder的输出会进入到decoder的Multi-Head Attention部分,作为k,q传入

(6)shifted right 是什么?

整体右移一位。Shifted Right:在输出前添加起始符,方便预测第一个Token

Shifted Right 实质上是给输出添加起始符/结束符,方便预测第一个Token/结束预测过程。

(7)decoder训练时,用的是ground-truth矩阵,这个矩阵从哪里来的?

2. 回顾 transformerpreview

preview

preview

preview

3. mask

论文原文中关于这一点的段落如下:

We also modify the self-attention sub-layer in the decoder stack to prevent from attending to subsequent positions. This masking, combined with the fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.

在推理阶段,token是按照从左往右的顺序推理的。也就是说,在推理timestep=T的token时,decoder只能“看到”timestep < T的 T-1 个Token, 不能和timestep大于它自身的token做attention(因为根本还不知道后面的token是什么)。为了保证训练时和推理时的一致性,所以,训练时要同样防止token与它之后的token去做attention。

Decoder是N=6层,每层包括3个sub-layers:

  •   第一个是Masked multi-head self-attention,也是计算输入的self-attention,但是因为是生成过程,因此在时刻 i 的时候,大于 i 的时刻都没有结果,只有小于 i 的时刻有结果,因此需要做Mask;
  •   第二个sub-layer是全连接网络,与Encoder相同;
  •   第三个sub-layer是对encoder的输入进行attention计算。

  同时Decoder中的self-attention层需要进行修改,因为只能获取到当前时刻之前的输入,因此只对时刻 t 之前的时刻输入进行attention计算,这也称为Mask操作。

mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。其中,padding mask 在所有的 scaled dot-product attention 里面都需要用到,而 sequence mask 只有在 decoder 的 self-attention 里面用到。

3.1. Padding Mask

什么是 padding mask 呢?因为每个批次输入序列长度是不一样的也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。

具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0!而我们的 padding mask 实际上是一个张量,每个值都是一个Boolean,值为 false 的地方就是我们要进行处理的地方。

3.2. Sequence mask

文章前面也提到,sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。

那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

对于 decoder 的 self-attention,里面使用到的 scaled dot-product attention,同时需要padding mask 和 sequence mask 作为 attn_mask,具体实现就是两个mask相加作为attn_mask。

其他情况,attn_mask 一律等于 padding mask。

4. QA

问题5的补充

完整的transformer,encoder和decoder都是有6层的,encoder的输出要分别传给6个decoder,用来做encoder-decoder multi-head attention。

注意:Decoder的训练和预测是不一样的。

特别好的解答,Transformer原理详解 - 知乎

CR7回复Tan wong

我最近在看transformer,也有一些个人的理解,不过不知道对不对,希望能够一起交流。

1、一个decoder module有6个decoder stack(论文的定义),然后每个decoder stack的输出会作为下一个decoder stack的输入,只有最后一次decoder stack输出连接了linear layer 和softmax。

2、每一个decoder stack的第一个multi-self attention都有mask,然后mask是在训练过程中才会有的,预测木有mask。

3、decoder的词嵌入矩阵是ground truth的词嵌入矩阵,也就是训练的时候会有这个词嵌入矩阵,因为是训练我们知道ground truth,因此不存在预测错误呀,模型会根据loss function修正权重。然后decoder训练的并行我认为是体现在这个词嵌入矩阵上,就有点像在encoder那样,用一个词嵌入矩阵拼接每个词嵌入向量,但是预测没有并行一说,比如我预测结果有n个单词,那么相当于decoder module 循环了n次,每次输出一个单词然后然后拼接成下一次decoder module的输入,所以就有time stamp的说法。

参考:

插图:The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

transformer结构回顾:Transformer原理详解 - 变成海的话的文章 - 知乎

transformer维度详解:哪位大神讲解一下Transformer的Decoder的输入输出都是什么?能解释一下每个部分都是什么

transformer大图结构注释:当我们说GPT2是基于Transformer Decoder的时候,我们在说什么? - Jotline的文章 - 知乎

mask:Transform详解(超详细) Attention is all you need论文 - 浪大大的文章 - 知乎

attention很详细,Decoder端的Mask:【经典精读】Transformer模型深度解读 - 潘小小的文章 - 知乎(太详细没看完)

深入理解transformer源码(太详细!!!源码还没看完)

关注的一些问题

在测试或者预测时,Transformer里decoder为什么还需要seq mask? - 王椗的回答 - 知乎

;