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

本文详细介绍了点积注意力机制SDPA(Scaled Dot-Product Attention)和多头注意力机制MHA(Multi-Head Attention),探讨了它们在Transformer模型中的作用,以及如何解决长程依赖问题。通过数学公式阐述原理,并对比了两者在处理序列信息上的差异。
摘要由CSDN通过智能技术生成

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

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 k d_{k} dk], 表示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 m x d k , R m x d v ) → R n x d v SDPA: (R^{n {\rm x} d_{k}}, R^{m {\rm x} d_{k}}, R^{m {\rm x} d_{v}}) \rightarrow R^{n {\rm x} d_{v}} SDPA:(Rnxdk,Rmxdk,Rmxdv)Rnxdv
注:

  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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值