机器学习中的自注意力(Self Attention)机制详解

机器学习中的自注意力(Self Attention)机制详解

2020/6/18更新:


之前写的有点误人子弟,只看了几个代码就把特殊当一般了,还是推荐阅读复旦大学邱锡鹏老师的《神经网络与机器学习》一书中关于注意力机制的解释。
本想把自己论文中关于注意力机制的解释放在这里的,但担心查重出现问题,还是不放了。
笔记:所谓的自注意力机制的“自”指的是一组信息中每个信息和整组信息求注意力,也就是整组信息自己和自己求注意力,可以看作一种动态的全连接层。

旧文:


自注意力公式如下:

A t t ( Q , K , V ) = ω ( Q K T ) V Att(Q, K, V) = \omega(QK^T)V Att(Q,K,V)=ω(QKT)V

其中 A t t ( Q , K , V ) Att(Q, K, V) Att(Q,K,V)是得到的注意力的值, Q Q Q K K K V V V分别是查询向量(Query Vector)矩阵、键向量(Key Vector)矩阵和值向量(Value Vector)矩阵,这三个矩阵中每一行分别代表一个对应的向量。 Q Q Q K K K V V V一般通过把输入序列 X X X分别乘以三个矩阵 W q W^q Wq W k W^k Wk W v W^v Wv得到。

首先,对每一个样本,我们有一个 d q d_q dq维的查询向量,构成一个 n × d q n \times d_q n×dq维的查询向量矩阵 Q Q Q。可以认为查询向量是样本的特征。

然后,对我们的“信息库”中的每条信息(向量),都有一个 d q d_q dq维的键向量和 d v d_v dv维的值向量,构成一个键值对。假设有 n v n_v nv条信息,那么它们分别构成 n v × d q n_v \times d_q nv×dq维的键向量矩阵 K K K n v × d v n_v \times d_v nv×dv维的值向量矩阵 V V V。可以认为键向量是信息的特征,值向量是信息的内容。

Q K n × n v T QK^T_{n \times n_v} QKn×nvT代表 n n n个查询向量(样本特征)与 n v n_v nv个键向量(信息特征)之间的相似度,例如我们假设 n = 2 n = 2 n=2 n v = 3 n_v = 3 nv=3,那么若第一行为 [ 2 , 5 , 3 ] [2, 5, 3] [2,5,3],则代表第一个样本与第一、二、三条信息之间的相似度分别为2、5、3。

接下来对 Q K n × n v T QK^T_{n \times n_v} QKn×nvT施以一个激活函数 ω ( ⋅ ) \omega(\cdot) ω(),通常为 S o f t m a x ( ⋅ / d k ) Softmax(\cdot / \sqrt d_k) Softmax(/d k),得到各个样本与各条信息间相关或相似程度的分布 ω ( Q K T ) n × n v \omega(QK^T)_{n \times n_v} ω(QKT)n×nv,对于上一段提到的例子,我们简单地令 ω ( x ) = [ x i ∑ x i ] \omega(x) = [\frac{x_i}{\sum x_i}] ω(x)=[xixi],得到 [ 0.2 , 0.5 , 0.3 ] [0.2, 0.5, 0.3] [0.2,0.5,0.3],这代表第一个样本与第一、二、三条信息的相关或相似度分别为20%、50%和30%。

最后,把 ω ( Q K n × n v T ) \omega(QK^T_{n \times n_v}) ω(QKn×nvT) V n v × d v V_{n_v \times d_v} Vnv×dv相乘,得到 A t t ( Q , K , V ) Att(Q, K, V) Att(Q,K,V),即值向量(信息)的加权和,权值为各个样本与各条信息间相关或相似程度的分布,这就是自注意力的最终结果。

参考资料:

https://zhuanlan.zhihu.com/p/48508221

及提出自注意力和Transformer的论文,这个就不列了( ̄▽ ̄)"

你可能感兴趣的:(机器学习)