Attention的适用场景
给定一个 query,计算query 与 key 的相关性,然后根据query 与 key 的相关性去找到最合适的 value。举个例子:在电影推荐中。query 是某个人对电影的喜好信息(比如兴趣点、年龄、性别等)、key 是电影的类型(喜剧、年代等)、value 就是待推荐的电影。
Attention原理
在这个例子中,我们首先将只要将query和key放到同一个特征空间,然后计划query和key的相关性,那么根据相关性矩阵就能找到针对每个query的最应该推荐的电影了。具体操作如下:
首先我们要将query和key进行特征变换,使得两者的维度一致,即在同一特征空间中:
Q
=
q
u
e
r
y
×
W
,
Q
∈
R
n
×
d
Q=query \times W, Q \in R^{n \times d}
Q=query×W,Q∈Rn×d
K = k e y × W , K ∈ R z × d K=key \times W, K \in R^{z \times d} K=key×W,K∈Rz×d
其中,n代表人数,z代表总的电影数量
然后计算相关性矩阵:
R e = S o f t m a x ( Q × K T ) , R e ∈ R n × z Re= Softmax \left(Q \times K^T \right), Re \in R^{n \times z} Re=Softmax(Q×KT),Re∈Rn×z
有时候为了平衡大数据量下的梯度消失,会有略微改进[1]:
R e = S o f t m a x ( Q × K T z ) , R e ∈ R n × z Re= Softmax \left(\frac{Q \times K^T}{\sqrt{z}} \right), Re \in R^{n \times z} Re=Softmax(zQ×KT),Re∈Rn×z
这样Re每一行的最大值所在列数就是最应该推荐的电影了。
总结
简单来说,Attention的目的就是要得到所有query和所有key的相关性矩阵,过程的关键是把两者映射到同一个空间,因此映射矩阵 W W W的选取就十分重要了,在深度学习中,这个 W W W是通过参数更新来实现的。
文献参考
[1]Vaswani, A., Shazeer, N.M., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A.N., Kaiser, L., & Polosukhin, I. (2017). Attention is All you Need. Neural Information Processing Systems.