赞
踩
自注意力机制实际上是注意力机制中的一种,注意力机制:
自注意力机制实际上也是一种网络的构型,它想要解决的问题是网络接收的输入是很多向量,并且向量的大小也是不确定的情况,比如机器翻译(序列到序列的问题,机器自己决定多少个标签),词性标注(Pos tagging一个向量对应一个标签),语义分析(多个向量对应一个标签)等文字处理问题。
在文字处理中,我们对单词进行向量编码通常有两种方式:
拿词性标注举例,对一个句子来说每一个词向量对应一个标签,初始的想法是可以通过全连接神经网络,但全连接神经网络没有考虑在句子不同位置,单词可能表示不同含义的问题,并且当输入的句子很长,比如是一篇文章的时候,模型的性能下降严重。
针对全连接神经网络存在的这个问题,通过自注意力机制来解决,自注意力机制实际上是想让机器注意到整个输入中不同部分之间的相关性,它的实现方法如下:
对于每一个输入向量a,在本例中也就是每一个词向量,经过self-attention之后都输出一个向量b,这个向量b是考虑了所有的输入向量才得到的,这里有四个词向量a对应就会输出四个向量b
那么向量b是如何产生的呢?
三个W就是我们需要学习的参数
步骤2:利用得到的Q和K计算每两个输入向量之间的相关性,也就是计算attention的值α,α的计算方法有多种,通常采用点乘的方式
矩阵A中的每一个值记录了对应的两个输入向量的Attention的大小α
步骤3:对A矩阵进行softmax操作或者relu操作得到A'
步骤4:利用得到的A'和V计算每个输入向量a对应的self-attention层的输出向量b:
拿第一个向量a1对应的self-attention输出向量b1举例,它的产生过程如下:
先通过三个W矩阵生成q,k,v;然后利用q,k计算attention的值α,再把所有的α经过softmax得到α';最后对所有的v进行加权求和,权重是α',得到a1对应的self-attention输出的b1
自注意力机制虽然考虑了所有的输入向量,但没有考虑到向量的位置信息。在实际的文字处理问题中,可能在不同位置词语具有不同的性质,比如动词往往较低频率出现在句首。
有学者提出可以通过位置编码(Positional Encoding)来解决这个问题:对每一个输入向量加上一个位置向量e,位置向量的生成方式有多种,通过e来表示位置信息带入self-attention层进行计算。
Learning to Encode Position for Transformer with Continuous Dynamical Modelarxiv.org/abs/2003.09229
1.自注意力机制与CNN:
实际上,在处理图像问题时,每一个像素点都可以看成一个三维的向量,维度就是图像的通道数,所以图像也可以看成是很多向量输入到模型,自注意力机制和CNN的概念类似,都是希望网络不仅仅考虑某一个向量,也就是CNN中希望模型不仅仅考虑某一个像素点,而是让模型考虑一个正方形或者矩形的感受野(Receptive field),对于自注意力机制来说,相当于模型自己决定receptive field是怎样的形状和类型。所以其实CNN卷积神经网络是特殊情况下的一种self-attention,self-attention就是复杂版的CNN。
https://arxiv.org/abs/1911.03584arxiv.org/abs/1911.03584
2.自注意力机制与RNN
RNN和自注意力机制也类似,都是接受一批输入向量,然后输出一批向量,但RNN只能接受前面的输出作为输入,self-attention可以同时接受所有的向量作为输入,所以一定程度上说Self-attention比RNN更具效率
Attention in vision
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。