目录
Lecture3的时候讲了CNN,现在来讲另外一个常见的Network架构——Self-attention。
-
1. Sophisticated input
到目前为止,学习过的Network的Input都是一个向量。那输入也可以是一排向量,而且输入的向量的数目可以改变。
-
2. Output
输入(可以是文字、语音、图片)是一堆向量的时候,输出可能有三种情况。如下图,这个笔记会focus on第一种输出情况——Each vector has a label。这种输入和输出数目一样多的状况,叫做Sequence Labeling。
-
3. Self_attention
对于某些Sequence Labeling的任务,需要考虑一整个Sequence才能解决,这就要用到Self_attention的技术。
Self_attention的运作方式:Self_attention会接收一整个sequence的资讯,input几个vector,Self_attention就会输出几个vector。比如下图,输入4个vector,会输出4个vector,4个输出的vector都是考虑一整个sequence后才得到的。把这些有考虑整个句子的vector再放进FC的Network,然后得到结果。
有了Self_attention的方法后,FC的Network就不是只考虑一个非常小的范围,而是能够考虑到整个sequence的资讯。
Self_attention可以叠加很多次,FC的Network跟Self_attention可以交替使用,如下图:
Self_attention具体运作方式如下:
下面以b1为例讲解如何由a产生b,首先是寻找a1与a1~a4之间的relevant的系数α。用一些方法找出a1和ai之间relevant的系数,即α的值,这里我们选取Dot-product这种方法:
把计算出的α1~α4的值过一个Soft-max(也可以用Relu之类的别的方法),得到α'i,后续计算过程如下图:
下面从矩阵角度来说明Self_attention的运算过程,首先是由a通过三个矩阵运算得到q、k、v:
接下来是每一个q会去跟每一个k计算inner product,得到attention的分数,这里矩阵A里面的元素就是这些分数,然后通过softmax得到A’:
把A‘矩阵乘上V矩阵得到O矩阵,O矩阵里的每一个column就是Self-attention的输出,也就是b1到b4:
总结一下上面的矩阵运算过程。如下图,在Self-attention layer里面,唯一需要学习的参数就是Wq,Wk,Wv,只有Wq,Wk,Wv是通过training data找出来的:
Self-attention的变形——Multi-head Self-attention,我们可以有多个q,不同的q负责不同种类的相关性。下面以两个q为例:
-
4. Positional Enconding
上面对Self-attention运作方式的讨论中,完全没有把位置资讯考虑进去,但是位置资讯对某些问题是十分重要的。下面通过一个positional encoding的技术,把位置资讯放到Self_attention中去:
-
5. Some applications
Self-attention for speech
Self-attention for Image
Self-attention v.s. CNN
CNN是Self-attention的一个subset
Self-attention v.s. RNN
Self-attention for Graph
当我们把Self-attention按照下图右边的限制用在Graph上的时候,其实就是一种Graph Neural Network (GNN)。