Transformer

一、注意力机制 (attention)

注意力机制其实是源自于人对于外部信息的处理能力。由于人每一时刻接受的信息都是无比的庞大且复杂,远远超过人脑的处理能力,因此人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。

1. 非自主提示与自主提示

针对于注意力机制的引起方式,可以分为两类,一种是非自主提示,另一种是自主提示。

例图image

非自主提示

非自主提示指的是由于物体本身的特征十分突出引起的注意力倾向,源自于物体本身
如上图所示:第一眼我们会聚焦于上图的兔子,由于兔子的特征比较突出,会让人一眼关注到,这种就是非自主提示

自主提示

自主提示指的是经过先验知识的介入下,对具有先验权重的物体引起的注意力倾向,源自于一种主观倾向
如上图所示:看到兔子之后,我们会想知道它的行为,这时我们会发现它在吃草,同时注意力会集中在周围的草上,由我们的主观意识引导,这种就是自主提示

2. 查询、键和值

设计注意力机制需要考虑注意力的引起方式(非自主提示、自主提示)

只考虑非自主提示的话,只需要对所有物体的特征信息(非自主提示)进行简单的全连接层,甚至是无参数的平均汇聚层或者最大汇聚层,就可以提取出需要感兴趣的物体。
如果考虑自主提示的话,我们就需要设计一种通过查询(Query),键(Key)和值(Value)来实现注意力机制的方法。

  • 查询(query):自主提示,即主观意识的特征向量
  • 键(key):非自主提示,即物体的突出特征信息向量
  • 值(value):代表物体本身的特征向量。
    注意力机制是通过Query与Key的注意力汇聚(指的是对Query和Key的相关性进行建模,实现池化筛选或者分配权重),实现对Value的注意力权重分配,生成最终的输出结果。

3. 注意力机制的公式

  1. 平均汇聚
  2. 非参数的注意力汇聚(Nadaraya-Watson核回归)
  3. 带参数的注意力汇聚(Nadaraya-Watson核回归)

4. 注意力机制的评分函数 (α(query,key))

α(query,key)作为评分函数可以分为两种,分别是加性注意力和点积注意力。

  1. 加性注意力
    加性注意力(Additive Attention)是一种常用的注意力机制,可以应用于自然语言处理、图像处理等领域中的不同任务。
    一般是处理Query和Key的向量维数不一致的情况,公式如下:
    image
    image
    image
    加性注意力的优点是可以处理查询向量和键向量之间的尺度差异,能够更好地捕捉到输入序列中的全局关系。不过,它的缺点是计算量较大,对模型效率有一定影响。

为了解决这个问题,通常会对加性注意力进行加性关联映射(Additive Interaction)操作,即在乘法之前添加一个共享的偏置向量b ,使得公式变为: s=q∗k+b
这样可以大大减少计算量,提高模型的效率和速度。因此,经常使用的加性注意力公式如下:
image
总之,加性注意力是一种常用的注意力机制,适用于各种自然语言处理和图像处理任务中。加性关联映射可以提高计算效率,加快模型训练和推理的速度。

可以从向量相加来理解,当向量q和向量k越接近,两个向量相加的结果就越大,那么加性注意力获得的权重就越大,反之两个向量离的越远则相加的结果越小,加性注意力获得的权重就会越小。

  1. 点积注意力
    点积注意力(Dot-Product Attention)是一种常用的注意力机制,可以应用于自然语言处理、图像处理等领域中的不同任务。
    image
    image
    点积注意力的优点是计算简单,且能够有效地捕捉到输入序列中的局部关系。不过,它的缺点是无法处理查询向量和键向量之间的尺度差异,导致输出结果可能存在数值稳定性问题。
    为了解决这个问题,通常会对点积注意力进行缩放,即将点积除以image,其中 image表示键向量的维度。这样可以使得注意力权重的方差更加稳定,从而提高模型的鲁棒性和准确性。因此,经常使用的点积注意力公式如下:
    image
    总之,点积注意力是一种简单而有效的注意力机制,适用于各种自然语言处理和图像处理任务中。它的缩放版本能够解决数值稳定性问题,使得注意力权重更加准确和可靠。

