CV算法之transform中self-attention理解

目前基于transform的很多算法在目前CV领域分类、检测、分割等经典任务中都取得了sota效果,自己其实也尝试了各种基于transform的分类分割算法,但是做算法就是这样,用很容易,真正说理解透彻,就很困难了。

这篇文章就不去具体分析某个算法,而是侧重于transform的核心:
self-attention,自注意力机制到底是什么,怎么计算的。在CV算法当中怎么去更好地理解它。

相信所有尝试了解self-attention的同学们都看到过这个公式:
自注意力机制计算其实就很简单。一个输入矩阵X,学习三个Q、K、V矩阵
计算时根据下列公式计算结果
在这里插入图片描述

那么,首先一步一步来:

这个看图做:

在这里插入图片描述

第一个:
在这里插入图片描述
这个公式本质其实就是输入矩阵和输入矩阵的转置矩阵相乘,中间的QK矩阵是学出来的一组参数,物理意义其实就是计算图像中各个像素点和其他像素的相关性。

第二步:

由于随着QK的维度DK的增加,值也会越来越大,所以下一步需要除以QK的维度DK

第三步:

softmax本质,其实就是归一化,这样计算出来,就是所谓的权重矩阵,

第四步:

与V矩阵相乘,其实就是加权求和得到最终结果,这里V也是学出来的一组参数,QKV输入都是一个输入x。

在这里插入图片描述
Multi-Head Attention 包含多个 Self-Attention 层,首先将输入 分别传递到 多个不同的 Self-Attention 中,计算得到 多个输出结果。得到多个输出矩阵之后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出 。可以看到 Multi-Head Attention 输出的矩阵 与其输入的矩阵 的维度是一样的。google提出来的多头attention的不同之处在于进行了h次计算而不仅仅算一次,论文中说到这样的好处是可以允许模型在不同的表示子空间里学习到相关的信息。

位置编码:

以上是multi-head self-attention的原理,但是还有一个问题是:现在的self-attention中没有位置的信息,对于NLP来说每个单词的位置影响很大,例如A打了B就和B打了A语义完全不一样

解决的办法:
具体的做法是:给每一个位置规定一个表示位置信息的向量 ,让加在一起之后作为新的向量参与后面的运算过程,但是这个向量是由人工设定的,而不是神经网络学习出来的(ViT通过实验证明了通过2D卷积直接学位置也能达到类似的效果)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值