新闻  |   论坛  |   博客  |   在线研讨会
Transformer的细节到底是怎么样的?Transformer 18问!(1)
数据派THU | 2023-07-19 19:31:50    阅读:279   发布文章

来源丨知乎

作者丨爱问问题的王宸@知乎

为什么想通过十八个问题的方式总结Transformer?

有两点原因:

第一,Transformer是既MLP、RNN、CNN之后的第四大特征提取器,也被称为第四大基础模型;最近爆火的chatGPT,其最底层原理也是Transformer,Transformer的重要性可见一斑。

第二,希望通过问问题这种方式,更好的帮助大家理解Transformer的内容和原理。

1.2017年深度学习领域的重大突破是什么?

Transformer。有两方面的原因:

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

图片图1 神经网络为了模仿大脑中的神经元
1.2 另一方面,Transformer在深度学习领域扮演的角色:第3次和第4次热潮的基石,如下图2所示。
图片图2 深度学习发展的4个阶段
2. Transformer的提出背景是什么?


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

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

图片图3 序列转录任务的主流解决方案
3. Transformer到底是什么?

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

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

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

图片图4 Transformer的架构图
4. 什么是Transformer Encoder?


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

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不宜过大,否则计算起来也很慢。

图片图5 Transformer Encoder的架构图
5. 什么是Transformer Decoder?

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;
图片图6 Transformer Decoder的架构图

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层。

图片图7 Transformer Decoder 中softmax的作用
5.4 Transformer Decoder的输入、输出是什么?在Train和Test时是不同的。在Train阶段,如图8所示。这时是知道label的,decoder的第一个输入是begin字符,输出第一个向量与label中第一个字符使用cross entropy loss。Decoder的第二个输入是第一个向量的label,Decoder的第N个输入对应的输出是End字符,到此结束。这里也可以看到,在Train阶段是可以进行并行训练的。
图片图8 Transformer Decoder在训练阶段的输入和输出
在Test阶段,下一个时刻的输入时是前一个时刻的输出,如图9所示。因此,Train和Test时候,Decoder的输入会出现Mismatch,在Test时候确实有可能会出现一步错,步步错的情况。有两种解决方案:一种是train时偶尔给一些错误,另一种是Scheduled sampling。
图片图9 Transformer Decoder在Test阶段的输入和输出
5.5 Transformer Decoder block内部的输出和输出是什么?
前面提到的是在整体train和test阶段,Decoder的输出和输出,那么Transformer Decoder内部的Transformer Decoder block,如图10所示,的输入输出又是什么呢?
图片图10 Transformer Decoder block的架构图

对于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输出.


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客