Transformer
说到Transformer就不得不提起注意力机制,Transformer主要是由Encoder(自注意力机制)和Decoder(交叉注意力机制)
Self-attention自注意力机制
a1-a4可能是input也可以作为中间层的输入,b1~b4每个向量都会考虑整个input sequence
- 计算关联性
计算相关性的方法有很多种
用这种方法计算出a1与a1-a4的attention score
然后进行Soft-max归一化
将归一化后的attention score 乘 V 后相加得到b1,其中V=a*Wv,与计算q和k的方法一致。具体如下图:
利用相同的方法计算出b2-b4
上述的过程实质上是一系列的矩阵乘法,可以并行化执行,可以利用GPU加速,具体如下
以上就是Self-attention的计算过程,但是上述过程只是考虑两两元素的相关性,却没有考虑位置信息
https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247531914&idx=1&sn=3b8d0b4d3821c64e9051a4d645467995&chksm=ec1c9073db6b1965d69cdd29d40d51b0148121135e0e73030d099f23deb2ff58fa4558507ab8&scene=21#wechat_redirect
- 接下来,我们来看transformer的结构图
transformer是由两部分组成:Encoder 和 Decoder,如下图,左边(encoder)就是我们上面讲到的self-attention,右边(decoder)是由一个自主自注意力和一个交叉注意力所组成的模块
首先解释Encoder模块,如下图,N代表着多层Self-attention叠加,Add & Norm表示residual残差神经网络和归一化。Multi-Head Attention的解释在下面
Multi-Head Attention是多头的自注意力,就是说两个元素的相关性可能是多种的,为了考虑多种情况每个元素产出多个q,k,v 如下图
接下来是Decoder的部分
Decoder 是由一个Self-attention和Cross attention组成,注意到下图的Self-attention是一个Masked Multi-Head Attention.
Decoder是一个顺序的过程,每一次多接收一个输入,多的那个输入是上一轮的输出,所以前序的输入不该知道后续的序列,使用masked更符合逻辑,
如下面的动图:
https://jalammar.github.io/images/t/transformer_decoding_2.gif
接下来是decoder的交叉注意力机制,其与自注意力机制计算方法一样,只是它的q,k来自于encoder的自注意力机制输出的结果,其余与自注意力机制一样
这就是transformer的计算过程