一、
Transformer的内部结构图如下:
左侧为编码块(Encoder block),右侧为解码块(Decoder block)。红框中的部分为多头注意力模块(Multi-Head Attention),是由多个自注意力(Self-Attention)组成的,可以看到Encoder block包含一个Multi-Head Attention,而 Decoder block包含两个Multi-Head Attention。Multi-Head Attention上方还包括一个Add&Norm层,Add表示残差连接(Residual Connection)用于防止网络退化,Norm表示Layer Normalization,用于对每一层的激活值进行归一化。
自注意力是组成多注意力机制的基本单元。
在整个注意力过程中,模型学习了三个权重:查询(query)、键(key)和值(value)。
类比到数据库中需要查询一本书,键即为书名,值为要查询的书。需要计算query和图书馆里所有作者名字(key)的相似度,返回相似度最高。也就是需要计算查询和键的相似度,然后返回对应的书(value)。
二、
对于输入单词,会首先经过embedding将单词编码成词向量X,对于每个词向量Xi,再计算该词向量对应的Q,K,V,它们都具有与输入embedding相同的维数模型在训练中学习它们的值。
从每个单词中创建一个512维的向量。对于每个embedding,都将其与Q,K,V矩阵分别相乘(大小为512*512),每个embedding都将有3个长度为512的中间向量。
接下来计算查询(value)与键(key)之间的点积(score)。这个计算得到的点积代表的是在某个位置编码单词时,对输入句子的其它部分的关注程度。
然后将点积除以key向量维数的平方根。因为当向量维数过大或者过小时,点积同样可能出现过大或者过小的情况,这会导致训练期间的数值不太稳定。选择比例因子是为让点积的方差近似等于1。
然后再通过softmax操作将分数标准化,使分数都为正且加起来等于1。softmax输出决定了每个单词的权重,也就是从不同的单词中获取多少信息或特征。
最后一步就是计算softmax与这些值的乘积并相加,得到最终的输出矩阵Z。
三、计算tricks
查询键和矩阵的计算方法等:
score和注意力输出:
公式:
四、多头注意力
在二的结尾部分得到了自注意力的输出矩阵Z。而Multi-Head Attention是由多个自注意力机制组合形成的,如下图所示。
分别将输入X传递到h个不同的Self-Attention,计算得到h个输出矩阵Z。Multi-Head Attention 将h个矩阵Z拼接在一起,然后传入一个Linear层,得到Multi-Head Attention最终的输出Z。
公式