muti-head attention计算过程
时间: 2023-09-18 20:07:53 浏览: 77
Multi-head attention是Transformer模型中的一个关键组成部分,它的计算过程如下:
假设输入的是一个序列 $X$,其中每个元素 $x_i$ 的维度为$d_{model}$,序列长度为 $n$,那么首先需要对序列进行三个线性变换,得到 $Q$(query),$K$(key)和 $V$(value):
$$Q = XW_Q$$
$$K = XW_K$$
$$V = XW_V$$
其中,$W_Q$、$W_K$、$W_V$ 分别是 $d_{model} \times d_k$,$d_{model} \times d_k$ 和 $d_{model} \times d_v$ 的权重矩阵,$d_k$ 和 $d_v$ 是自定义的超参数,用来控制 $K$ 和 $V$ 的维度。
接下来,将 $Q$、$K$ 和 $V$ 分别进行切分,得到 $h$ 个头 $Q_i$、$K_i$ 和 $V_i$,每个头的维度为$d_k$ 和 $d_v$:
$$Q_i = QW_{Q_i}$$
$$K_i = KW_{K_i}$$
$$V_i = VW_{V_i}$$
其中,$W_{Q_i}$、$W_{K_i}$、$W_{V_i}$ 分别是 $d_{model} \times d_k$、$d_{model} \times d_k$ 和 $d_{model} \times d_v$ 的权重矩阵。
接下来,对每个头 $i$ 计算注意力分数 $a_i$:
$$a_i = \frac{Q_iK_i^T}{\sqrt {d_k}}$$
将 $a_i$ 进行softmax归一化,得到注意力权重 $w_i$:
$$w_i = softmax(a_i)$$
最后,将每个头的加权 $V_i$ 进行拼接,得到最终的注意力表示 $Z$:
$$Z = \sum_{i=1}^{h} w_iV_i$$
其中,$h$ 是头的个数。最终的 $Z$ 的维度为 $(n, d_{model})$。注意,$Z$ 也可以被视为一个输出序列,每个元素 $z_i$ 都是对整个输入序列的加权表示。
阅读全文