SDPA的全称为Scaled Dot-Product Attention, 属于乘性注意力机制, 简单一句话来说就是,根据Query (Q)与Key之间的匹配度来对Value进行加权,而事实上不管是Query, Key还是Value都来自于输入,因此所谓的SDPA本质上是对输入信息信息进行重组。
SDPA的形式化定义如下:
S D P A = A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q ⋅ K T ( d k ) ) ⋅ V SDPA=Attention(Q, K,V)=softmax(\frac{Q \cdot K^{T}}{\sqrt(d_{k})}) \cdot V SDPA=Attention(Q,K,V)=softmax((dk)Q⋅KT)⋅V
其中,各个变量的尺寸如下:
Q: [n, d k d_{k} dk], 表示n个Query, 每个Query为维度为 d k d_{k} dk的向量;
K: [m, d v d_{v} dv], 表示m个Key, 每个Key为维度为 d v d_{v} dv的向量;
V: [m, d v d_{v} dv]. 表示m个Value, 每个Value为维度为 d v d_{v} dv的向量;
注: K和V是以Key-Value对的形式出现的,Key中的每个向量与Value中的每个向量一一对应,
因此SDPA可以看做是如下这样一个映射:
S D P A : R n x d k → R n x d k SDPA: R^{n {\rm x} d_{k}} \rightarrow R^{n {\rm x} d_{k}} SDPA:Rnxdk→Rnxdk
注:
MHA全称为Multi-Head Attention, 最早出现在NLP领域, MHA是著名的Transformer架构的基本组成单元,最初提出的动机是为了克服经典的Encoder-Decoder架构存在的long-range dependence问题。
MHA简单来说就是通过多次线性投影linear projection得到原始输入的多个子空间,然后再每个子空间分别进行SDPA, 再把SDPA的结果进行聚合Concatenation,最后再做一个linear projection。
MHA的形式化定义如下:
M H A = M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W o MHA=MultiHead(Q, K, V)=Concat(head_{1}, ..., head_{h}) W^{o} MHA=MultiHead(Q,K,V)=Concat(head1,...,headh)Wo
其中, h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) , i ∈ 1 , 2 , . . . , h head_{i}=Attention(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V}), i \in {1,2,..., h} headi=Attention(QWiQ,KWiK,VWiV),i∈1,2,...,h, Concat操作的输出的第二个维度为 h ⋅ d v h \cdot d_{v} h⋅dv.
各个变量的尺寸如下:
W i Q : [ d m o d e l , d k ] W_{i}^{Q}: [d_{model}, d_{k}] WiQ:[dmodel,dk]
W i K : [ d m o d e l , d k ] W_{i}^{K}: [d_{model}, d_{k}] WiK:[dmodel,dk]
W i V : [ d m o d e l . d v ] W_{i}^{V}: [d_{model}. d_{v}] WiV:[dmodel.dv]
注: 原始的Q, K, V的第二个维度都为 d m o d e l d_{model} dmodel, 通过linear projection得到相应的子空间。
W o : [ h ⋅ d v , d m o d e l ] W^{o}: [h\cdot d_{v}, d_{model}] Wo:[h⋅dv,dmodel]
因此,MHA可以看做是如下这样一个映射:
M H A : R n , d m o d e l → R n , d m o d e l MHA: R^{n, d_{model}} \rightarrow R^{n, d_{model}} MHA:Rn,dmodel→Rn,dmodel
其中n为sequence的长度, d m o d e l d_{model} dmodel为每个token向量的维度.
注:
1.在原始论文中作者设置 d k = d v = d m o d e l / h d_{k}=d_{v}=d_{model}/h dk=dv=dmodel/h, 因此 h ⋅ d v h\cdot d_{v} h⋅dv恰好等于 d m o d e l d_{model} dmodel.
2. 切记,输入为向量组成的序列, 英文表述为sequence of tokens.