attention机制的理解

我对 attention 机制的理解

attention 在很多网络模型中都用到,并且结合很广泛。由于attention在文章中出现频率很高,所以我试图了解attention机制。我只是说说我对attention的理解attention使用意义,可能片面,如果有补充和纠正欢迎指出。

前置知识储备

在这里首先默认,你对attention有初步的了解:知道Q K V 矩阵, A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V ,并且对它的运算有了解

self-attention

attention用来学习向量。如果用self-attention,目的是表示自身向量,希望自身向量中包含同类的向量信息

比如说,我有一组超市购物记录,按照时间排序。我希望每一条消费记录不只是由这条记录本身组成,还包括前后时间的消费记录。因为从常识来说,时间上先后的消费记录们可能和这条记录有关(如买了面包之后大概率买果酱)。

问:让自身向量包含同类向量,这么做的目的是什么呢?
答:首先明确的是,同类向量不是随便找的,同类向量按有关特征有权重。
(比如说,超市购物记录,我希望时间越近的记录越相关,所以我把时间间隔作为权重,间隔越小,权重越大)
权重高的同类记录,向量的有关特征越明显,在自身向量中的占比越高

从运算角度来看,self-attention Q K V 的输入都是自己,因为是自身获取同类向量,本质都在同一组中。权重用w表示加在运算Value前:
S e l f A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K t + w d k ) ∗ V SelfAttention(Q,K,V)=softmax(\frac{QK^t+w}{\sqrt{d_k}})*V SelfAttention(Q,K,V)=softmax(dk QKt+w)V

包含这些同类向量,能获得隐藏的潜在相关信息。我说的不是很利于理解,举个例子:以超市购物为例,我的目的是获得商品间的潜在联系。单单买面包和买果酱,这两条信息独立互相没有影响,无法获得。如果面包中包含果酱的特征,可以理解为他们间有某种关系联系,这种联系在向量中没有表现但可以获得(可能都有早餐特征,也可能果酱一般配合面包食用等等)。联系可能有各种各样,我不知道是什么具体联系,但通过self-attention指定有关特征,可以获得存在联系。

attention

self-attention 是attention的一种特殊例子。传统的attention的 Q K V 对象一般都不同:
我对QKV的理解是:
Q:每个元素对应的查询向量
K:每个元素对应的键(key)向量
V:每个元素对应的值(value)向量

Q K T QK^T QKT 计算查询向量和key的相似度,以点积为例,得到相似度权重
s o f t m a x ( Q K T ) V softmax(QK^T)V softmax(QKT)V 归一化权重后,以权重*值的形式作为结果

同样是超市购物例子,现在我用attention举例(不是self-attention)。我希望根据一组超市消费记录(按时间排序),以超市中所有物品为范围,获得下一组可能的消费记录(未知)

Q:每个元素对应的查询向量->以超市购物为例,Q 是所有商品的编号id 的Embedding
K:每个元素对应的键值向量 ->以超市购物为例,K 是每条消费商品编号id的Embedding
V:每个元素对应的隐藏值向量 -> 以超市购物为例,V就是物品间的相关度

解释:下一组消费 和 物品的相关度有关, 我们认为相关度越高, 作为下一组消费的可能性越大.相关度可以由多种因素衡量(消费时间,物品类别等等)
从运算角度来看, S e l f A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K t + w d k ) ∗ V SelfAttention(Q,K,V)=softmax(\frac{QK^t+w}{\sqrt{d_k}})*V SelfAttention(Q,K,V)=softmax(dk QKt+w)V 的Embedding 大小为:
E(Q):(n,embedding) n为所有商品数量
E(K): (m,embedding) m为消费记录数量
E(V): (m,n) 相关度

Q ∗ K T − > ( n , m ) Q*K^T -> (n,m) QKT>(n,m)
( Q ∗ K T ) V − > ( n ) (Q*K^T)V -> (n) (QKT)V>(n)

最后Value的地方可能理解的不是很对,望理解.

multi-head attention

传统 attention一个输入对应一组QKV矩阵, 得到一个输出,能够学习关于一个相关特征的表示.
Multi-head 的意思是 一个输入对应多组QKV矩阵, 得到多个输出,能够学习多个相关特征表示,再将多个结果汇成一个.
这么看Multi-head的计算空间是翻倍的: 学习的参数矩阵数量翻倍,最后连接的时候还需要一个参数矩阵做连接.但因为是并行计算,时间上理论不会变化, 最后增加一个矩阵连接的计算.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值