Transformer Q & A

警告
本文最后更新于 2023-08-26,文中内容可能已过时。

Transformer。有两方面的原因:

1.1 一方面,Transformer 是深度学习领域继 MLP、RNN、CNN 之后的第 4 大特征提取器 (也被称为基础模型)。
什么是特征提取器?
特征提取器是计算机模仿大脑,与外部世界 (图像、文字、语音等) 交互的方式,如图 1 所示。举例而言: Imagenet 数据集中包含 1000 类图像,人们已经根据自己的经验把这一百万张图像分好 1000 类,每一类图像 (如美洲豹) 都有独特的特征。这时,神经网络 (如 ResNet18) 也是想通过这种分类的方式,把每一类图像的特征尽可能提取或识别出来。分类不是最终目的,而是一种提取图像特征的手段,掩码补全图像也是一种提取特征的方式,图像块顺序打乱也是一种提取特征的方式。

/posts/transformerqanda/images/1.jpeg

1.2 另一方面,Transformer 在深度学习领域扮演的角色:第 3 次和第 4 次热潮的基石,如下图 2 所示。

/posts/transformerqanda/images/2.jpeg

2.1 在领域发展背景层面: 当时时处 2017 年,深度学习在计算机视觉领域已经火了几年。从 Alexnet、VGG、GoogleNet、ResNet、DenseNet; 从图像分类、目标检测再到语义分割;但在自然语言处理领域并没有引起很大反响。

2.2 技术背景层面: (1) 当时主流的序列转录任务 (如机器翻译) 的解决方案如下图 3 所示,在 Sequence to Sequence 架构下 (Encoder-Decoder 的一种),RNN 来提取特征,Attention 机制将 Encoder 提取到的特征高效传递给 Decoder。 (2) 这种做法有两个不足之处,一方面是在提取特征时的 RNN 天生从前向后时序传递的结构决定了其无法并行运算,其次是当序列长度过长时,最前面序列的信息有可能被遗忘掉。因此可以看到,在这个框架下,RNN 是相对薄弱急需改进的地方。

/posts/transformerqanda/images/3.jpeg

3.1 Transformer 是一种由 Encoder 和 Decoder 组成的架构。那么什么是架构呢?最简单的架构就是 A + B + C。

3.2 Transformer 也可以理解为一个函数,输入是 “我爱学习”,输出是 “I love study”。

3.3 如果把 Transformer 的架构进行分拆,如图 4 所示。

/posts/transformerqanda/images/4.jpeg

4.1 从功能角度,Transformer Encoder 的核心作用是提取特征,也有使用 Transformer Decoder 来提取特征。例如,一个人学习跳舞,Encoder 是看别人是如何跳舞的,Decoder 是将学习到的经验和记忆 (key 和 value 的匹配程度),展现出来

4.2 从结构角度,如图 5 所示,Transformer Encoder = Embedding + Positional Embedding + N * (子 Encoder block1 + 子 Encoder block2);

子 Encoder block1 = Multi head attention + ADD + Norm;

子 Encoder block2 = Feed Forward + ADD + Norm;

4.3 从输入输出角度,N 个 Transformer Encoder block 中的第一个 Encoder block 的输入为一组向量 X = (Embedding + Positional Embedding),向量维度通常为 512*512,其他 N 个 TransformerEncoder block 的输入为上一个 Transformer Encoder block 的输出,输出向量的维度也为 512*512(输入输出大小相同)。

4.4 为什么是 512*512前者是指 token 的个数,如 “我爱学习” 是 4 个 token,这里设置为 512 是为了囊括不同的序列长度,不够时 padding。后者是指每一个 token 生成的向量维度,也就是每一个 token 使用一个序列长度为 512 的向量表示。人们常说,Transformer 不能超过 512,否则硬件很难支撑;其实 512 是指前者,也就是 token 的个数,因为每一个 token 要做 self attention 操作;但是后者的 512 不宜过大,否则计算起来也很慢。

/posts/transformerqanda/images/5.jpeg

5.1 从功能角度,相比于 Transformer Encoder,Transformer Decoder 更擅长做生成式任务,尤其对于自然语言处理问题。

