MSA,W-MSA和AS-MLP block的计算复杂度公式推导

在AS-MLP里面有这几个公式:
在这里插入图片描述

  1. 首先,这三个名词首先知道是从哪里来的:

  2. 然后我们这里说的是计算复杂度,而不是直接的计算量,所以会忽略比如softmax和scale的计算部分。

  3. 首先明确最简单的矩阵相乘的计算复杂度,可以看下面这张图: NxC的矩阵与CxM的矩阵相乘,计算复杂度为 O ( N M C ) O(NMC) O(NMC)
    在这里插入图片描述

好,明白以上的就可以往下看了。

一、先来看self-attention的计算就能明白了:

图2
多头自注意力模块运算公式,简单说就是(具体流程可以看上面和下面的图):
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 Attention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_{k}}})V Attention(Q,K,V)=softmax(dk QKT)V
下面这幅图中黑色是tensor的shape,蓝色表示运算流,黄色是计算复杂度,nd是多头注意力里面的头数num_heads
在这里插入图片描述

  • 输入(hw,C)先与形状都是(C,C) W Q , W K , W V W_{Q},W_{K},W_{V} WQ,WK,WV映射成Q,K,V,三者也都是(hw,C),这里的计算复杂度就是 3 h w C 2 3hwC^{2} 3hwC2
  • 然后Q,K,V在特征维度分成num_heads个,因为是多头,进行 Q K T QK^{T} QKT, 多头的话可以用类似torch.matmul这样的函数,得到形状为(nd,hw,hw)attention。所以这里的计算复杂度就是 n d ∗ ( h w ) 2 ∗ C n d = ( h w ) 2 C nd*(hw)^{2}* \frac{C}{nd}=(hw)^{2}C nd(hw)2ndC=(hw)2C
  • 然后attentionV相乘,得到 ( n d , h w , C n d ) (nd,hw, \frac{C}{nd}) (nd,hw,ndC)的out,这一步的计算复杂度也是 n d ∗ ( h w ) 2 ∗ C n d = ( h w ) 2 C nd*(hw)^{2}* \frac{C}{nd}=(hw)^{2}C nd(hw)2ndC=(hw)2C
  • 最后一步如第二张图左上角,b还要乘以个Wo才输出最后的B,类似的, ( n d , h w , C n d ) (nd,hw, \frac{C}{nd}) (nd,hw,ndC)的out要concat一起变成(hw,C)再乘以一个(C,C)的矩阵project得到最后的输出(hw,C),这一步的计算复杂度也是 h w C 2 hwC^{2} hwC2

所以最后总的复杂度就是: Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C \Omega(MSA)=4hwC^{2}+2(hw)^{2}C Ω(MSA)=4hwC2+2(hw)2C

二、MSA明白,W-MSA就很容易了

在这里插入图片描述
因为现在self-attention操作只在大小为 M M M的patch里面做,所以 Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C \Omega(MSA)=4hwC^{2}+2(hw)^{2}C Ω(MSA)=4hwC2+2(hw)2C中的 4 h w C 2 4hwC^{2} 4hwC2是不变的,这些还是有的,就是 2 ( h w ) 2 C 2(hw)^{2}C 2(hw)2C这部分变成了,跟上面是吻合的:
Ω ( W − M S A ) = 4 h w C 2 + 2 h M w M ( M 2 ) 2 C = 4 h w C 2 + 2 M 2 h w C \Omega(W-MSA)=4hwC^{2}+2\frac{h}{M}\frac{w}{M}(M^{2})^{2}C=4hwC^{2}+2M^{2}hwC Ω(WMSA)=4hwC2+2MhMw(M2)2C=4hwC2+2M2hwC

三、AS-MLP也很简单

在这里插入图片描述
这里面只有四个channel projection也就是全连接层的操作,具体实现的时候就是1x1卷积,所以
Ω ( A S − M L P ) = 4 h w C 2 \Omega(AS-MLP)=4hwC^{2} Ω(ASMLP)=4hwC2

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laizi_laizi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值