Attention Is All You Need
-Ashish Vaswani
1.Self-Attention是个啥,自己注意自己?
2.Q、K、V又是什么?
3.为什么它们要叫query、key、value,它们有什么关系?
先来看一个问题,假设现在有一个键值对(Python字典)
自然地,推断其体重在43~48之间,但是还需要定量计算体重预测值。
由于57到56、58的距离一样,所以一种方法是取它们对应体重的平均值。
因为57距离56、58最近,我们自然会非常“注意”它们,所以分给它们的注意力权重各为0.5。不过没有用上其它的(Key,Value),似乎应该调整一下注意力权重,但权重如何计算?
假设用a(q,k)来表示q与k对应的注意力权重,则体重预测值f(q)为
a是任意能刻画相关性的函微,但需要归一化,我们以高斯核(注意力分数)为例(包括softmax函数) 。
通过这种方式我们就可以求得体重估计值,这也就是注意力机制(Attention)。
所以把上面的q叫做query(请求),k叫做key(键),v叫做value(值) 。
q、k、v都为多维的情况也是类似的 ——假设现在给出的q是二维的
由于q1和k1都是二维向量
注意力分数a(q,ki)可以是以下几种
以点积模型为例
q2也是类似的,不再赘述
为了方便,用矩阵来表示
为了缓解梯度消失的问题,还会除以一个特征维度
把这一系列操作形象地称为缩放点积注意力模型(scaled dot-product attention)
4.如果Q、K、V是同一个矩阵会发生什么?
没错,那就是自注意力(Self-Attention)
用X来表示这个矩阵
则可以表示为如下式子
但在实际运用中可能会对X先做不同的线性变换再输入,比如(Transformer)模型
这可能是因为X转换空间后能更加专注注意力的学习。