Transformer之Attention的通俗理解

什么是 Attention?

Attention

关于Token的文章 中介绍了什么是Token和Token的作用,那么将一堆Token之间的关系和语义进行提取的,就是Attention。其核心就是通过一些升维降维和求积操作,完成对感兴趣的区域进行特征提取。
A t t e n t i o n o u t p u t = S o f t m a x ( Q × K D i m o u t ) × V Attention_{output} = Softmax(\frac{Q \times K}{\sqrt{Dim_{out}}}) \times V Attentionoutput=Softmax(Dimout Q×K)×V
想要理解Attention,就要先理解这个公式做了什么事,嫌麻烦就只看点后面的

  • Q × K Q\times K Q×K计算了两组向量之间的相似度,可以理解为一种互相关或者互信息的计算,也称之为注意力得分;

Q × K T = ∑ D i m o u t i = 1 Q i × K i = X ⋅ W q ⋅ [ X ⋅ W k ] T = X ⋅ W q ⋅ W k T ⋅ X T = X ⋅ [ W q ⋅ W k T ] ⋅ X T = X ⋅ W a t t n ⋅ X T \begin{array}{ccl} Q \times K^T &= &\underset{i=1}{\stackrel{Dim_{out}}{\sum}}Q_i \times K_i \\ && \\ &= &X \cdot W_q \cdot \Big[X \cdot W_k\Big]^T \\ && \\ &= &X \cdot W_{q} \cdot W^T_k \cdot X^T \\ && \\ &= &X \cdot \Big[W_{q} \cdot W^T_k \Big] \cdot X^T \\ && \\ &= &X \cdot W_{attn} \cdot X^T \end{array} Q×KT=====i=1DimoutQi×KiXWq[XWk]TXWqWkTXTX[WqWkT]XTXWattnXT
关于这个注意力得分的理解:

  • 这个注意力得分是一个二次型,即 s c o r e = X ⋅ W ⋅ X T score=X\cdot W \cdot X^T score=XWXT,原因是二次型的维度更高,表达能力更强;如果只是 s c o r e = W ⋅ X score=W \cdot X score=WX,难么这只是输入的现行变换,没有太强的表达能力;
  • 因为是二次型,所以从最后和公式来看,它就是X-corr的相似的计算,计算的也是一种互信息;
  • 由于上述公式省略了nn.Linear或者nn.Conv2d中的偏置(bias)过程,所以,一次项没有列出,正因为这个由偏置引起的一次项和零次项,所以在实际操作中无法直接使用先计算输入的内积在乘以矩阵系数的过程(因为这种做法看起来省掉了一组权重系数 W W W,所以有人可能会走这条路去试探)
  • s o f t m a x softmax softmax作用就是把相似度转换为概率分布 [ 0 , 1 ] [0, 1] [0,1],这样就可以作为权重矩阵去加权 V V V
  • D i m o u t \sqrt{Dim_{out}} Dimout 缩放注意力得分,用这个值缩放,是因为这个值是标准差,下面是原因;

