在当前的NLP领域,Transformer/BERT已然成为基础应用,而 Self-Attention 则是两者的核心部分,下面尝试用Q&A和源码的形式深入 Self-Attention 的细节。
Q&A
1、 Self-Attention 的核心是什么?
Self-Attention的核心是用文本中的其它词来增强目标词的语义表示,从而更好的利用上下文的信息。
2、Self-Attention 的时间复杂度是怎么计算的?
Self-Attention时间复杂度:O(n2⋅d)O(n^2 \cdot d)O(n2⋅d),这里,n是序列的长度,d是embedding的维度,不考虑 batch 维。
Self-Attention包括三个步骤:相似度计算,softmax和加权平均
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9SG6ZU8-1603506048428)(./picture/self_attention.png)]
它们分别的时间复杂度是:
相似度计算 可以看作大小为(n,d)(n,d)(n,d)和(d,n)(d,n)(d,n)的两个矩阵相乘:(n,d)∗(d,n)=O(n2⋅d)(n,d)*(d,n)=O(n^2 \cdot d)(n,d)∗(d,n)=O(n2⋅d),得到一个(n,n)(n,n)(n,n)的矩阵
softmax 就是直接计算了,时间复杂度为O(n2)O(n^2)O(n2)
加权平均 可以看作大小为