初学Transformer

1. transformer在做一个什么事情?

transformer安装使用GPU_transformer

2. transformer简单理解

多个encoder和decoder的组合,每个encoder结构相同,每个decoder结构相同。这里注意,每个encoder和decoder在训练中都会改变自己的参数,也就是说,每个encoder或者decoder经过训练之后,参数都不相同。

transformer安装使用GPU_python_02

3. 具体的encoder和decoder是什么结构?

原论文结构图示,decoder比encoder多一层被掩盖的多头注意力机制。

transformer安装使用GPU_python_03

4. encoder详细介绍:输入部分、注意力机制、前馈神经网络

transformer安装使用GPU_神经网络_04

4.1 输入部分——embedding、位置嵌入

embedding是要把输入的内容转化成特定长度的向量。为什么要添加位置编码,或者添加位置编码有什么用?是因为绝对的位置编码中蕴含着相对位置的信息(但是这种相对位置信息在注意力机制那里会消失)。下图是输入部分干的事情:

transformer安装使用GPU_神经网络_05

4.2 注意力机制——transformer中最核心的操作
a. 基本的注意力机制

Q与K相乘,之后进行一个softmax归一化(这一步得到了一个权重向量),然后与V相乘,结果就是注意力的值。具体流程可以用下图例子展示。

transformer安装使用GPU_transformer_06


transformer安装使用GPU_神经网络_07

b. 在TRM中怎么操作

实际代码中使用矩阵,方便并行。下图的x,一行代表一个原始单词,两行代表输入有两个单词。并行处理先算出Q、K、V。然后计算attention向量。(几行原始输入向量对应几行attention输出)

transformer安装使用GPU_计算机视觉_08


上图展示的是输入内容经过了一套W(Q、K、V)参数,但是实际中可以使用多套参数,这样就产生了多头注意力机制。引入多头的目的:多头相当于把原始信息打到不同的空间,保证transformer可以注意到不同子空间的信息,捕捉到更多的特征信息。多个头就要有多个输出,需要合在一起输出。

transformer安装使用GPU_python_09


transformer安装使用GPU_python_10

4.3 前馈神经网络

此部分需要理解:残差和LayNorm,残差的引入是为了缓解梯度的消失。

经典面试问题:为什么用LN,不用BN呢?

答:BN在NLP问题中效果很差,所以不用。

BN优点:可解决内部协变量偏移;缓解了梯度饱和问题。

BN缺点:当batchSize较小时,效果差;在RNN中效果差。

前馈神经网络就是下图的上半部分,输出的Z1、Z2通过Feed Forword(两层全连接层),再添加一个残差和LN。

transformer安装使用GPU_计算机视觉_11

5. decoder详细介绍

decoder中间是交互层,典型的多头注意力机制

transformer安装使用GPU_神经网络_12


具体操作就是所有encoder串联,输出的结果与每个decoder交互。encoders生成的是K、V矩阵,decoder生成的是Q矩阵。具体流程如图:

transformer安装使用GPU_神经网络_13


transformer安装使用GPU_transformer安装使用GPU_14

为什么需要mask?

下面是输入,上面是输出。在预测you的时候,系统并看不到you和now,所以训练的时候需要遮住you和now。

transformer安装使用GPU_python_15