Attention机制的本质
attention机制的本质是从人类视觉注意力机制中获得灵感。
大致是我们视觉在感知东西的时候,一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当我们发现一个场景经常在某部分出现自己想观察的东西时,我们就会进行学习在将来再出现类似场景时把注意力放到该部分上。从关注全部到关注重点
Attention机制的优势
参数少
模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。
速度快
Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。
效果好
在 Attention 机制引入之前,长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情。Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。
Attention机制的理解
注意力机制说白了就是要通过训练得到一个加权,自注意力机制就是要通过权重矩阵来自发地找到词与词之间的关系。实现注意力分配系数,也就是一系列权重参数罢了。
注意attention机制的实现有很多种方法
从Self-Attention较简单实现形式开始理解
最原始的sefl-attention数学公式表达:
假设模型输入 X = 早上好,下图为其embedding的结果 (右侧为X转置结果)
下图为以第一行为例的Softmax(XXT)结果
投影的值大,说明两个向量相关度高。
如果两个向量夹角是九十度,那么这两个向量线性无关,完全没有相关性!
softmax用于归一化,同时为权重分配做出了self-attention机制数学实现,进行权重分配进行了铺垫。例如
例如根据softmax结果,当我们关注"早"这个字的时候,我们应当分配0.4的注意力给它本身,剩下0.4关注"上",0.2关注"好"。
最后是对最末尾矩阵X在self-attention中的作用
至此,self-attetion最原始的表达形式和简单的attention表示有了较好的理解
ViT模型中使用的自注意力机制数学表达
公式中所含有的Q(query查询)、K(key键)、V(value值/vector向量)其来源是X与矩阵的乘积,本质上都是X的线性变换。
问题:为什么不直接使用 [公式] 而要对其进行线性变换?
是为了提升模型的拟合能力,矩阵W 都是可以训练的,起到一个缓冲的效果。
使用sefl-attention时,计算两个向量间常用的方案Relevant关系的方案——Dot product
因篇幅问题不能全部显示,请点此查看更多更全内容