0


【人工智能概论】 自注意力机制(Self-Attention)

【人工智能概论】 自注意力机制(Self-Attention)

文章目录


一.为什么要引入自注意力机制?其能用于何处?

  1. 引入自注意力机制的最初想法是:处理向量序列,且这个向量序列的长度一般是不固定的。如,NLP领域相关任务。在这里插入图片描述
  2. 常见的序列表示法
  • one-hot编码
  • word-embedding:包含语义信息,相近语义的向量(词)在欧式空间上更为接近。
  1. 展开举例
  • 对一句话中的每个词进行词性判别。(n V n)
  • 语音识别,机器翻译。(n V m)(seq2seq)
  • Graph也是向量,如社交网络图,每个节点即一个人,节点间有关系,每个节点可以用一个向量来表示,向量中包含个人信息,可以推断两个节点间的关系。(n V 1)
  • 一个分子:分子上每个原子都可以用向量来表示,且各个分子间是有关系的,比如判别这个分子对应的是不是新冠抗原。(n V 1)
不难发现实际上自注意力机制的用途是是十分广泛的,不仅限于对文字,语言的处理,对各种向量序列都有一定的应用潜力。
  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的衍生技术(应用)

  1. Truncated self-attention
  • 其对处理语音信号有不错的效果,为应对语音序列过长的特点,它采用了窗口的思路,每次只截取部分做自注意,算是一种妥协的产物,但对于长序列问题来说确实是行之有效的。
  1. Detection Ttansformer(DETR)——应用于图像领域的self-attention
  • 众所周知,self-attention是处理向量序列的,而图像展平后,也可以视为向量序列,每个向量即为一个像素(包含RGB通道信息),图片就是由这样的向量组成的序列。
  • 注:此处也是忽略了位置信息,也可以引入Postional Encoding
  • Detection Ttansformer(DETR)就有类似的想法。
  • 图片做序列不是没有依据的,拉平用DNN做分类时,不就是把图片当序列了么。

八.self-attention V.S. 不同的网络

  1. self-attention V.S. CNN
  • self-attention比CNN考虑的范围更加广泛、全面,因为它考虑的是整张图的信息,而非CNN那种人为设定好的窗口大小。
  • 但self-attention会受到数据量的约束,CNN、self-attention都有巨大的应用空间。
  • CNN可以视为简化版的self-attention。
  1. self-attention V.S. RNN
  • 前者基本可以很好的完成后者的所有工作,因此毫无可比性。
  1. 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
版权归原作者 小白的努力探索 所有, 如有侵权,请联系我们删除。

“【人工智能概论】 自注意力机制(Self-Attention)”的评论:

还没有评论