从点积公式上理解,点积公式为image从公式中可以看出如果两个向量越近,则cos(θ)越大,点积值越大。因此,注意力的权重就越大。反之,如果两个向量离的越远,则cos(θ)越小,点积值越小,从而注意力的权重就越小。

5. 多头注意力(multi-head)

单一注意力汇聚,只会建立一种查询和键的依赖关系。而我们常希望可以基于相同的注意力汇聚方法学习到不同的依赖关系,然后将这些依赖关系组合起来,实现捕获序列内各种范围的依赖关系。例如,机器翻译任务,以 " I like fishing because it can relax my mind " 要翻译为 " 我喜欢钓鱼,因为可以放松心灵 " 为例,我们以"放松"为Query,对英文句子中每个单词的Key进行注意力汇聚,结果获取"放松"和"relax"的依赖关系。这是单头注意力的结果,如果我们进行多次注意力汇聚,则可能捕获"放松"和"fishing", "I"等单词的依赖关系。这样,我们将多个结果进行融合就可以得到更为全面,复杂的依赖关系,这对于深度学习下游任务,例如目标检测,语义分割等都具有很大帮助。这就是本章节要介绍的多头注意力汇聚方法。具体流程如下:

  • 首先,将查询,键和值通过多组全连接层来获取对应的特征向量。由于每个全连接层的参数都是可学习的,因此,经过独立学习可以获取多组不同特征的查询,键和值的特征向量。
  • 然后,对多组查询,键和值的特征向量进行注意力汇聚,从而获得多个不同注意力汇聚运算结果。
  • 最后,将所有的注意力汇聚运算结果进行拼接,再经过一个全连接层,就可以映射出所需的最后输出。

其中每一个注意力汇聚都被称作一个头(head)。由于有多个注意力汇聚,因此才被称为多头注意力。
多头注意力机制的多头表示对每个Query和所有的Key-Value做多次注意力机制。做两次,就是两头,做三次,就是三头。这样做的意义在于获取每个Query和所有的Key-Value的不同的依赖关系。

具体流程如下:
image

6、优缺点

  • 优点:
    1. 速度快。Attention机制不再依赖于RNN,解决了RNN不能并行计算的问题。这里需要说明一下,基于Attention机制的seq2seq模型,因为是有监督的训练,所以咱们在训练的时候,在decoder阶段并不是说预测出了一个词,然后再把这个词作为下一个输入,因为有监督训练,咱们已经有了target的数据,所以是可以并行输入的,可以并行计算decoder的每一个输出,但是再做预测的时候,是没有target数据地,这个时候就需要基于上一个时间节点的预测值来当做下一个时间节点decoder的输入。所以节省的是训练的时间。
    2. 效果好。因为注意力机制,能够获取到局部的重要信息,能够抓住重点。
  • 缺点:
    1. 只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算,不够完美。
    2. 因为Encoder部分目前仍然依赖于RNN,所以对于中长距离之间,两个词相互之间的关系没有办法很好的获取。

二、自注意力机制(self-attention)

自注意力机制和注意力机制的区别就在于,注意力机制的查询和键是不同来源的,例如,在Encoder-Decoder模型中,键是Encoder中的元素,而查询是Decoder中的元素。在中译英模型中,查询是中文单词特征,而键则是英文单词特征。而自注意力机制的查询和键则都是来自于同一组的元素,例如,在Encoder-Decoder模型中,查询和键都是Encoder中的元素,即查询和键都是中文特征,相互之间做注意力汇聚。也可以理解为同一句话中的词元或者同一张图像中不同的patch,这都是一组元素内部相互做注意力机制,因此,自注意力机制(self-attention)也被称为内部注意力机制(intra-attention)。

