Transformer---自注意力机制Self-Attention

发布于:2024-12-18 ⋅ 阅读:(95) ⋅ 点赞:(0)

一、前言

如今是大模型的时代,我们在网络上使用到的AI工具,例如:chatGPT、文生图、图生图、TTS都结合了Ai大模型,大模型的底层原理是Transformer 架构,Transformer 架构的重点就是自注意力机制Self-Attention,如果能够掌握Self-AttentionTransformer 架构就掌握到了80%

二、什么是注意力机制

了解自注意力机制之前,我们先了解一下什么是注意力机制

当人类观察事物时,往往会选择性地关注较为重要的信息,这种现象称为注意力机制。例如下方的袋鼠图片,我们更专注的是袋鼠本身,而不是它周围的绿色的草。

类似地,深度学习中的注意力机制模仿了这种过程,帮助模型从大量数据中筛选出关键信息,减少对不重要内容的关注,从而提高模型的性能和决策能力。

在这里插入图片描述
如何让机器有这种像人一样可以关注重点的注意力机制呢?那就是Q、K、V进行计算,来得出注意力分数。

注意力分数是什么?注意力分数用来量化注意力机制中某一部分信息被关注的程度,反映了信息在注意力机制中的重要性。在注意力机制中,模型会根据注意力分数来决定对不同输入信息的关注程度。在这里插入图片描述

注意力机制通过计算查询向量(Query)、键向量(Key)之间的相似度来确定注意力权重,然后对值向量(Value)进行加权求和,得到最终的输出。

注意力分数的计算过程如下:

  • 1、根据QueryKey计算两者之间的相关性或相似性(常见方法点积、余弦相似度,MLP网络),得到注意力得分;
  • 2、对注意力得分进行缩放scale除以维度的根号),再softmax函数,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softmax的内在机制更加突出重要元素的权重。一般采用如下公式计算:
  • 3、据权重系数对Value值进行加权求和,得到Attention
    Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了);

在这里插入图片描述

机器翻译中的Q、K、V举例
我们可以用一个中译英的机器翻译例子来更直观地理解:

假设我们有一个源语言句子:“我喜欢学习”,以及对应的目标语言句子:“I like studying”。

源语言(Chinese):“我”、“喜欢”、“学习”
目标语言(English):“I”、“like”、“studying”
在机器翻译的过程中,假设目标句子的第一个词“I”是我们需要查询的信息,那么:

目标序列中I对应的查询向量Q将被用于与源语言中每个词的键向量K进行比较,计算相似度。
每个源语言词汇(例如“我”)都会有一个键向量K和一个值向量V,键表示该词的重要性,值表示该词的实际信息内容。
然后,通过点积Softmax操作,计算得到每个源语言词的权重,最后加权求和源语言中的值向量加粗样式V,得到目标语言词“I”的表示。

从上面的例子可以知道 其中Q、K、V来自不同的序列(Q来自目标语言序列、KV来自源语言序列)

而我们下面要提到的自注意力机制注意力机制不同之处就是Q、K、V都来自同一个序列。

三、注意力机制和自注意力机制的区别

3.1、关注对象

注意力机制(Attention):注意力机制通常应用于不同序列之间的关系。例如,在机器翻译中,源语言序列和目标语言序列之间通过注意力机制进行信息的加权融合。注意力通过对源序列的不同部分分配权重,来帮助目标序列的生成。

自注意力机制(Self-Attention):自注意力机制则是关注同一序列内元素之间的关系。它通过计算序列内每个元素与其他元素之间的相似度,来调整每个元素的表示,使其能更好地捕捉序列中的全局信息。
例子:在文本理解任务中,句子中的每个单词都会与句子内其他单词计算注意力,决定如何加权它们的表示。

3.2、 计算方式

注意力机制:计算注意力时,通常会使用查询(Q)、键(K)和值(V)的组合,其中查询来自目标序列,键和值来自源序列。模型计算目标元素与源元素之间的相似度,并根据相似度加权求和。

自注意力机制:在自注意力机制中,Q、K、V都来自同一序列。每个元素(如一个词或特征向量)会与序列中的其他所有元素计算相似度,并生成加权和来更新其自身表示。自注意力机制不需要输入输出之间的明确区分。

四、自注意力机制

自注意力机制(Self-Attention Mechanism)是一种计算序列中每个元素与其他所有元素之间关系的机制,它通过对同一序列内各元素之间的相似度进行加权聚合来更新每个元素的表示。自注意力机制能够捕捉到序列中各个位置之间的依赖关系,尤其是长距离依赖关系,且无需按顺序逐个处理输入。

计算过程如下:

  • 1、生成Q、K、V
    Q(查询向量):每个元素根据输入生成一个查询向量(Query)。 K(键向量):每个元素根据输入生成一个键向量(Key)。
    V(值向量):每个元素根据输入生成一个值向量(Value)。 这些向量通常是通过将输入序列与训练过程中学到的权重矩阵相乘得到的。

  • 2、计算相似度
    通过计算查询向量Q和键向量K之间的相似度来确定各个元素之间的关联程度。常见的相似度计算方法是点积。然后,将点积结果经过scale缩放,之后Softmax函数转化为权重,每个值是一个大于0且小于1的权重系数,且总和为1,这个结果可以被理解成一个权重矩阵。表示每个元素在当前步骤中的重要性。

  • 3、加权求和
    将每个元素的值向量V按照计算出的权重进行加权求和,得到该元素的更新表示。这个表示包含了其他元素对该元素的影响,体现了自注意力的“关注”机制。

  • 4、输出
    最终的输出是一个新的表示序列,其中每个元素的表示融合了其他元素的信息。

公式如下:
在这里插入图片描述


d k \sqrt{d_k} dk 是键向量K的维度,用于避免点积值过大,以及使得 Softmax 的输出更加平滑,从而有助于注意力分配的均衡,不会导致某些位置的权重过高而忽略其他信息

五、自注意力机制的优缺点

5.1、优点:

1、捕获长距离依赖:
自注意力机制能够全局关注序列中任意两个位置的关系。与传统的RNN或LSTM相比,它不受序列长度的限制,能有效地捕捉长距离依赖关系,这对于处理长文本或长序列非常重要。

2、并行计算:
自注意力机制不同于RNN和LSTM,后者需要按时间步逐步处理输入。自注意力机制中的所有元素都可以同时计算,这使得模型能够进行并行化计算,从而加速训练过程,尤其在GPU等硬件加速下表现优异。

5.2、缺点

1、计算开销大:

自注意力机制的时间复杂度为 𝑂(𝑛^2),其中 𝑛是输入序列的长度。这意味着随着序列长度的增加,计算和内存消耗也会急剧增加,特别是在处理长文本或大规模数据时,可能会导致计算资源的瓶颈。

2、信息不均衡:
处理长序列时,注意力机制可能更关注部分显著信息,而忽视其他部分。这可能导致全局信息不均衡,影响模型性能。

六、参考

1、注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解
2、通俗易懂理解注意力机制(Attention Mechanism)
3、一文搞定自注意力机制(Self-Attention)


网站公告

今日签到

点亮在社区的每一天
去签到