文章目录
一、Sophisticated Input
1. 到目前为止,我们network的input是一个向量,output是一个数值或者类别。
2. 现在input是一组向量,并且这组向量的大小是可变的。
二、Vector Set as Input
1. 文字处理,输入是一个句子,然后把句子中的每一个词汇用向量表示。
2. 一种方法是用One-hot Encoding把词汇表示成向量,但是这个方法存在严重问题,它假设每个词汇之间没有关系。另一种方法是用Word Embedding,在图中我们可以发现所有动物聚在一起,所有植物聚在一起,所有动词聚在一起。
3. 声音讯号,其实是一串向量,取其中一个范围window,把里面的咨询描述成一个向量frame。
4. 一个图也是一堆向量,如下图所示,每一个结点(图中的人头)可以用一个向量表示。
5. 一个分子也可以看成图片,把分子当成模型的输入,分子上的原子(图中的球状体)就是一个向量,用One-hot vector来把原子表示成向量。
三、What is the output?
1. 每一个向量都有一个label,也就是模型输入有n个向量,输出就有n个label。
1) 文字处理,现在要做POS tagging,它主要是得到词汇的词性。在图中有两个saw,一个是动词,另一个是名词,这个就是文字处理的难点。
2) 语音辨识,图中的每一个向量得到对应的音标。
3) Social network,需要得到每一个结点有哪些特性。
2. 整个sequence只有一个label。
1) Sentiment analysis,给机器一段话,判断这句话是正面还是反面。
2) 语者辨认,听一段声音讯号,判断是谁说的。
3) 给一个分子,判断它是否带有毒性等特性。
3. 输出label的数目取决于模型自己,例如语言翻译等。
四、Sequence Labeling
1. 我们用Fully-connected对输入进行处理,得到正确的输出。但是现在存在一个问题,当输入的词汇有两个saw时,输出一个是动词,另一个是名词,但实际上是不可能有同一个输入有两个不同的输出。
2. 我们可以联系上下文来解决这个问题,给Fully-connected整个window的咨询。
3. 现在某个任务需要考虑整个sequence,我们就用一个更大的window,但是这样不只是运算量大,还有可能造成overfitting。所以可以用Self-attention来解决问题。
五、Self-attention
1. Self-attention就是把整个sequence作为输入,输入多少个向量,输出也就多少个向量。然后把输出放入Fully-connected,得到最后的结果,现在的Fully-connected考虑了整个sequence。
2. Self-attention可以叠加多次使用。
3. Self-attention的input是一串vector,vector可能是整个network的input,也可能是某个hidden layer的output。如下图所示,图中的b都是考虑了所有a得出的结果。
4. 举例说明产生b1向量的过程,其它b向量的产生的过程与之类似。首先找出sequence中与a1相关的其它向量,其它向量与a1相关的程度用α表示。
5. 如下图所示,这是计算attention的模组。常见的做法是Dot-product,将输入的两个向量分别乘上两个不同的矩阵,得到q和k,q和k相乘并求和后得到相关性α。另外一种做法是Additive,将输入的两个向量分别乘上两个不同的矩阵,然后加起来输入到激活函数tanh,再经过Transform得到相关性α。
6. 如下图所示,不仅要a1和a2、a3、a4求关联性α,还要计算a1与自己的关联性α,然后对α1,1、α1,2、α1,3、α1,4求Soft-max,然后得到输出为一排α。
7. 如下图所示,我们需要根据相关性来抽取重要的咨询,把v1、v2、v3、v4分别乘上attention分数,然后加起来得到b1。
六、Self-attention
1. 如下图所示,b1-b4它们是平行的,不需要依照顺序产生,而是同时计算出来的。
2. 现在从矩阵乘法的角度说明Self-attention的运作。如下图所示,图中每一个a都会产生q、k、v,其中的q等于a乘上矩阵w,将a1-a4排列起来看作矩阵I,然后矩阵I乘上矩阵w,就得到矩阵Q(q1、q2、q3、q4),k与v的操作与之类似。
3. q1、q2、q3、q4要计算attention的分数,也可以用矩阵形式表示,然后对得到的相关性α做softmax。
4. 对每一个相关性α做softmax后,与每一个v相乘后相加就可以得到b,这个过程也可以用矩阵形式表示。
5. 对于Self-attention的整个运行过程来说,需要学习的参数只有Wq、Wk、Wv,只有这3个参数是未知的,需要从训练资料中学习得到。
七、Multi-head Self-attention
如下图所示,举例两个head的情况。我们会把q、k、v分别乘上两个不同的矩阵,然后分成两个不同的q、k、v,现在的操作和Self-attention的操作差不多,只是产生的q、k、v只与下标一样的一起计算attention分数,然后就会得到bi,1和bi,2,把它们组成矩阵乘上一个矩阵,得到bi。
八、Positional Encoding
1. Self-attention缺少最重要的位置信息,因为Self-attention的输入没有次序的说法,但是这样会存在严重问题。因此,如果Self-attention需要位置信息,我们可以用Positional Encoding的技术添加进去,也就是我们为每一个位置设置一个特殊的vector。
2. 如下图所示,是最早期ei的样子,每一列就是一个ei。这些positional vector是人为设置的,会存在一些问题,但是我们可以通过创造新的方法解决这些问题,甚至于Positional Encoding可以通过资料学出来。
九、Many applications
1.Self-attention for Speech
1) 我们需要对Self-attention做一些改动,因为我们要把声音讯号表示成向量的话,向量的长度会特别长。当我们要描述一段声音讯号时,它的vector sequence是非常可观的,这会导致计算Attention Matrix时,我们要计算L*L,如果L太大,就会大到无法训练。
2) 我们可以Truncated Self-attention解决上述问题,它的做法是不考虑整个声音讯号,只看一个小范围(人为设定),这样可以加快运算的速度。
2.Self-attention for Image
1) 我们可以把图片看作vector set。如下图所示,这张图片可以看作大小为5 * 10 * 3的tensor(3代表了RGB),我们把3个channel的一个小部分看作3维向量。
2) 如下图所示,两个例子说明Self-attention用在影像处理上。
3.Self-attention v.s. CNN
1)CNN可以看作简化版的Self-attention,Self-attention可以看作复杂版的CNN,因为Self-attention考虑整个图片,CNN只考虑一小部分。
2)如下图所示,在资料量越来越多时,Self-attention表现更好;在资料量越来越少时,CNN表现更好;因为Self-attention弹性好,需要更多的训练资料。
4.Self-attention v.s. RNN
如下图所示,它们的输入一样,但是不同在Self-attention考虑所有vector,而RNN只考虑上一个的vector(其实RNN可以设置为双向的,这样也就可以实现考虑所有vector)。在运算速率上,RNN的输出是不平行的,而Self-attention是平行的,因此Self-attention的运行效率更高。
5.Self-attention for Graph
当Self-attention应用在Graph上,我们可以知道哪些向量间是有关联的,因此在计算Attention Matrix时,我们只需要计算与edge相连的node。