5.2 从结构角度,如图 6 所示,Transformer Decoder = Embedding + Positional Embedding + N*(子 Decoder block1 + 子 Decoder block2 + 子 Decoder block3)+ Linear + Softmax;

子 Decoder block1 = Mask Multi head attention + ADD + Norm;

子 Decoder block2 = Multi head attention + ADD + Norm;

子 Decoder block3 = Feed Forward + ADD + Norm;

/posts/transformerqanda/images/6.jpeg

5.3 从 (Embedding+Positional Embedding)(N 个 Decoder block)(Linear + softmax) 这三个每一个单独作用角度:

Embedding + Positional Embedding: 以机器翻译为例,输入 “Machine Learning”,输出 “机器学习”; 这里的 Embedding 是把 “机器学习” 也转化成向量的形式。

N 个 Decoder block: 特征处理和传递过程。

Linear + softmax: softmax 是预测下一个词出现的概率,如图 7 所示,前面的 Linear 层类似于分类网络 (ResNet18) 最后分类层前接的 MLP 层。

5.4 Transformer Decoder 的输入、输出是什么?在 Train 和 Test 时是不同的。

在 Train 阶段,如图 8 所示。这时是知道 label 的,decoder 的第一个输入是 begin 字符,输出第一个向量与 label 中第一个字符使用 cross entropy loss。Decoder 的第二个输入是第一个向量的 label,Decoder 的第 N 个输入对应的输出是 End 字符,到此结束。这里也可以看到,在 Train 阶段是可以进行并行训练的。

在 Test 阶段,下一个时刻的输入是前一个时刻的输出,如图 9 所示。因此,Train 和 Test 时候,Decoder 的输入会出现 Mismatch,在 Test 时候确实有可能会出现一步错,步步错的情况。有两种解决方案:一种是 train 时偶尔给一些错误,另一种是 Scheduled sampling。

5.5 Transformer Decoder block 内部的输入和输出是什么?

前面提到的是在整体 train 和 test 阶段,Decoder 的输入和输出,那么 Transformer Decoder 内部的 Transformer Decoder block,如图 10 所示,的输入输出又是什么呢?

对于 N=6 中的第 1 次循环 (N=1 时): 子 Decoder block1 的输入是 embedding +Positional Embedding,子 Decoder block2 的输入的 Q 来自子 Decoder block1 的输出,KV 来自 Transformer Encoder 最后一层的输出。

对于 N=6 的第 2 次循环:子 Decoder block1 的输入是 N=1 时,子 Decoder block3 的输出,KV 同样来自 Transformer Encoder 的最后一层的输出。

总的来说,可以看到,无论在 Train 还是 Test 时,Transformer Decoder 的输入不仅来自 (ground truth 或者上一个时刻 Decoder 的输出),还来自 Transformer Encoder 的最后一层。

训练时:第 i 个 decoder 的输入 = encoder 输出 + ground truth embedding。

预测时:第 i 个 decoder 的输入 = encoder 输出 + 第 (i-1) 个 decoder 输出.

6.1 作用上,Transformer Encoder 常用来提取特征,Transformer Decoder 常用于生成式任务。Transformer Encoder 和 Transformer Decoder 是两条不同的技术路线,Bert 采用的前者,GPT 系列模型采用的是后者

6.2 结构上,Transformer Decoder block 包括了 3 个子 Decoder block,而 Transformer Encoder block 包括 2 个子 Encoder block,且 Transformer Decoder 中使用了 Mask multi-head Attention。

6.3 从二者的输入输出角度,N 个 Transformer Encoder 运算完成之后,它的输出才正式输入进 Transformer Decoder,作为 QKV 中的 K 和 V,给 Transformer Decoder 使用。那么 TransformerEncoder 最后层的输出是如何送给 Decoder 呢?如图 11 所示。

那么,为什么 Encoder 和 Decoder 必须要用这种交互的方式呢?其实也并不一定,后续有不同交互方式的提出,如图 12。

7.1 Embedding 在 Transformer 架构中的位置如图 13 所示。

7.2 提出背景:计算机无法直接处理一个单词或者一个汉字,需要把一个 token 转化成计算机可以识别的向量,这也就是 embedding 过程。

