自注意力机制(常见的神经网络结构)
上节课我们已经讲述过 CNN 卷积神经网络 和 spatial transformer 网络。这次讲述一个其他的常用神经网络自注意力机制神经网络。
对于输入的变量长度不一的时候,采用frame的形式,进行裁剪设计。
对于模型输入输出,存在几种情况:
(1) n个输入对应n个输出
(2) n个输入对应一个输出
(3) n个输入对应多个输出
对于不定长输入数据的时候,可以进行裁剪变帧进行输入,但是对于模型的训练就是需要查看前后frame的关系,进行结果的关联,如何实现的这个关联,就是使用self-attention机制进行设计。
self-attention作为一个层,进行前后输入数据的关联。其实本质上就是全部关联的过程。
实现self-attention关联程度的两种方式,其中对于输入的每个变量与其它变量的关联程度使用阿法表示,如上图,计算这个程度的方式有两种。
左边的方法也是常用在transformer的方法。而左边的方式计算过程如下:
计算出变量的q 然后计算和其他变量的关联性,最后做一个softmax
对于计算过程,使用矩阵计算能够更快速的计算
尝试使用多个head的超参数设定,来设计关联程度,计算过程就是多了对应的head参数矩阵计算。
但是对于上面讲述的算法中,没有关于位置信息的加入,假如输入的变量前后是具有关联性的话,就需要使用位置信息编码:
对不同位置都有不同的e,但是是通过人为设定的。
对于长段的输入的时候,可能存在导致attention matrix过大,所以使用小个范围进行设计。
self-attention可以用在语音输入、图片输入。
语音输入对于每个frame进行处理,而对于图片输入,可以进行多通道的关联进行特征提取。
self-attention 和 CNN
CNN是self-attention的特例,self-attention弹性比较大,对于数据量较大的时候训练效果会更好。