文章目录
前言
本文为自己自学内容的记录,其中多有借鉴别人博客的地方,一并在参考文献中给出链接。其中内容有理解不到位的地方,请各位大佬在评论区给出修改意见,感恩🌹
一、在判断词性(Part-of-Speech,POS)任务中,为什么倾向于使用Self-attention,而不是Fully Connected Neural Networks(FCNNs).
以 I saw a saw(我看见一把锯子)为例,如果使用FCNNs,则每次输入一个词的向量,输出对词性的判断,对于前面的句子来说就会有一个问题,因为两个saw是同一个词,那么神经网络输出的词性判断也应该一样。但实际上,第一个saw是动词,第二个是名词。为了避免这个问题的出现,我们需要让FCNNs考虑上下文的资讯,即输入Window的大小(如下),但对于某些问题,只考虑一个window的大小是
不够的,需要考虑整个sequence的长度,如果让window大到足以包含整个sequence,这个问题就会解决,但随之而来会有其他的问题:1.不同的sequence长短不一,window要开到多大?2.window太大的话,FCNNs不仅参数量很大,而且很容易overfitting。那有没有更好的方法考虑整个sequence的资讯呢?这就要用到Self-attention。
二、介绍Self-attention
1.工作原理:
1.输入表示:首先,将序列中的每个元素转换为一个高维空间的向量表示,这些向量通常是通过嵌入层(Embedding Layer)得到的。
2.得分计算:对于序列中的每个元素,self-attention机制会计算它与序列中其他元素之间的相似度或“注意力得分”。这通常通过计算元素之间的点积来完成,并且可以应用缩放因子以避免梯度消失或爆炸问题。
3.权重归一化:通过softmax函数对这些得分进行归一化,使得每个元素对其他元素的贡献总和为1。这些归一化的得分代表了模型在考虑每个元素时应该给予其他元素多少“注意力”。
4.加权求和:使用上一步得到的注意力权重,对所有元素的向量表示进行加权求和,得到一个加权的组合表示。这个组合表示捕捉了序列中所有元素对当前元素的贡献。
5.输出表示:最后,通常会对加权组合进行一些变换(如通过一个全连接层),以产生最终的输出表示,这个表示现在融合了整个序列的上下文信息。
2.self-attention运作过程:
***1.输入表示:***输入的可能是network的input也可能是hidden layer的output。
2.得分计算:
b1–b4分别考虑了a1–a4,即输出的每一个向量都考虑了输入的每一个向量。以b1为例,看输出向量如何产生。根据a1,找出sequence里面与a1相关的向量(哪个向量对输出a1的label比较重要),每个向量与a1的关联程度用一个数值α(attention score)来表示,下面有两种方法计算α的数值,常见的是Dot-product。将输入的两个向量分别乘上Wq和Wk两个矩阵,产生q,k,q,k再进行点乘,产生α,按照这种方法,可以计算出α1.1,α1.2,α1.3,α1.4
3.权重归一化:softmax
4.加权求和:根据得到的α’抽取sequence里面重要的资讯,即哪些向量与a1的关联性最强。让每个向量都与Wv相乘,得到新的向量v1,v2,v3,v4。分别再与得到的α相乘,再加起来,得到b1,同理可以得到b2,b3,b4(同时产生)。如下图所示:
5.输出表示:
3.self-attention运作过程(矩阵乘法):
3.1:得到Q,K,V
将输入的每个向量拼在一起(矩阵I),分别与三个矩阵Wq,Wk,Wv做矩阵乘法,得到三个矩阵Q,K,V。
3.2:得到α(attention):
对K进行转置,使column变成row,再与Q相乘,得到A,对A中的每一列进行softmax,得到A’。
3.3:得到b:
三、介绍Multi-head Self-attention(2 heads as example )
1. Multi-head Self-attention相比于Self-attention的优势:
Multi-head Self-attention 是对 Self-attention 机制的一个扩展,旨在提高模型捕获序列中不同类型信息的能力。在仅使用单一注意力“头”进行模型训练时,模型可能会专注于序列中的特定部分,而忽略其他重要的信息。通过引入 Multi-head Self-attention,模型能够同时从多个不同的角度或“头”探索和学习输入数据,其优点主要有:
-
多样化的注意力分布:不同的“头”可以学会关注序列的不同部分。比如,在处理自然语言的任务中,一个头可能专注于捕捉语法结构,而另一个头则可能关注词义信息。这样,模型就可以更全面地理解和表示输入数据。
-
提高表示能力:通过并行使用多个注意力机制,模型可以在同一时间学习到更加复杂和丰富的数据表示。这种方式允许模型更好地捕捉序列中的细微差别和复杂的依赖关系。
-
增加模型的灵活性:在不同的任务或数据集上,不同类型的信息可能具有不同的重要性。Multi-head Self-attention 使得模型能够更灵活地适应这些变化,因为它可以通过调整不同头的权重来重点关注最相关的信息。
-
并行处理能力:由于每个头可以独立计算,这使得 Multi-head Self-attention 能够很自然地利用现代计算架构(如GPU)进行并行处理,从而提高模型的训练和推理效率。
-
改善长距离依赖问题:在长序列处理中,单一的注意力机制可能难以捕捉远距离的依赖关系。通过使用多头,模型可以更好地捕获这些长距离依赖,因为不同的头可以学会关注序列的不同范围内的信息。
2.Multi-head Self-attention运作过程:
qi乘上不同的矩阵,得到qi,1和qi,2;同理,k,v也同样操作。再根据与Self-attention同样的操作,求出bi,1、bi,2。将bi1,bi2接起来,乘上Wo,得到bi。
四、介绍Positional Encoding
一直到现在,没有涉及到位置信息。如果想把位置信息加入,则需要Positional Encoding技术。为每一个位置设定一个向量ei,将ei加到ai上面。