7.3 实现方式:最简单的 embedding 操作就是 one hot vector,但 one hot vector 有一个弊端就是没有考虑词语前后之间的关系,后来也就产生了 WordEmbedding,如图 13。

Note
wordembedding 将单词 token 向量化,并且考虑的单词与单词之间的相关性。

8.1 Positional Embedding 在 Transformer 架构中的位置如图 14 所示。

8.2 提出背景: RNN 作为特征提取器,是自带词的前后顺序信息的;而 Attention 机制并没有考虑先后顺序信息,但前后顺序信息对语义影响很大,因此需要通过 Positional Embedding 这种方式把前后位置信息加在输入的 Embedding 上。

8.3 实现方式:传统位置编码和神经网络自动训练得到。

9.1 介绍 Transformer,为什么要介绍 Attention 呢?因为在 Transformer 中最多的 multi head attention 和 Mask multi head attention 来自 Scaled dot product attention,而 scaled dot product attention 来自 self attention,而 self attention 是 attention 的一种,因此首先需要了解 Attention,如图 15 所示。

9.2 Attention 到底是什么意思呢?

对于图像而言,attention 就是人们看到图像中的核心关注的区域,是图像中的重点,如图 16 所示。对于序列而言,Attention 机制本质上是为了找到输入中不同 token 之间的相互关系,通过权重矩阵来自发地找到词与词之间的关系。

9.3 Attention 是如何实现的呢?

是通过 QKV 实现的。

那么什么是 QKV 呢?Q 是 query,K 是 keys,V 是 values。如图 17 所示,举例而言,Q 是大脑发出的信号,我口渴了;K 是环境信息,眼睛看到的世界;V 是对环境中不同的物品赋予不同的比重,水的比重加大。

总之,Attention 就是通过计算 QK 的相似度,与 V 相乘得到注意力数值。

$$\text{Attention}(\mathrm{Query},\mathrm{Source})=\sum\text{Similarity}(\mathrm{Query},\mathrm{Key}\mathrm{i})*\mathrm{Value}\mathrm{i}$$

9.4 为什么必须要有 QKV 三者?

为什么不是只有 Q?因为 Q1 与 Q2 之间的关系权重,不止需要 a12,也需要 a21。你可能会问?我们让 a12=a21 不行吗?也可以尝试,但从原理上讲效果应该没有 a12 和 a21 效果好。

为什么不是只有 QK?求得的权重系数需要放到输入中,可以乘 Q,也可以乘 K,为什么要重新乘 V 呢?我觉得可能是多了一组可训练参数 WVW_V,使网络具有更强的学习能力。

10.1 介绍 Transformer,为什么要介绍 self Attention 呢?因为在 Transformer 中最多的 multi head attention 和 Mask multi head attention 来自 Scaled dot product attention,而 scaled dot product attention 来自 self attention,如图 15 所示。

10.2 什么是 Self Attention 呢?self attention 和 local attention、stride attention 都是 attention 的一种;self attention 是每一个 Q 与每一个 K 依次计算注意力系数,如图 18 所示,而像 local attention 是 Q 只与相邻的 K 计算注意力系数,stride attention 是 Q 通过跳连的方式与 K 计算注意力系数。

10.3 Self attention 为什么可以用于处理像机器翻译这种序列数据?

输入序列中的每一个位置的数据,可以关注其他位置的信息,由此通过 Attention score 来提取特征或者捕获输入序列每一个 token 之间的关系。

10.4 Self attention 是如何具体实现的?总共分为 4 步,如图 19 所示

11.1 self attention 最常见的有两种,一种是 dot product attention、另一种是 additive attention,如图 20 所示,前者的计算效率更高。

11.2 什么是 Scaled ?

scaled 的具体实现方式如图 21 所示,这一操作的目的是为了防止内积过大,从梯度角度考虑,避免靠近 1,易训练;与 batch normalization 有一些相似的功能。

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V

12.1 Multi head attention 在 Transformer 架构中的位置如图 15 所示。

12.2 提出背景: CNN 具有多个 channel,可以提取图像不同维度的特征信息,那么 Self attention 是否可以有类似操作,可以提取不同距离 token 的多个维度信息呢?

