要理解Transformer,需要先理解注意力机制,下面大部分内容来自台大教授李宏毅老师讲课资料。
注意力机制
之前使用的MLP,CNN,RNN模型可以解决一些简单序列问题,但当序列长度太长容易失去效果,原因是看了新的忘了旧的,网络很难关注到相距很远的 token 之间的联系,于是注意力机制被引入到深度学习中,并且目前已经一招鲜吃遍天了。
注意力的设计可以有很多方式,如下图的两种设计方式。绿色框表示两个token。
目前大部分采用第一种方式,下面来说说自注意力机制。
设想我们要在一大堆文档里面通过关键词快速搜索到最相关的文档,一个较为合理的做法就是首先通过词频-逆文档频率或其他方法得到所有文档对应的特征词语,然后使用关键词和每个文档的特征词之间的相似度,这个分数就叫做attention score
,关键词就是q
,特征词就是k
,如果我们最终是要得到一个特征向量,那么就讲attention score和每个文档特征进行加权求和,当然首先需要对attention score 经过一个softmax层进行归一化。那么这里的文档特征就类似于v
。
如下图这是Attention Score
的计算方式
首先将每个token ( a 1 , a 2 , a 3 , a 4 ) (a^1,a^2,a^3,a^4) (a1,a2,a3,a4)经过参数矩阵 W q W^q Wq 计算得到 ( q 1 , q 2 , q 3 , q 4 ) (q^1,q^2,q^3,q^4) (q1,q2,q3,q4)和参数矩阵 W k W^k Wk 计算得到 ( k 1 , k 2 , k 3 , k 4 ) (k^1,k^2,k^3,k^4) (k1,k2,k3,k4),然后将每个 q 与 k 进行计算得到 attention score 再经过softmax层进行归一化。
得到注意力特征向量
使用归一化的注意力分数乘以v
再加权求和得到 a 1 a^1 a1 对应的全局特征向量 b 1 b^1 b1,后面的计算方式相似,相继得到 b 2 , b 3 , b 4 b^2,b^3,b^4 b2,b3,b4等等。
如果用矩阵来表示就是:
K = W K A Q = W Q A V = W V A B = V s o f t m a x ( K T Q ) K = W^KA\\ Q = W^QA\\ V=W^VA\\ B = V softmax(K^TQ) K=WKAQ=WQAV=WVAB=Vsoftmax(KTQ)
其特点是可以并行运行、输入输出长度相同。
多头注意力
多头注意力就是每个词获得多个k,q,v对,这样做的主要目的是每个k,q,v对可能代表不同的侧重点,同时扩充网络参数。
Encoder层
Transformer的Encoder
首先将原始token经过多头注意力注意力层得到注意力特征,然后经过残差加和和层正则化,将正则化结果输入到前馈网络里面再进行残差加和和层正则化。
详细结构
Decoder层
Decoder层和Encoder很类似,如果不看交叉注意力的的话。
交叉注意力,用当前的查询向量q去计算对方的注意力分数。