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

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

3. 具体的encoder和decoder是什么结构?
原论文结构图示,decoder比encoder多一层被掩盖的多头注意力机制。

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

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

4.2 注意力机制——transformer中最核心的操作
a. 基本的注意力机制
Q与K相乘,之后进行一个softmax归一化(这一步得到了一个权重向量),然后与V相乘,结果就是注意力的值。具体流程可以用下图例子展示。


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

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


4.3 前馈神经网络
此部分需要理解:残差和LayNorm,残差的引入是为了缓解梯度的消失。
经典面试问题:为什么用LN,不用BN呢?
答:BN在NLP问题中效果很差,所以不用。
BN优点:可解决内部协变量偏移;缓解了梯度饱和问题。
BN缺点:当batchSize较小时,效果差;在RNN中效果差。
前馈神经网络就是下图的上半部分,输出的Z1、Z2通过Feed Forword(两层全连接层),再添加一个残差和LN。

5. decoder详细介绍
decoder中间是交互层,典型的多头注意力机制

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


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

