12.3 什么是 group 卷积?如图 22 所示,将输入的特征多个 channel 分成几个 group 单独做卷积,最后再进行 con c 操作。

12.4 Multi head attention 的实现方式?与 self attention 根本不同是什么?

如图 23 所示,以 2 个 head 的为例,将输入的 Q、K、V 分成两份,每一小份的 Q 与对应的 K、V 分别操作,最后计算得到的向量再进行 conc 操作,由此可以看出,Multi head attention 与 group 卷积有着相似的实现方式。

12.5 如何从输入输出的维度来理解 Multi head attention?如图 24 所示。

13.1 Mask Multi head attention 在 transformer 架构中的位置如图 15 所示。

13.2 为什么要有 Mask 这种操作?

Transformer 预测第 T 个时刻的输出,不能看到 T 时刻之后的那些输入,从而保证训练和预测一致。

通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息,如图 25 所示。

13.3 Mask 操作是如何具体实现的呢?

Q1 只跟 K1 计算,Q2 只跟 K1、K2 计算,而对于 K3、K4 等,在 softmax 之前给一个非常大的负数,由此经过 softmax 之后变为 0,其在矩阵上的计算原理实现如图 26 所示。

14.1 Add 就是残差连接,由 2015 年 ResNet 这篇文章发扬光大 (目前引用量已超过 16 万),与 Skip connection 的区别在于需要大小维度全部相同。

14.2 作为大道至简想法的极致,几乎每一个深度学习模型都会用到这个技术,可以防止网络退化,常用于解决多层网络难训练的问题。

15.1 Norm 就是 layer normalization。

15.2 核心作用:为了训练更加稳定,和 batch normalization 有相同的作用,都是为了使输入的样本均值为零,方差为 1。

15.3 为什么不使用 batch normalization,使用的是 layer normalization 呢?因为一个时序数据,句子输入长度有长有短,如果使用 batch normalization,则很容易造成因样本长短不一造成 “训练不稳定”。BN 是对同一个 batch 内的所有数据的同一个特征数据进行操作;而 LN 是对同一个样本进行操作。

  1. 什么是 FFN?

16.1 FFN 就是 feed forward networks。

16.2 为什么有了 Self attention 层,还要有 FFN?Attention 已经有了想要的序列信息特征,MLP 的作用是把信息投影到特定的空间里,再做一次非线性映射,和 Self attention 交替使用。

16.3 结构上:包括两层 MLP,第一层的维度为 $5122048,第二层的维度为,第二层的维度为 2048512$,且第二层 MLP 没有使用激活函数,如图 29 所示。

17.1 数据上,在 Transformer 论文中有提到,用到了 4.5M 和 36M 的翻译句子对。

17.2 硬件上,base 模型是 8 个 P100 GPU 训练了 12 个小时,大模型是训练了 3.5 天。

17.3 模型参数和调参层面:

第一,可训练的参数包括 WQW_QWKW_KWVW_VWOW_O,换包括 FFNFFN 层的参数。

第二,可调的参数包括:每一个 token 向量表示的维度 (d_model)、head 的头数、Encoder 和 Decoder 中 block 重复的次数 N、FFN 中间层向量的维度、Label smoothing (置信度 0.1) 和 dropout (0.1)。

18.1 虽然题目是 Attention is all you need,但后续一些研究表明,Attention、残差连接、layer normalization、FFN,这些因素共同成就了 Transformer。

18.2 Transformer 优点包括:

第一,提出深度学习继 MLP、CNN、RNN 后的第 4 大特征提取器。

第二,一开始用在机器翻译,随着 GPT 和 Bert 彻底出圈;是一个转折点,在这个点之后,NLP 领域快速发展,之后多模态、大模型、视觉 Transformer 等开始兴起。

第三,给人们信心,原来 CNN 和 RNN 之后,还可以有效果更好的特征提取器。

18.3 Transformer 的不足之处?

第一,计算量大,对硬件要求高。

第二,因为无归纳偏置,需要很多数据才可以取得很好的效果。

Ref:
[1]. https://mp.weixin.qq.com/s/sNyh3SzhIdsk8feYfQlTSA

Buy me a coffee~
支付宝
微信
0%