self-Attention起源

self Attention

自注意力机制,通过计算两两之间的相似度,然后更新根据相似度更新特征,达到特征增强的作用。 具体的,QKV是F的一种线性变换,自注意力机制可以如下形式:

在这里插入图片描述

Sefl-attention
为了表达简单,我们把 self-attention 可以简记为下面公式(3) 和 公式(4) 所示,

在这里插入图片描述
简记的 self-attention。

External Attention

对于(3)(4)我们可以认为只是F对F的注意力,也就是self Attention.这种注意力是非常有效的,但是也有他的不足。首先,它使用的是一个F对F 的注意力形式,这种注意力只会考虑单个样本内部的关联,忽略样本之间的潜在联系,这种联系对视觉任务来说是有用的,在语义分割中,希望分布在不同样本中的同类物体有着相似的特征。其次,F对F的注意力,不够灵活,难以用高分辨图像场景。

下面考虑这样一个问题,如果有一个共享的矩阵 , M 是随机初始化的,我们可以把上面那个形式,记成一种 M 对 F的注意力,即如下公式(5)(6)所示。

在这里插入图片描述
M对F的Attention
首先,M是共享的,可以隐式的考虑不同样本之间的关联,其次,S是非常灵活的,可以通过控制S的大小,使得整个external Attention 灵活,使得Attention 变成N的复杂度,便于高分辨的情况。

在这里插入图片描述
External attention 和 线性层

F = query_linear(F)
attn = M_k(F)
attn = softmax(attn, dim=1)
attn = l1_norm(attn, dim=2)
out = M_v(attn)

Multi-head external attention

在这里插入图片描述
和self Attention 的multi head 不同,我们的multi head 的每个是共享的, multi head self attention 的每个head是独立的,这个multi head external attention 也可以写成线性层, 具体写法如下:

F = query_linear(F)
F = F.view(B, N, H, C//H)
F = F.permute(0, 2, 1, 3)
attn = M_k(F)
attn = softmax(attn, dim=2)
attn = l1_norm(attn, dim=3)
out = M_v(attn)
out = out.permute(0, 2, 1, 3)
out = out.view(B, N, C)
out = W_o(out)

Normalization

在通常的attention中,通常时使用一个softmax最为中间层的归一化层,这种归一化的目的是使得attention map 中的某一行或者某一列为1。 只是用softmax岑在当某一个特征值特别大或者特别小的时候,他对别的特征点乘也会变得特别大, 在这情况下,只是用softmax回破坏attention的原始含义。 使用softmax + l1_norm 这种double normalization 方式去避免这种问题。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪子私房菜

给小强一点爱心呗

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

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

打赏作者

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

抵扣说明:

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

余额充值