简单来说,自注意力机制的作用是学习Query对其他所有Key的依赖关系。即每个特征信息都是组内其他所有特征信息的关系组合。

自注意力机制(Self-Attention)是一种常用的注意力机制,它主要用于处理序列数据,可以在不同的时间步上计算出不同位置的注意力权重,从而将所有时间步的信息进行整合和交互。

其基本原理是:根据查询(Query)、键(Key)和值(Value)之间的关系计算出注意力权重,然后将权重与值相乘,得到每个时间步的加权和,从而得到最终的输出结果。

1、具体流程

image

一堆向量 a set of vector : 词语、图(每个节点可以看作一个向量)
image

一对一:Sequence Labeling
self-attention会吃一整个sequence的咨询
image
image

全连接是定长的,attention是不定长的
image
α计算关联性(自己也得和自己计算关联性)
image
过程:
b1 b2 b3 b4 是一致同时计算出来的,并不是按顺序,并行
q和k作dot-product得到α,再进行激活得到α',之后与v相乘,最后进行累加得到b
image

矩阵乘法上的运作:
每一个a分别产生q,k,v(query,key,value)
image
image
image
image

自注意力机制:少了位置信息

multi-head self-attention

应用:NLP,Speech,Image

2、对比

Self-attention VS CNN

CNN:可以看作是一种简化版的self-attention
Self-attention是一种复杂化的CNN
image

Self-attention VS RNN

image
RNN无法平行化

3、优缺点

  • 优点:可以建立全局的依赖关系,扩大图像的感受野。相比于CNN,其感受野更大,可以获取更多上下文信息。(可以捕捉到序列中任意两个元素之间的关系,从而实现全局的交互和整合,适用于各种自然语言处理任务,如语言建模、机器翻译、文本分类等。自注意力机制也是许多先进的预训练模型(如BERT、GPT等)的核心组成部分)

  • 缺点:自注意力机制是通过筛选重要信息,过滤不重要信息实现的,这就导致其有效信息的抓取能力会比CNN小一些。这所以这样是因为自注意力机制相比CNN,无法利用图像本身具有的尺度,平移不变性,以及图像的特征局部性(图片上相邻的区域有相似的特征,即同一物体的信息往往都集中在局部)这些先验知识,只能通过大量数据进行学习。这就导致自注意力机制只有在大数据的基础上才能有效地建立准确的全局关系,而在小数据的情况下,其效果不如CNN。
    简单来说:
    优点:感受野大
    缺点:需要大数据

4、单一自注意力机制
对deep learning这个词组做单头的自注意力机制,原理图如下:
image

5、多头自注意力机制
对deep learning这个词组做多头的自注意力机制,原理图如下:
image


三、Transformer

输入:输出 m:n
应用:语言辨识,机器翻译,语音翻译

seq2seq moudle
image

encoder:给一排向量输出另外一排向量

image
image

image

做两次layernorm
Add & Norm = Residual+Layer norm
第一次:residual = a(self-attention处理之后的输出)+b(self-attention处理之前的输入)
第二次:residual = a(self-attention处理之后的输出/FC处理之前的输入)+c(FC处理之后的输出)
重复n次

image
seq2seq

decoder

decoder看到的输入是自己前一个时间的输出,会把自己的输出当作接下来的输入
image

传递过程中出现误差该怎么办?

image

masked self-attention(不考虑右边的信息)
image
self-attention
image

为什么masked遮掩?
decoder输出的信息是一个一个产生的,他只能考虑自己左边的信息,没有办法考虑右边的信息

我们并不知道正确的输出长度
从begin开始到end结束
image
中间的信息
两个输入来自encoder,还有一个来自decoder的输出
cross attention过程
image

训练 training

每次decoder产生一个信息类似做过一次分类问题
minimize cross entropy

四、RetNet 展望

posted @ 2023-10-15 20:34  无问夕故  阅读(91)  评论(0编辑  收藏  举报