Attention 层是用来处理序列输入的,所以它接受的输入是一个二维的的矩阵,而输出则是一个的矩阵。是输入序列的 token 个数,则是 embedding 向量的长度,则是输出的状态向量的长度。理论上 Attention 层对于没有限制,而和则是模型的超参数。
除了和以外,Attention 层还有其他超参数。
一个 Attention 层包含 3 个全连接层,分别叫做 Query、Key 和 Value,用符号、和表示。这 3 个全连接层的输入维度都是,而输出维度都是超参数,分别为、和。稍后会看到,Attention 层要求以及。
综上所述,Attention 层的超参数有、和。
我们将输入的向量依次记作、……,同理输出的向量记作、……。
推理的时候,首先要将输入向量都经过全连接层一次,得到、、等等。最终的输出是由的结果加权求和得到的:
y_i = \sum_j \alpha_{ij} V(x_j), \forall i
因为是权重,所以自然要满足:
\sum_j \alpha_{ij} = 1,\forall i
是根据和的结果得到的:
\alpha^\prime_{ij} = \frac{Q(x_i) \cdot K(x_j)}{\sqrt{D_q}}, \forall i, j
这里我用的符号是而非,因为不满足权重和为 1 的要求,因此不是最终结果。要让和为 1,使用 softmax 层处理一下即可。
(计算要除以是为了归一化。)