V a r ( X i Y i ) = E ( X i 2 Y i 2 ) − E ( X i Y i ) 2 = E ( X i 2 ) E ( Y i 2 ) − E ( X i ) 2 E ( Y i ) 2 = ( V a r ( X i ) + E ( X i ) 2 ) ( V a r ( Y i ) + E ( Y i ) 2 ) − E ( X i ) 2 E ( Y i ) 2 = ( 1 + 0 ) ( 1 + 0 ) − 0 = 1 其中 , X = [ X 1 , ⋯   , X n ] ∼ N ( 0 , I ) , Y = [ Y 1 , ⋯   , Y m ] ∼ N ( 0 , I ) , 方差为 1 期望为 0 , 所以 V a r ( X × Y ) = ∑ V a r ( X i , Y i ) D i m o u t i = 1 = D i m o u t \begin{array}{ccl} \mathop{Var}(X_i Y_i) &= &{E(X_i^2Y_i^2) - E(X_iY_i)^2} \\ &&\\ &= &{E(X_i^2)E(Y_i^2) - E(X_i)^2E(Y_i)^2}\\ &&\\ &= &(\mathop{Var}(X_i)+E(X_i)^2)(\mathop{Var}(Y_i) +E(Y_i)^2) - E(X_i)^2E(Y_i)^2 \\ &&\\ &= & (1+0)(1+0) - 0 \\ && \\ & = &1 \\ \end{array}\\ \quad \\ 其中, X = [X_1, \cdots, X_n] \sim N(0, I),\quad Y=[Y_1, \cdots, Y_m] \sim N(0, I) ,\\ 方差为1期望为0, 所以 \mathop{Var}(X \times Y) = \underset{i=1}{\stackrel{Dim_{out}}{\sum \mathop{Var}(X_i,Y_i)}} =Dim_{out} Var(XiYi)=====E(Xi2Yi2)E(XiYi)2E(Xi2)E(Yi2)E(Xi)2E(Yi)2(Var(Xi)+E(Xi)2)(Var(Yi)+E(Yi)2)E(Xi)2E(Yi)2(1+0)(1+0)01其中,X=[X1,,Xn]N(0,I),Y=[Y1,,Ym]N(0,I)方差为1期望为0,所以Var(X×Y)=i=1Var(Xi,Yi)Dimout=Dimout

  • s o f t m a x ( Q × K T D i m o u t ) softmax(\frac{Q \times K^T}{\sqrt{Dim_{out}}}) softmax(Dimout Q×KT)整体作为 V V V的权重,进行加权,就是 s o f t m a x ( Q × K T D i m o u t ) softmax(\frac{Q \times K^T}{\sqrt{Dim_{out}}}) softmax(Dimout Q×KT)
  • 这么做,实现了N个词汇向量或者像素patch的语义(就是他们通道)之间的交互,可以理解为词与词或者patch与patch之间的关系被注意力得分表示出来了,然后再在 V a l u e Value Value上加权,就可以得到一个被高亮的 v a l u e value value

什么是Multi-Head Attention

按照输入数据维度分类,Attention可分为普通Attention和Multi-Head Attention。上面是普通的Attention,下面的是Multi-head attention

Multi-Head实际上,他就是将输入数据从 [ B , N , C ] [B, N, C] [B,N,C]变成 [ B × n u m _ h e a d s , N , C ] [B \times num\_heads, N, C] [B×num_heads,N,C],然后再输入到Attention模块中进行注意力计算。
那么这么做有什么好处呢?
  上面说道Attention实现了N个词汇向量或者像素patch的语义(就是他们通道)之间的交互,可以理解为词与词或者patch与patch之间的关系被注意力得分表示出来了,然后再在 V a l u e Value Value上加权,就可以得到一个被高亮的 v a l u e value value
  那么这么做的缺点也显而易见,就是整个语义部分被当做一个整体去计算相似度得分和加权 V a l u e Value Value,也就失去了对多重语义的理解
  所以,Multi-Head Attention就被提出来了,核心操作就是对语义维度(channel)进行切片,分割成 n u m _ h e a d s num\_heads num_heads个,堆叠在Batch维度上再进行注意力计算,这样就可以得到多重语义

优点

  • 计算效率提升了

因为要进行相乘的维度从 [ c h a n n e l × c h a n n e l ] [channel \times channel] [channel×channel] 变成了 [ c h a n n e l n u m _ h e a d s × c h a n n e l ] \Big[ \frac{channel}{num\_heads} \times channel \Big] [num_headschannel×channel], 虽 b a t c h batch batch变成了 b a t c h × n u m _ h e a d s batch \times num\_heads batch×num_heads,但是总体少了,大概就是: c h a n n e l 2 channel^2 channel2 ÷ ( c h a n n e l n u m _ h e a d s ) 2 × n u m _ h e a d s (\frac{channel}{num\_heads})^2 \times num\_heads (num_headschannel)2×num_heads

  • 拥有了可以处理多重语义的能力

例如,“日久生情”和"日久生情"

  • 提高模型泛化能力和降低过拟合风险

多头注意力本质上类似一种多模型model的组合 ,通过对相同嵌入(Embedding)进行多角度的特征理解或者是提取,得到一个拓展的结果集合,在一个更大的空间中筛选结果,确实能提升泛化能力,降低过拟合风险。

其他Attention

  • Self-Attention:

Q 、 K 、 V Q、K、V QKV都是来自于同一个嵌入向量Embedding或者同一组图片的patch embedding,进行相同的注意力计算,就是Self-Attention

  • Cross-Attention:

Q Q Q是一组嵌入向量Embedding或者一组图片的patch embedding,而 K K K V V V是来自于另一组且相同的嵌入向量Embedding或者图片的patch embedding, 然后进行相同的注意力计算,就是Self-Attention

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值