最后更新于
最后更新于
Bert中的self-attention使用的是Multi-Head Attention.
记序列的长度为, 每个token向量对应的hidden size
为. 整个Multi-Head Attention的计算过程如下.
Self Attention的输入为一个大小的矩阵. 这个矩阵需要分别经过三个不同的大小为的Dense, 生成Q, K, V矩阵, 对应的大小都是.
做三次大小的矩阵与大小的矩阵相乘, 这一步的时间复杂度为.
普通的Attention中, Q与K两个矩阵相乘, 得到相似度矩阵. 两者的大小都是, 矩阵相乘得到大小的相似度矩阵, 对应的时间复杂度为.
但Multi-Head Attention要先把Q, K, V分割为个head, 每个head中的hidden size记为. 然后每个head内部进行Attention的计算, 不同head之间互不干扰.
因此考虑上head, Q和K矩阵需要转换为大小的tensor, 点积得到大小的相似度矩阵, 因此这一步的时间复杂度为.
对得到的按head划分的, 大小为的相似度矩阵计算softmax, 这一步的时间复杂度为.
将大小的权值矩阵与大小的O点乘, 得到大小的输入. 这一步沿着所在的维度进行点乘, 所用的时间复杂度为.
再经过reshape变成最后的输出, 大小仍然为.
生成Q, K, V的时间复杂度为
计算相似度矩阵的时间复杂度为
Softamax计算的时间复杂度为
计算加权和的时间复杂度为
整体的时间复杂度为, 即序列长度与hidden size更大的一个占主导.