目录
摘要
Abstract
一、注意力机制V.S.自注意力机制
1、引入
2、注意力机制
3、自注意力机制
二、自注意力机制
1、输入
2、输出
3、序列标注
4、Multi-head Self-attention
5、比较
总结
摘要
前两周学习了CNN的基本架构,针对全局信息的考虑问题,提出了注意力机制。本周围绕注意力机制和自注意力机制的概念和计算流程进行理解和推导。当前深度学习比较常用的是自注意力机制, 可以解决”神经网络建立多个输入之间的相关性“问题,所以本周还对自注意力机制的具体计算步骤进行详细推导。最后,根据实际需要提出了多头自注意力机制,并且比较了卷积神经网络和 自注意力机制的优缺点。
Abstract
In the previous two weeks, we learned the basic architecture of CNN, and the attention mechanism was proposed for the problem of considering global information. This week, we will understand and derive the concepts and computational flow of the attention mechanism and the self-attention mechanism. Currently, the self-attention mechanism is more commonly used in deep learning, which can solve the problem of “neural network establishes the correlation between multiple inputs”, so this week, we also derive the specific computational steps of the self-attention mechanism in detail. Finally, we propose a multi-head self-attention mechanism according to practical needs, and compare the advantages and disadvantages of convolutional neural networks and the self-attention mechanism.
一、注意力机制V.S.自注意力机制
1、引入
如下的热成像图所示:
类热成像图中的高温(红色)处代表重要程度较高。比如机器学习中,机器识别不同人需要观察“人脸”、学习一篇文章需要关注“标题”、每一段文字需要重点看“段落开头”等。
2、注意力机制
注意力机制attention:当机器观察一个物体时,应该将关注点聚焦到更重要的事物上去。但是对于一个模型来说,很难决定某处是否重要,所以引入了注意力机制。
上图可以看出,注意力机制的由三大部分和一系列计算变换完成。其中Q(query)是查询对象 、K(key)是被查询对象、V(value)是被查询对象的所包含模块。简单来说,Q就是指观察者、K就是指被观察的一张或多张图片、V就是每张图片里一处或多处模块。
总结attention的步骤如下:
step1 Q和K进行点乘,为了计算其相关性
step2 对Q和K的点乘结果进行量化和softmax,得到a
step3 a和V进行点乘,进而计算二者相关性,得到新的V
step4 最终将新得到的V替换原来的旧V
注:原先的V只是一个字面意思的值,新得到 的V则包含了较重要的信息。一般来说,K和V是相等的,或者说是K与V之间有一定的联系,这样才能使得来指导V哪些重要和哪些不重要。
3、自注意力机制
自注意力机制self-attention:实际上是attention的一种特殊形式。不是输入语句和输出语句之间的Attention机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的Attention机制。
可以把自注意力机制看作是注意力机制的子集,它拥有更加严格的条件,它要求Q、K、V必须是同源的(三者相等或者至少相似有关联)。如何得到Q、K、V,如下图所示:
与attention最大的区别,就是self-attention需要根据 、、和初始词向量、来计算出、、的值。简答来说,就是在attention的基础步骤上,增加一个最初的步骤:
step0 计算Q、K、V
step1-step3 同上
参考视频:10 Transformer 之 Self-Attention(自注意力机制)_哔哩哔哩_bilibili
二、自注意力机制
1、输入
一个向量v.s.一组向量(文字处理、声音讯号、关系图)
如果说,输入只是一个向量,那么经过model完成回归或分类任务,输出为一个标量或一种类别;但是如果输入更加复杂,有多个向量,并且向量大小不同、向量之间存在某种关联,此时需要引入自注意力机制来解决“多个相关输入建立相关性”的问题。
问题:如何表示一组向量
解决:以下两种方法:
左边是独热码 ,但是看不出输入之间的关联,理解不了“语义”;右边是词嵌入,能够明显的的看出输入的大致分类(原理next lecture)
2、输出
如果输入一组向量,那么输出有以下三种形式:
(1)每个向量输出一个label,比如词性标注、语音辨识、社交关系图
(2)整个句子只输出一个label,比如情感分析、语者辨认、化学式特性分析
(3)机器自己决定输出的label数量,比如机器翻译(next lecture)
3、序列标注
序列标注sequence labeling 是NLP问题中的基本问题。在序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。也就是“二、2、(1)”中的情况
图A 一个元素对应一个标签的情况,可以使用“全连接”的方式,使得每一个输入对应一个输出的词意。
问题1:该方法不能结合上下文进行考虑,从而无法判断词性。
图B 为了能够结合前后的输入信息,我们可以利用“窗口”来将输入相互联系起来
问题2:“窗口”太小则考虑的信息量不全;“窗口”太大则fully connected参数较多,导致计算量过大甚至是出现过拟合现象。
图C 掌握不好“窗口”的大小,所以引入self-attention,找到关键的信息
图D 一种改进形式,可以叠加多层self-attention,逐层筛选出重要的信息.fully connected专注于处理某个位置的信息,self-attention处理整条序列的信息,二者可以交替使用。
self-attention的计算过程:
假设输入、、、之间有千丝万缕的联系,经过一系列运算以后输出、 、、,如下:
其中的输出、 、、是由4个输入同时影响得到的。上图中的蓝色框是输入后进行的运算,具体运算方式如下图(以为例):
计算流程如上图“由下至上”所示。首先,需要根据 、、计算出、、;其次,计算,也就是、二者的内积;最后,再乘上相加即可得到输出。
若用矩阵的方式表示,如下图:
4、Multi-head Self-attention
事实上,多头自注意力机制是自注意力机制的子集。当输入有多种不同形式的相关性时,我们就设定多个q、k、v。其余的计算步骤同上
5、比较
self-attentionV.S.CNN
简单来说,CNN就是self-attention的 一种特例,self-attention就是CNN的一种普通情况。其关系如下图:
在CNN的一系列操作中,可以看出是需要人为设定好receptive field,只需要考虑receptive field离的全部信息即可;self-attention则需要考虑全局的信息。如果进行多次卷积,那么CNN就会包含越来越多的信息,从而无限接近self-attention。
经过实验数据的验证,CNN在较少数据前表现更好,说明其弹性较小,若是训练数据过多则不会提高表现;self-attention则需要更多的数据,说明其弹性较大,但是在训练数据较少时容易出现“过拟合”。
参考文章:https://www.zhihu.com/question/448924025/answer/1791134786
总结
本周主要围绕注意力机制和自注意力机制进行学习,下周将学习 RNN,并且将其与自注意力机制进行对比分析。接着,我将完成作业2——语音辨识,将学习的理论融入实践中去。