当前位置:   article > 正文

Transformer神经网络学习笔记——基本介绍和自注意力机制_transform神经网络

transform神经网络

(笔记参考来源:强烈推荐!台大李宏毅自注意力机制和Transformer详解!_哔哩哔哩_bilibili

Transformer神经网络的目的:输入一连串大小不定的向量,输出一系列类别或标量。

经典应用1——文字处理:将每个词汇通过如One-hot Encoding(每个词汇都是一个特定编码,该方法缺点是向量无法表示词汇间的关系),Word Embedding(意义相近的词汇其向量相近)等方式转换成一个向量,这样文字处理问题就变为了大小不定的向量集处理问题。

经典应用2——声音处理:将一段固定时间长度的声音信号通过采样的方式转化为一个向量,而一段声音就是多个声音段的组合,从而可以被转化为一个向量集。

经典应用3:图结构处理,将每个节点和其信息看作一个向量。

Transformer的输出:有三种可能,a.每个向量对应一个标签(标量或类别),可应用于在文字处理(如词性标注,给每个词标注其类别),语音处理(每段声音的音标划分),社交网络(每个用户的用户画像的构建)等方面;b.向量集对应一个标签,可应用于文字理解,语者辨认,分子性质分析等。c.输出不定数目的标签,数目由机器自己决定(如文字翻译,语音翻译等)。下文将以第一种情形为重点。

Seq2Seq问题最简单的解法:将每个向量输入到一个全连接网络,输出一个对应标签,缺点是无法学习输入的上下文关系,这在文字处理等方面会造成很大麻烦。

将向量前后一定范围内的向量(这个范围被称为window)串联起来,输入到全连接网络中,以使网络能够学习上下文关系。但是这种做法仍然有极限,最大的问题是由于集合大小不同,导致window长度难以确定。

Self-attention机制:会获得一整个向量集的数据,并为每个向量输出一个带有上下文信息的向量,再将这个向量输入到一个全连接网络中获得结果。

self-attention是可以叠加的,其可以与全连接层交替使用,使结果更加准确。采用这种结构的文章中最有名的就是Transformer神经网络。

self-attention的实现方式

面对某个特定向量(以a1为例),首先寻找其它向量与a1的关联程度,这一相关度通过一个标量α1来表示。这一过程由一个计算相关度的模组来表示:输入为两个向量,输出为一个相关度。这有两种实现方法。

a.Dot-product,输入的两个向量分别乘以两个不同的矩阵Wq和Wk,再将获得的两个向量点乘获得相关度α。

b.Additive,在获得经Wq和Wk处理后的两个向量后将它们相加,经过一个tanh的非线性处理后乘以另一个矩阵W,最后获得相关度α。下面的讨论中以前者为例。

待转化向量a1本身乘以Wq获得的向量被称为query,而其它向量乘以Wk后获得的向量被称为key,而query和key相乘获得两个向量间的attention score。有时向量也需要和自身查询关联性。将结果共同通过Softmax处理,并最终输出待查询向量q和被查询向量kn之间的关联度。

Soft-max处理的意义:其实Relu等也可以,但Softmax结果一般来说最好。

结合向量间的关联性:接下来需要根据前面求得的attention score来以a1为核心综合其它向量。所有基础向量乘以矩阵Wv获得向量vi,该向量被称为value。vi和之前计算出的各自的attention score相乘,再将所有结果相加获得最终结果b1,b1就是a1在self attention处理后的结果。

整个计算过程并非是依次进行的,而是可以并行的。这种并行性通过矩阵来实现。

整个过程的矩阵运算表示:将输入的a1~a4拼成输入矩阵i,获得query,key和value的过程相当于I分别乘以查询矩阵Wq,键矩阵Wk和值矩阵Wv的过程。然后,查询矩阵和键矩阵相乘并做归一化操作后获得注意力矩阵A,A和V相乘最终获得经注意力机制处理后的输出矩阵O。这其中, Wq,Wk和Wv是需要学习的参数。

Multi-head Self-attention :相关性可能不止一个方面,为了考虑不同方面的相关性,Multi-head Self -attention被提出。在这一机制中,每个输入向量ai会产生复数个query,key和value,并分别产生不同的输出b(i,j)。最后每个bi集合会被拼接位矩阵并乘以一个输出矩阵Wo,获得最终经注意力机制处理后的向量bi。

目前的问题:自注意力机制并未考虑到输入向量在序列中的位置带来的影响,这种设计会在一些应用中带来问题。

位置编码(Positional Encoding):为每个不同的位置设定一个特定的向量ei,并将ei加到ai上。下面是一个人工设置的例子,其中每列位置向量可视化后如下图所示。位置编码有各种模式,这种位置编码也可以通过学习来获得。

Self-attention在自然语言处理中应用很广,同时也可以被用于语音处理。如Truncated Self-attention,不需要考虑一整个句子,而只考虑句子中的一小部分做self-attention。

Self-attention也可被用于图像上。一张图片也可以被看作多个向量的集合:将每个像素看作一个1*3的向量(三通道图像)。

Self-attention和CNN的差异和关联性:CNN可看作一个简化版的self-attention:CNN对于每个像素只考虑感受野内的像素关联性,而self-attention则考虑整个图像。已有论文证明cnn就是self-attention的特例。

研究表明,训练数据较少的时候,CNN效果比较好;而数据比较多的时候Self-attention效果比较好。

Self-attention和RNN对比:RNN会将前一时间点的输出内容和当前时间点的内容同时作为输入,获得新的输出。它跟Self-attention非常像,它们的输入都是一个向量序列,而且中间输出都会被输入到一个全连接层中获得最终输出。不同的是,Self-attention在抽取相关度上更加容易,且RNN不能并行地产生结果。因此,运算效率上Self-attention会比RNN更好。有论文证明,RNN实际上是self-attention机制上加一些限制的结果。

Self-attention在图结构上的使用:图结构需要考虑结点本身的信息和其连接关系(关联性),这种性质可以使机器不用计算关联度而直接获得Attention Matrix。这实际上是一种GNN的类型。

Self-attention有非常多的变形:该机制最大问题是其运算量大,因此为了解决这个问题产生了各种各样的变种。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/652792
推荐阅读
相关标签
  

闽ICP备14008679号