多尺度膨胀transformer
TMM2023
简介
视觉transformer, 能够对任意图片patch之间的依赖性进行建模,但是会导致二次方的计算开销
这里的 patch 也也可以理解为 pixel
尺寸为 1 的 patch=pixel
还是熟悉的计算复杂度问题,受CNN的启发,视觉transformer的另一个研究路线是探索局部注意力,即只在小的空间区域内对图片patch进行交互,这能够降低计算成本,但是会减小感受野,降低模型对长程依赖的建模能力
作者通过两句话点明了 注意力机制在图像上的两种应用
全局和局部注意力
局部注意力通过窗口注意力来实现,并分别说明了它们的缺点和优点
全局注意力的感受野大,但相应的计算复杂度高
局部注意力的计算复杂度低,但是感受野小
所以想办法结合起来最好了
本文提出了一种高效的视觉transformer架构,以达到计算量和感受野的平衡
视觉transformer在浅层中存在两个关键属性:局部性和稀疏性
也就是对 query 来说,高相关的 key 系数的分布在 query 周围,表明ViT 浅层中全局依赖建模的冗余性
也就是说大多数的远距离的Patch,是不相关的,应当减少全局环境下很多冗余的Patch对之间的计算
作者阐明了自己的动机和来源,也就是局部性和稀疏性,也就是说要把重点放到每个query元素的周围环境中,因为距离越近越相关
但是呢为了降低计算复杂度,我们不使用周围所有的元素来参与计算,而是随机来选择一些重要的元素来参与计算
ps
你说说这里面的哪一个词你没见过,但是作者怎么写的这么高大上呢,局部性老生常谈,稀疏性见得也挺多,它类似于在注意力矩阵中通过mask操作,从而去掉一些比较小的权重,只保留一些大的权重值,思想是一致的,但是这两者的做法有一些不同
多尺度膨胀注意力为不同的注意力头设置不同的膨胀率,实现多尺度表征学习的能力
关注两个重点
📍 第一个重点: 在周围环境中选择少量的Patch,具体怎么选择?
📍第二个重点: 多尺度的膨胀注意力
|
|
回顾简介,这里涉及了三种性质:①局部性②稀疏性③多尺度性
嗯,你把自己的动机或者出发点也套套这三种
再来明确一下作者的动机,首先是一个局部性和稀疏性,以这几个图片的注意力图的可视化为例
红色框框代表query patch,其他不同的颜色代表query与当前Patch之间的权重值,不同的颜色就代表了权重的不同
在这些图片中可以看到,具有强相关性的patch,不均匀的分布在query的周围,并且数量是很少的,也就是距离较远的这些patch,和query之间的相关性是很弱的,通过颜色就可以看出来,权重基本上是为零的
在这里,还有一个多尺度的性质:
首先,看这个小鸟的图片,由于它的身躯,在这个图片中的比例相对较小,那么强相关性的patch,仅仅只分布在它附近的紧凑环境中
再看第一张小猪的图片,由于它的身躯比较大,占满了这个图片,所以相对来说,它的强相关性的patch就分布的比较宽松一些
所以如果只设置一个单一尺度,比如3×3可能就对小鸟比较有利,对这个小猪就不利,如果设置5×5的尺度,对小猪就有利,对小鸟就不利
如果设置多个尺度让模型来学习,让它们来自主选择,直观上来说就很符合实际的情况
模型图
📍 首先对比 [滑动窗口膨胀注意力] 和 [缩放点积注意力] 的区别是什么?
很明显的区别是,滑动窗口膨胀注意力替换了缩放点积注意力,其他的是一模一样
所以重点放在滑动窗口膨胀注意力
首先,膨胀是我们注意力的重点
解释膨胀:
给定一个3×3的卷积核,原始的卷积只能提取周围的一个窗口信息,如果你还想增大感受野,就只能增加卷积核的尺寸5×5或者7×7,
但是大的卷积核也会增大参数量,并显著降低计算效率
因此增大卷积核是一种比较低效的,其次就算增大了感受野,实际真正相关性强的像素点,就那么几个,大多数的像素点是不相关的,因此,作者提出了膨胀卷积
膨胀卷积的优点:
不增加这个卷积和尺寸的情况下,通过增加膨胀率,就可以增大感受野,并且还不需要关注所有的周围像素点,只需要关注有限的一些像素点即可,这样的话参数量少了,还能够保持很高的计算效率
作者将膨胀卷积的思想迁移到注意力机制上
如图所示
第一个图(r=1),卷积核为3×3的情况,红色的像素是query,当膨胀率为一的时候,query只关注周围紧凑的窗口内的其他像素点的信息
当这个膨胀率为二(r=2)的时候,可以看到尺寸为5的窗口,此时关注的像素点之间的距离是2
当这个膨胀率为三的时候,感受野尺寸为7的窗口,也就是关注的像素点之间的距离是 3
以这样的方式,就可以为每个query元素,只选择周围少量的像素点来进行计算,很好地贴合作者的动机:局部性和稀疏性
作者在这里分了多个头,多个注意力头,为每个不同的注意力头设置不同的膨胀率,以这样的方式实现多尺度的性质.
这个算法实际思想很简单,很多人应该是有想到过,但是能不能写出代码来,能不能完美阐述自己的动机,是大多数人遇到的最大问题,建议大家好好去研究一下这篇论文,一个简单的思想写出了A类的论文 (优秀的代码 & 合理的动机)