P6 自注意力机制
引言:
到目前为止,在预测或者图像识别(已经假设了图像大小是相等的)的任务中,都是将输入看作是一个向量,输出可能是数值(回归任务)也可能是类别(分类任务),那假如输入是一排向量或者这个向量长度是改变的呢? 例如:
输入形式
(一)句子
输入是一个句子,使用独热编码,每一个词汇是一个向量,但是独热编码会造成每一个词语之间是没有任何关系的,忽略掉了词语的语义。另一个方法是词嵌入,包含了语义,词义相近的词语可能在向量上也是相近的。
(二)声音信号
输入是一段声音信号,其实是一排向量,在声音信号上,取一段范围(如25ms),称为一个Window(声音信号),将其中的信息变为一个向量,称作一个frame(向量),然后将window移动小段距离(如10ms),不断移动直至覆盖整段声音信号,1s的声音就有100个frame。
(三)图
数据结构中的图,并非图片。例如社交网络,其中每一个节点(人)就可以看作是是一个向量,其中包含他的各种信息(如性别、年龄、工作等)、
一个分子也可以看作是一个图,其中每一个原子可以看作是一个向量,那图就是一堆向量。
输出形式
(一)多对多(相等)
每一个向量都有一个label,如果label是类别那就是分类任务,如果是数值,那就是回归任务。输入和输出的长度是一样的。比如:词性标注,给每一个单词标注词性,也就是分类。或者对声音信号进行音标识别。或者对图中每一个节点进行分类。
(二)多对一
输入是一段序列,输出是一个label,单个向量。比如情感分析,正面还是负面。语音识别发言人speaker。判断分子的亲水性如何。
(三)多对多(不定)
不知道输出多少个向量,机器自己决定。比如语音识别、翻译。
Sequence Labeling
Sequence Labeling——多对多(相等),每一个向量都有一个label。例如词性标注,对每一个词语进行词性标注。
想法:将每一个词分别作为输入,通过全连接网络。但是可能有的词语是一样的,但词性是不一样的,但是通过全连接网络,输出肯定是一样的,这样就会出错。
引入window,考虑当前想要标注词性的词语前后的词语,将考虑的范围称为window。但是有的是需要考虑整个序列,如果把window设为整个序列的长度,序列有长有短,就要看整个资料中最长的序列是多大,然后将window设为其值,就会造成参数非常大,容易过拟合。如何考虑整个sequence的信息呢?
self-attention
会考虑整个序列,输入几个vector就会输出几个vector(经过考虑整个序列得到),之后再传给全连接网络,这样给全连接网络的输入就考虑了整个序列。self-attention也可以叠加,全连接网络的输出也可以再传给self-attention,再全连接网络等。
self-attention是如何运作?
输入使用a来表示,因为self-attention前一层不一定是输入input,也有可能是隐藏层的output等已经经过处理。输出用b来表示,每一个输出都考虑了所有的输入。、
其中b1向量如何产生?
根据a1找出序列中与其相关的其他向量,因为我们希望考虑整个序列但是不希望把整个序列放在整个window中,所以找出其中与找出a1分类或者数值相关的向量。相关性用α来表示,如何计算得到?点乘,内积。
向量1与矩阵q相乘,向量2与矩阵2相乘,分别得到q向量与k向量,然后q与k点乘内积,得到数值α,就是相关度。
使用上述方法计算后得到当前向量与各个向量之间的关联度或者相关性,然后经过softmax函数得到α‘,就可以知道哪个向量与当前向量相关,再根据α抽取重要的序列信息。
然后引入wv,用来和每一个向量相乘,得到v1,v2,v3,v4,每一个再和α’相乘,最后相加得到b,和哪一个α‘最接近就说明哪一个最相关。
同理,对a2~a4进行相应操作,得到b1~b4,是同时计算同时得到的并不是依次得到。
矩阵角度理解过程(一连串的矩阵乘法):
其中需要训练得到的未知的参数只有wq、wk、wv。
到目前为止,自注意力机制中的input还没有位置信息,即不知道input在序列的哪个位置,但是比如词性标注,可能动词不容易出现在句首,需要标注位置信息时,怎么办呢?
Positional encoding
为每一个位置设定一个向量ei,比如e1~e4,加到ai上即可。
自注意力机制应用
Truncated self-attention(语音)
自注意力机制对于语音识别上的应用:在上述过程中,我们把每10ms的序列当作一个向量,那么假如输入的整个序列是一分钟或者更长那么就会造成向量非常多,计算量会非常大。因为每一个序列都会考虑整个序列中其他所有的向量,然后计算。所以在语音识别中可以只考虑计算当前向量附近局部的向量即可。
自注意力机制和CNN(图像)
自注意力机制是复杂的CNN,CNN是简化版的/受限制的自注意力机制。越有弹性的model,数据量小有更大的可能会造成过拟合,相同数据量,数据量小,CNN表现更好,数据量大时,自注意力机制表现更好。