在Transformer模型中,多头注意力机制通过将输入嵌入分割成多个并行的“头”来处理,每个头都有自己的权重矩阵(查询、键和值矩阵),从而能够在不同的子空间上执行注意力计算。
假设原始的查询(Q)、键(K)和值(V)矩阵的维度分别是 ( d_model*n ),其中 d_model是模型的嵌入维度, n 是序列的长度。在多头注意力中,首先会将这些矩阵线性映射到 h 个不同的头部,每个头部有自己的一组权重矩阵,其中 h 是头的数量。为了保证总的模型容量不变,每个头部的维度 d_k = d_v = d_model/h)。
1. 分割嵌入:原始的Q、K、V矩阵分别被分割成 h 个部分,每个部分的维度为 d_model/h*n 。
2. 线性变换:然后,对每个部分应用线性变换(使用不同的权重矩阵),生成每个头的查询、键和值矩阵。这意味着每个头部有自己专属的 ( W^Q_i ), ( W^K_i ), 和 ( W^V_i )(对于第 i 个头),其中 ( i = 1, 2, ..., h )。
3. 计算注意力:在每个头部内,使用点积注意力公式独立计算注意力分数,即 Attention(Q_i, K_i, V_i) 这样,每个头部都会产生一个输出矩阵,尺寸为 d_model/h*n 。
4. 合并头部:所有头部的输出随后被串联(concatenated)起来,形成一个大矩阵,其尺寸为d_model*n 。这与原始的QKV矩阵的维度相同。最后,通常还会应用一个最终的线性变换(又称为输出权重矩阵),以整合所有头部的信息并产生最终的输出。
通过这种机制,多头注意力不仅在不同的表示子空间中捕获信息,还允许模型在不同的特征维度上进行并行处理,提高了模型的并行性和计算效率,同时增加了模型的表达能力。#动图详解transformer模型#
本文暂时没有评论,来添加一个吧(●'◡'●)