分类目录:《深入理解深度学习》总目录
在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为, 然后将不同的行为作为知识组合起来, 捕获序列内各种范围的依赖关系 (例如,短距离依赖和长距离依赖关系)。 因此,允许注意力机制组合使用查询、键和值的不同子空间表示(Representation Subspaces)可能是有益的。
为此,与其只使用单独一个注意力汇聚, 我们可以用独立学习得到的组不同的 线性投影(Linear Projections)来变换查询、键和值。 然后,这组变换后的查询、键和值将并行地送到注意力汇聚中。 最后,将这个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性投影进行变换, 以产生最终输出。 这种设计被称为多头注意力(Multihead Attention)。 对于个注意力汇聚输出,每一个注意力汇聚都被称作一个头(Head)。 下图展示了使用全连接层来实现可学习的线性变换的多头注意力:
给定查询 q ∈ R d q q\in R^{d_q} q∈Rdq、 键 k ∈ R d k k\in R^{d_k} k∈Rdk和值 v ∈ R d v v\in R^{d_v} v∈Rdv, 每个注意力头 h i ( i = 1 , 2 , ⋯ , h ) h_i(i=1, 2, \cdots, h) hi(i=1,2,⋯,h)的计算方法为:
h i = f ( W i ( q ) q , W i ( k ) k , W i ( v ) v ) ∈ R p v h_i=f(W_i^{(q)}q, W_i^{(k)}k, W_i^{(v)}v)\in R^{p_v} hi=f(Wi(q)q,Wi(k)k,Wi(v)v)∈Rpv
其中,可学习的参数包括 W i ( q ) ∈ R p q × d q W_i^{(q)}\in R^{p_q\times d_q} Wi(q)∈Rpq×dq、 W i ( k ) ∈ R p k × d k W_i^{(k)}\in R^{p_k\times d_k} Wi(k)∈Rpk×dk和 W i ( v ) ∈ R p v × d v W_i^{(v)}\in R^{p_v\times d_v} Wi(v)∈Rpv×dv以及代表注意力汇聚的函数 f f f。 f f f可以是《深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)》中的加性注意力和缩放点积注意力。 多头注意力的输出需要经过另一个线性转换, 它对应着 h h h个头连结后的结果,因此其可学习参数是 W i ( o ) ∈ R p p × h p v W_i^{(o)}\in R^{p_p\times h_{p_v}} Wi(o)∈Rpp×hpv:
W o [ h 1 h 2 ⋮ h h ] ∈ R p o W_o \begin{gather*} \begin{bmatrix} h_1 \\ h_2 \\ \vdots \\ h_h \end{bmatrix} \end{gather*} \in R^{p_o} Wo h1h2⋮hh ∈Rpo
基于这种设计,每个头都可能会关注输入的不同部分, 可以表示比简单加权平均值更复杂的函数。
参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.