摘要
本周课程介绍了自注意力机制(Self-Attention)的基本概念与应用场景。自注意力机制适用于处理可变长度的序列输入,如文本、语音和图结构数据。其核心思想是通过计算输入序列中每个元素与其他元素之间的关联性(Attention Score),动态地聚合全局信息,生成每个位置对应的输出向量。本文详细讲解了自注意力机制的计算过程,包括查询(Query)、键(Key)、值(Value)的生成、注意力分数的计算、多头注意力机制(Multi-head Self-Attention)以及位置编码(Positional Encoding)的作用。最后,将自注意力机制与卷积神经网络(CNN)和循环神经网络(RNN)进行对比,分析其优劣与适用场景。
Abstract
This week's lesson introduces the basic concepts and applications of the self-attention mechanism. Self-attention is suitable for processing variable-length sequence inputs, such as text, audio, and graph-structured data. Its core idea is to compute the relevance (Attention Score) between each element in the input sequence and all other elements, dynamically aggregating global information to generate output vectors for each position. This document explains in detail the computational process of self-attention, including the generation of Query, Key, and Value, the calculation of attention scores, the multi-head self-attention mechanism, and the role of positional encoding. Finally, self-attention is compared with convolutional neural networks (CNN) and recurrent neural networks (RNN), analyzing their strengths, weaknesses, and applicable scenarios.
一.自注意力机制的输入
学习完CNN之后,本周学习另外一个常见的网络架构自注意力机制(Self-Attention)。到目前学习,前面所学的network的输入都是输入一个向量,当遇到复杂情况要输入一组向量而且向量长度会改变时,就要用到自注意力机制。
1.文本处理
在自然语言处理等任务中,输入往往是可变长度的序列,例如一个句子。由于每个句子的长度可能不同,我们通常将每个单词转换为对应的向量表示。因此,模型的输入实际上是一组数量不定的向量,其长度随输入序列的变化而变化。
其中对于如何将一个单词转化成一个向量,最简单的方法是One-hot Encoding(独热编码),可以一个向量表示一个单词,但是单个向量的长度是所有词汇的总数量,并且向量中是没有任何语义关系的。
所以有另外一个方法就是Word Embedding(词嵌入),其会给每个单词一个向量,而这个向量具有语义信息的。
2.音频处理
除了文本处理之外,音频处理也常以向量序列作为输入。例如,可从一段音频中截取一个固定时长的区间,该区间称为“窗口”(window),通常将其长度设置为25毫秒。将窗口内的音频信号转换为一个向量的过程称为“帧化”(framing),所得到的向量称为“帧”(frame)。为覆盖整个音频信号,窗口会以一定步长向右移动,常用的移动步长为10毫秒。
3.图
此外,一个图也是一组向量,就如社交关系网,以人为结点,节点之间的连线为两者的关系。我们可以将每个节点看作是一个向量。
分子问题也可以看作图。
二.自注意力机制的输出
前面了解了输入是一组向量,它可以是文字,可以是语音也可以是一个图。对于这些输入,自注意力机制的输入有三种可能性。
①每个向量都有一个标签
当模型收到四个输入时,其输出就要是四个标签。就如在文字处理中POS tagging(词性标注),对于输入的一段文本,对其中单词进行词性标注,由此就输出各个单词的词性。如下音频处理和图中也都有此情况。
②整个序列只有一个标签
就如文字处理中的sentiment analysis(情感分析),输入一段话判断这段话是否积极。其可应用于对于产品意见分析中。在音频处理中可以通过分型当前说话的是哪个发言人。
③标签数未知
这种情况称为序列到序列,在这种情况下是根据具体情况选择输出的标签数。
本周就学习第一个类型,这种类型又称为序列标注(Sequence Labeling)。
三.自注意力机制原理
1.运行方式
Self-attention的运行方式是其输入是一整个序列的信息,然后输入几个向量,其就输出几个向量。
其中黑色方框的向量是通过考虑整个序列之后才得到的向量,然后将得到的向量输入到全连接网络最后得到相应的结果。由此全连接网络就不是只考虑部分范围,而是整个序列的内容。
而自注意力机制不是只能用一次,而是可以叠加多次,比如和全连接网络交替使用,如下:
2.运行原理
以ai表示向自注意力机制的输入,它可能是整个神经网络的输入,也有可能某个隐藏层的输出。同时将bi表示其输出,bi是通过考虑了所有的ai才生成的。
那现在我们就开始了解怎么产生b1的:
根据a1找出序列中与其相关的其他向量,再将每个向量与a1的关联程度用α表示。如何决定如a1与a4之间关系程度,这就需要一个计算attention的模组。
如常见的Dot-product,其是将输入的两个向量分别乘以不同的矩阵Wq和Wk,接着就得到q和k这两个向量,再将q和k做内积就得到α。
计算α也有其他方式就如Additive,其开始也是两个向量分别与Wq和Wk矩阵相乘,得到的两个向量再串起来后输入到激活函数,其输出后再通过转换就得到了α。
而下面学习的用到的都是Dot-product方法。在注意力机制中为了计算a1与其他的关系量,就要将a1分别与a2,a3,a4计算关联性,其中α也被称为关系分(attention score),如下:
同时a1也会与自己做关联性,接着将得到的不同α后,将其输入到Soft-max(这个位置不一定只能用Soft-max也可用其他方法),再得到α’。
接着再根据α’去抽取序列中重要信息,如何抽取重要信息,我们会将a1到a4每个向量乘上Wv得到新的向量v,然后将每个对应的向量v乘上对应的α’然后再加起来便得到b1,同理我们便可以得到b2到b4。
接下来我们从矩阵乘法的角度进行理解。通过前面的了解晓得每个a都要分别产生q、k、v,由此可以将ai组合起来为I矩阵与Wq相乘得到q1到q4用矩阵Q表示。
同理对k和v进行相同操作,如下:
接着再每一个q与每一个k做内积得到关系分也就是α。
其中要对K做矩阵转置,然后再将得到的矩阵A通过标准化如soft max得到A’,A’再与V矩阵相乘就得到了O(b1 b2 b3 b4)矩阵。
简单描述如下:
所以通过学习发现在这些矩阵中只有Wq、Wk以及Wv这三个矩阵是未知的,其他矩阵是没有未知数的。而这三者是要通过训练数据得到的。
而注意力机制有个进阶版多头自注意力机制(Multi-head Self-attention),在注意力机制中我们是通过q得到相关k的,但是相关是有不同的形式,不同的定义。所以不能只有有个q,而是需要多个q,不同的q负责不同种类的相关性。接下来的计算就和之前一样。
接着再将bi1与bi2接起来通过转换便得到bi,再送到下一步去。
学习到目前位置,我们发现注意力机制中少了位置信息,就如在词性标记中晓得是开头位置则该词词性为动词的可能性就较低。所以在做注意力机制时,如果觉得位置信息重要,则就要将其添加进去。
这就要用到位置编码(Positional Encoding)的技术,为每一个位置设定一个向量用ei表示,其中i表示的是位置,然后再将ei加到ai上就完成了。
四.注意力机制的运用
注意力机制在Natural Language Processing(NLP,自然语言处理)运用的很广泛。其也可以用在其他方面,比如在做语音时也可以用注意力机制。
正常情况会需要很大的存储,这时可以用截断自注意力(Truncated Self-attention)方法,就可以不用看一整句话,看一个小范围就可。
其还可以用在影像上,我们目前学习到的注意力机制的输入适用范围是一组向量。而在学习CNN是,就了解到一个图片就是一个很长的向量,就如下我们可以将一个图片看作是50个三维的向量。
所以这个影像既然是一组向量,那其就可以使用注意力机制,来处理一张图片。
五.注意力机制与其他模型对比
1.注意力机制与卷积神经网络(CNN)
①差异
若用注意力机制处理一张图片,以图中红色方框为参考对象,该像素产生查询,其他像素产生键,所以在做内积时,我们考虑的不是小部分,而是整张图片。而CNN是划出一个感受域,每个神经元只考虑对应感受域里的检测。同时通过实验对比发现CNN对于数据较少时效果较好,而当数据较多时注意力机制表现得较好。
②联系
所以两者相比较可以发现CNN是一种简化版的self attention。
其关系可以表示如下:
2.注意力机制与循环神经网络(RNN)
首先了解RNN,其和注意力机制一样其输入是一个序列,并且有一个用来存储的向量和一个RNN的块,这个RNN块得到内存中的向量和第一个输入向量后将得到的输出向量,输入到全连接网络中去完成想要完成的预测。接着RNN模型当序列中第二个向量输入时再加上上一个RNN块的输出向量,在产生新的向量。如此反复。
①差异
注意力机制的每一个输出向量都考虑了整个输入序列,而RNN中的只考虑了其左边的已经输入的向量。其主要区别是RNN最右侧的输出必须要最左端的向量存储并一直到最后时间点,而注意力机制没有这个问题,并且RNN的输出向量是有顺序的,如上必须从左向右一个一个输出,而注意力机制着没有顺序要求。
②联系
对比注意力机制发现两者机制其实也非常相似,输入都是一组向量,而且输出的也都是一组向量,并且都将输出的向量输入到全连接网络进行进一步处理。
总结
自注意力机制是一种强大的序列建模工具,能够有效处理长度可变的输入序列,广泛应用于自然语言处理、语音识别和图神经网络等领域。其核心在于通过查询、键、值三元组计算注意力分数,实现全局信息的动态聚合,从而克服了传统循环神经网络(RNN)的长程依赖问题和卷积神经网络(CNN)的局部感受野限制。多头注意力机制进一步增强了模型捕捉不同语义关系的能力,而位置编码则弥补了自注意力机制本身对位置信息不敏感的缺陷。与CNN和RNN相比,自注意力机制在长序列建模和并行计算方面表现出显著优势,尤其在数据充足时表现更佳。未来,自注意力机制将继续作为Transformer等主流模型的核心组件,推动序列建模任务的发展。
暂无评论内容