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