回顾
前面两篇文章:
主要介绍了注意力机制的基本思想,以及注意力机制中一个常见的类型——自注意力机制。前面两篇文章为了帮助大家理解注意力机制的思想用了非常多的类比,以及联系生活实际。
然而,不管类比和联系多么恰当,这些做法多多少少都会让事物本身的特性被类比、联系后的事物所掩盖。
所以本篇文章我们有两个任务:
1、还原注意力机制的本质:不使用任何的类比、比喻,仅仅来灌输注意力机制的本身思想
2、比对不同注意力机制类型:在注意力机制的本质下去比对不同注意力机制类型
注意力机制本质
注意力机制是父类
注意力机制是一个宏大的概念,也注意力机制是一个宏大的概念,也就说注意力机制指的是一群方法,而不是一个方法。并且,现在的模型都不会直接用原始注意力机制来做,而是用其变型来完成。
所以:
注意力机制是自注意力机制、交叉注意力机制、多头注意力机制的一个父类。并且可以认为里面的Q的来源是一个未实现的抽象类,需要在其子类(自注意力机制、交叉注意力机制等)中具体去实现
注意力机制的限制
对于上面这张图,大家应该都非常熟悉了:
1、Q与K进行查询,查询出K与Q的相似度
2、将相似度进行缩放处理
3、将Scale结果进行softMax处理的到0-1的概率值
4、将V和概率值进行MatMul后,得到的结果V‘就包含注意力的信息
注意力机制虽然没有规定QKV的来源和关系,但是它限制QKV的做法以及其所蕴含的含义。
因此,只要满足这四步操作的,我们都可以称为是一种注意力机制
自注意力机制
自注意力机制是注意力机制的一种特殊形式,注意力机制包括自注意力机制
在自注意力机制中,QKV是同源的,因此自注意力机制能够很好的探寻序列内部的信息
从上图中,对于Thinking的词向量X1,通过三次矩阵变化就得到了q、k、v
其实,所谓的Q K V矩阵、查询向量之类的字眼,其来源都是与矩阵的乘积,本质上都是的线性变换。那么为什么不直接使用而要对其进行线性变换呢?
当然是为了提升模型的拟合能力,矩阵都是可以训练的,起到一个缓冲的效果
总之,自注意力机制对QKV的来源(初始值)、关系存在一定的限制(这个限制让自注意力机制更易探寻模型内部的信息)(对单一序列分析有很好的效果),同时也通过矩阵使得模型可训练,起到缓冲作用
交叉注意力机制
交叉注意力是注意力机制的一种,它处理两个相关但不同的序列。这在多模态任务中特别有用,如图像和文本的联合处理(存在联系的多序列联合分析)
特点:V、K同源,Q来自另一个序列(如下图)
针对这个特点,我们不难理解为何交叉注意力机制多用于多模态任务:
1、V、K来自一段视频,Q来自一段音频。要求利用音频在视频中查找音频相关的视频内容
2、此时Q就代表查询项(爱好匹配),拿这个查询项到视频构造出来的序列中去查询。给视频
(K、V)中和音频(Q)相匹配的部分给予更高的关注度
3、于是在最后得到的视频序列V‘中,就重点考虑了我们要的相匹配的部分序列。此时无论是做相关视频内容的生成、查找都可以很方便的利用这个V’
XXX注意力机制
我们同样可以:
1、让QKV都不同源
2、让Q=1,KV同源
3、anyway~~~~
总之,我们任意给QKV的来源加以改变我们就可以得到一个全新的注意力机制。但是这样的一个来源组合,你必须要能够给出一个合理的解释同时保证它有一个很好的效果,否则就是没有意义的(现在对注意力来源修改的研究很多啦,想要利用这个发现一个全新的、优秀的注意力机制可不容易)
总结
1、注意力机制是一个方法群体的总称(父类)
2、自注意力、交叉注意力机制都是对注意力机制的继承,对QKV来源进行了限制
3、注意力机制本身对QKV的限制仅仅在操作方法上
4、自注意力机制主要用于单一序列的内部分析;交叉注意力机制用于多模态学习(多序列分析)
撰写文章不易,如果文章能帮助到大家,大家可以点点赞、收收藏呀~