【人工智能概论】 自注意力机制(Self-Attention)
文章目录
一.为什么要引入自注意力机制?其能用于何处?
- 引入自注意力机制的最初想法是:处理向量序列,且这个向量序列的长度一般是不固定的。如,NLP领域相关任务。
- 常见的序列表示法
- one-hot编码
- word-embedding:包含语义信息,相近语义的向量(词)在欧式空间上更为接近。
- 展开举例
- 对一句话中的每个词进行词性判别。(n V n)
- 语音识别,机器翻译。(n V m)(seq2seq)
- Graph也是向量,如社交网络图,每个节点即一个人,节点间有关系,每个节点可以用一个向量来表示,向量中包含个人信息,可以推断两个节点间的关系。(n V 1)
- 一个分子:分子上每个原子都可以用向量来表示,且各个分子间是有关系的,比如判别这个分子对应的是不是新冠抗原。(n V 1)
不难发现实际上自注意力机制的用途是是十分广泛的,不仅限于对文字,语言的处理,对各种向量序列都有一定的应用潜力。
- 接下来以Lequence Labeling为例
- 对一句话中的每个词做词性判断,显然如果对每个词做全链接分类也是能有一定结果的,但这样是孤立的,缺少上下文信息的。如,“意思一下,小意思。” 中每个意思是什么词性。
- 要引入下文信息,或许可以用RNN相关技术解决,但RNN相关技术的
并行运算
与长程依赖
问题是十分严重的。 - 这就要引出本文的主题——自注意力机制(Self-Attention)
二. 引入自注意力机制后例子的简要流程
- 如上图,这样得到的结果不再是类似RNN技术下,只考虑小窗口信息的产物,而是完整考察了整个序列的上下文信息的结果。
- self-attention可以叠加多次
- 看不懂没关系后面才是重点。
三. 自注意力机制的工作原理
- 现在,self-attention似乎是一个黑盒子,它的效果大致如下图,输入输出是一一对应的,且输出是包含输入的上下文信息的。
- 以b1向量的生成为例来剖析self-attention。
- step1:找出输入序列里每个向量ai与a1之间的关联程度α1i(标量),例,α12表示a1与a2之间的关联度。 如何确定两个向量间的关联性?方法有很多,此处举两个常见的例子。 一般关联度α都是一个较大的数,为计算方便,一般会将它们通过softmax限制到一个较小的范围。
- step2:根据关联分数来抽取上下文信息,即得到bi。 注:vi也是类似q和k一样是Wv*ai得到的。实际上获取vi的方法也有很多,但一定要保证是与ai有关的。
至此就得到了b1,类似的b2、b3、b4也可以算得。此时bi就可以替代ai了,bi融合了上下文信息与本义,相对于ai来说有很大优势。
与RNN系列不同,b1到b4的计算不用按顺序计算,因此可以并行运算。又b1到b4的生成与整个序列中的每个向量相关,可以有效的避免RNN系列的长程依赖问题。
上面所涉及的运算大多都是矩阵运算,Wq、Wk、Wv都是待训练参数矩阵,它们对每个输入向量都共享;q、k、v、a、b都是向量;只有α是标量。
四.自注意力机制的矩阵运算(并行运算)
- 将输入的向量序列组成一个矩阵,例如下图。
- step1:求q、k、v
- step2:采用点乘方式求相关分数
- step3:获得输出数据
注:O中的每一列就是一个bi。
看起来很难搞实际上要学的参数只有Wq、Wk、Wv三组参数矩阵。
五.多头自注意力机制(Multi-head self-attention)简介
- 为什么用多头?什么是多头?
- 类比多个卷积核,一个卷积核抽取一种特征,同理一个头也是抽取一种相关关系。
- 实际上所谓的多头,只不过是多做几次自注意,多找几组相关关系罢了。
六.位置编码
- 尽管注意力机制能够克服RNN技术的两大缺点,但实际上此时得到的bi仍不完美,它缺少该向量在序列中的位置信息。
- 因此 ,引入一种名为Positional Encoding的技术。
- 即为每一个位置设定一个向量ei,用于记录位置信息,然后把ei和ai简单相加即可。
- 这个ei是人为设定的,而非学习所得的。(有点技术含量)
- Positional Encoding技术有很多种,但目前没有明确的最优方法。
七.self-attention的衍生技术(应用)
- Truncated self-attention
- 其对处理语音信号有不错的效果,为应对语音序列过长的特点,它采用了窗口的思路,每次只截取部分做自注意,算是一种妥协的产物,但对于长序列问题来说确实是行之有效的。
- Detection Ttansformer(DETR)——应用于图像领域的self-attention
- 众所周知,self-attention是处理向量序列的,而图像展平后,也可以视为向量序列,每个向量即为一个像素(包含RGB通道信息),图片就是由这样的向量组成的序列。
- 注:此处也是忽略了位置信息,也可以引入Postional Encoding
- Detection Ttansformer(DETR)就有类似的想法。
- 图片做序列不是没有依据的,拉平用DNN做分类时,不就是把图片当序列了么。
八.self-attention V.S. 不同的网络
- self-attention V.S. CNN
- self-attention比CNN考虑的范围更加广泛、全面,因为它考虑的是整张图的信息,而非CNN那种人为设定好的窗口大小。
- 但self-attention会受到数据量的约束,CNN、self-attention都有巨大的应用空间。
- CNN可以视为简化版的self-attention。
- self-attention V.S. RNN
- 前者基本可以很好的完成后者的所有工作,因此毫无可比性。
- self-attention V.S. graph
- 显然self-attention不仅可以知道每个节点(向量)的信息,还可以很好的记录节点间的关系。
- 而如果同时引入graph的信息,关联性获取可能变得容易。
- 例,已知下图,显然5只与2、4、7直接有关,因此对于5来说可以只求它们之间的注意力分数。
- 这也是一种GNN
九.自注意力机制的小小展望
- 如何减少其计算量,Positional Encoding都是可以深入探索的。
本文转载自: https://blog.csdn.net/qq_44928822/article/details/129046442
版权归原作者 小白的努力探索 所有, 如有侵权,请联系我们删除。
版权归原作者 小白的努力探索 所有, 如有侵权,请联系我们删除。