点积注意力机制SDPA与多头注意力机制MHA

点积注意力机制SDPA与多头注意力机制MHA

  • SDPA
  • MHA
  • 总结
  • Reference

SDPA

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)QKT)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:RnxdkRnxdk
注:

  1. 公式中的softmax的输入为一个Matrix, 而softmax操作是逐行进行的, 即 s o f t m a x ( X ) i , j = e x p X i , j ∑ j e x p X i , j softmax(X)_{i,j}=\frac{exp{X_{i,j}}}{\sum_{j}exp{X_{i,j}}} softmax(X)i,j=jexpXi,jexpXi,j;
  2. Scaled体现在对Q和K的內积操作除以 d k \sqrt{d_{k}} dk , 主要是为了克服因维数太大而导致內积数值绝对值太大,从而经softmax之后对应梯度趋于0的问题。

MHA

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),i1,2,...,h, Concat操作的输出的第二个维度为 h ⋅ d v h \cdot d_{v} hdv.

各个变量的尺寸如下:
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:[hdv,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,dmodelRn,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} hdv恰好等于 d m o d e l d_{model} dmodel.
2. 切记,输入为向量组成的序列, 英文表述为sequence of tokens.

总结

  1. 上边是对SDPA以及MHA最清晰间接的描述, 原论文中是作为Transformer的组成部件来讲的,写的非常简洁, 开始的看原论文的时候在细节问题上比较纠结;
  2. Transformer架构本身包含Encoder和Decoder两部分,Encoder和Decoder都是通过堆砌building block组成, 每个building block包含一个MHA和一个Position-wise Feed Forward Fully connected layer组成。 因此Transfer架构是第一个没有利用任何Convolution operation和Recurrent module搭建起来的网络模型, 并且克服了long range dependency的问题
  3. 当前很多工作吧Transformer用于CV等其他领域, 即所谓的Vision Transformer, 由于原始Transformer处理的是向量,将其用于CV的话需要首先把Figure转化为Vector,会导致memory和computation efficacy完全无法接受,有很多工作尝试解决这些问题。

Reference

  1. NeuIPS 2017, Attention is all you need.

你可能感兴趣的:(Deep,learning,深度学习)