Self-Attention模型(李宏毅)

Self-Attention是用来处理变长输入序列的技术,解决了传统方法可能因参数过多和窗口限制导致的问题。它通过查询、键、值向量计算相关性,形成注意力权重,用于捕获序列中的长距离依赖。加性注意力和乘性注意力是两种计算相似度的方式。Self-Attention在网络中的多层堆叠有助于学习更复杂的特征,并且在处理序列数据时相比CNN和RNN更具优势,尤其是在考虑全局信息和并行计算方面。
摘要由CSDN通过智能技术生成

Self-Attention的由来

Self-Attention 的由来 就是用来处理输入是N个向量(vector sequences),输出也是N个向量的问题。

根据任务输出不同可以划分为下面3类

以 第一种 每个输入都会有一个label输出为例:

        但是上述方法还是有局限,如果我们现在任务需要考虑整个sentence的词汇才能解决,因为输入的句子的长度是不定的,如果window设置成最长句子长度,那么可能导致FC过多,参数过多,需要大量运算、可能over fitting(因为当神经网络的参数过多时,模型变得非常复杂,可以更好地拟合训练数据中的细节和噪声。然而,这种过度拟合训练数据的能力可能导致模型在新数据上的性能下降。) 所以就引出来self-attention。

关于过拟合:

        模型越复杂、参数越多、学习能力越强,更容易到学习到训练数据中的细节和噪声,泛化性能下降,容易过拟合。

        而在模型结构确定的情况下,训练样本越多,提供越多的数据信息,帮助模型更好地学习数据中的一般模式,减少过拟合的风险;训练样本不足的情况下,模型可能过度拟合训练数据,无法很好地泛化到新的数据上,导致过拟合。

Self-attention的网络结构

self-attention(对行为序列的依赖关系进行建模) 和 FC(全连接层用于特征变换和抽取(专注一个位置的信息抽取)) 多次叠加(可以在多层次上对信息进行关联融合,学习更复杂的特征和模式,更好理解输入序列的语义结构)得到。

为什么讲self-attention和FC多次堆叠?

Self-attention 内部结构

 下图中输入向量a 可以是input 向量 也可以是经过处理后的比如hidden layer 的输出,

上图中有a1 到b1 的过程拆解为下面两个过程

  1. 计算两个向量的相似度

加性注意力(Additive Attention)和乘性注意力(Multiplicative Attention)是两种常见的注意力机制,用于在自然语言处理(NLP)和机器翻译等任务中对输入序列进行加权聚合。

加性注意力通过将查询向量和键向量映射到一个共享的中间表示空间,然后计算它们的相似度得分,最后使用softmax函数将这些得分归一化为注意力权重。具体来说,加性注意力的计算步骤如下:

1. 将查询向量 q 和键向量 k 映射到中间表示空间,通常通过矩阵乘法和激活函数(如 tanh)实现。
2. 计算中间表示空间中的相似度得分,通常是将两个向量连接并通过一个全连接层得到一个标量得分。
3. 使用 softmax 函数将得分归一化为注意力权重。
4. 将注意力权重与值向量 v 相乘,得到加权后的值向量。

相比之下,乘性注意力不需要中间表示空间的映射,而是直接将查询向量和键向量进行点积运算,并通过 softmax 函数归一化得到注意力权重。乘性注意力的计算步骤如下:

1. 计算查询向量 q 和键向量 k 的点积得分。
2. 使用 softmax 函数将得分归一化为注意力权重。
3. 将注意力权重与值向量 v 相乘,得到加权后的值向量。

加性注意力和乘性注意力在计算方式上略有不同,但它们的目标都是根据查询向量和键向量之间的相似度来赋予不同的注意力权重。通过使用注意力权重对值向量进行加权求和,可以聚合输入序列中与查询向量相关的信息,并用于下游任务的处理。
 

Self-attention 的 执行顺序:q*k --> softmax -->  dropout --> 权重*V

Mask Self-attention 的 执行顺序:q*k -->掩码--> softmax -->  dropout --> 权重*V

  1. 根据q1 与k1、k2、k3的相似度 计算得出b1

 

 

 

 

Self-Attention的公式:

在这里插入图片描述

self-attention中三个向量

在Self-Attention中,将一个向量转化为三个向量 q、k 和 v 的目的是为了进行查询(query)、键(key)和值(value)的计算,以便计算注意力权重并对值进行加权求和。

  1. Query(查询向量 q):查询向量用于衡量输入序列中每个位置与其他位置的关联程度。它可以看作是用于提出问题的向量,帮助模型找到与当前位置相关的信息。

  2. Key(键向量 k):键向量用于表示输入序列中每个位置的特征,用于与查询向量进行比较。通过计算查询向量和键向量之间的相似度,可以得到每个位置与其他位置的关联程度。

  3. Value(值向量 v):值向量包含了输入序列中每个位置的具体信息。通过计算注意力权重并将其应用于值向量,可以对不同位置的信息进行加权求和,从而得到最终的表示。

将一个向量转化为三个向量 q、k 和 v 的过程可以通过线性变换实现。通过对原始向量进行不同的线性映射,可以得到具有不同语义含义的向量表示,从而更好地捕捉序列中的关联信息。

总而言之,通过将一个向量转化为查询向量、键向量和值向量,可以得到具有不同语义含义的向量表示,之后通过Self-Attention计算查询与键之间的关联程度,并对值进行加权求和,以捕捉序列中的长距离依赖关系和上下文信息。

怎么形象理解上述3个向量呐

可以将查询(query)、键(key)和值(value)向量比作一个对话的场景来形象理解。

想象你正在阅读一本书,并希望询问关于某个特定段落的问题。在这个场景中:

  • 查询向量(q):查询向量可以被看作你提出的问题。它表示你希望了解什么,是你在对段落进行提问的方式。例如,你可能会问:“这段文字讲述了什么?”或“这段文字中有哪些重要的观点?”查询向量帮助模型定位和关注与你问题相关的信息。

  • 键向量(k):键向量代表了段落中的关键信息。它们类似于书中的章节标题或关键词,用于帮助模型识别段落中的重要内容和上下文。键向量可以看作是帮助你理解段落内容的线索,以便与你的查询进行比较和匹配。

  • 值向量(v):值向量则包含了段落的具体内容或细节信息。它们类似于段落中的具体句子或短语,提供了实际的信息内容。值向量可以被视为你从段落中获取的具体答案或解释。

通过计算查询向量与键向量之间的相似度,Self-Attention 可以根据问题和段落中的关键信息,计算每个值向量的权重,并对这些值进行加权求和,得到最终的答案或理解。

这个比喻帮助我们理解查询、键和值向量在Self-Attention中的作用,以及它们之间的关系。查询是提出问题的方式,键是关键信息的表示,值是具体的内容或答案。通过对这些向量的计算和比较,Self-Attention可以在输入序列中找到相关的信息,并产生合理的输出。

MUtil-head Self-attention

在self-attention中 我们用一个q去和其他位置的k对比相关性,实际上相关性也可以划分为多个方面的相关性,这样q1分别乘以wq1、wq2 分别得到两个q11、q12,同样的 k、v 也可以有两种表达方式。两种相关性的q、k、v 是独立的,计算相关性时也是独立的,只在同一种相关性内部做相似度计算,比如两个人 在年龄 和学历两方面的相似度计算。

然后将bi1、bi2连接起来乘以W0 得到bi 作为本层的输出。

上述结构存在的问题是:没有位置信息,a1 和a2、a5的从位置上是没区别的,比如在词性标注时我们知道动词不容易放在句首,如果包含位置信息,我们就能知道它是动词的概率就比较低,所以位置信息也是有用的。

对位置编码:Positional Encoding

       每个不同的位置对应一个向量ei,然后将ei拼接在ai后面,就引入了位置编码,位置编码可以帮助模型捕捉到元素在不同位置上的语义差异和上下文信息。

Self-attention 的应用

1、self-attention与CNN

CNN中 接受域是一个固定大小的窗口,而self-attention的接受域是自己学出来的没有距离限制的区域,所以CNN可以看成self-attention的一种,是将的接受域限制在一定距离范围内的self-attention(通过设置合适的参数,可以将self-attention转化为CNN)。

从学习弹性上看,self-attention的弹性更大,在数据量少时CNN更有优势,CNN专注一小块区域的学习,而self-attention学习区域更大、更范范,但是在数据量大时 CNN并不能从更多的数据量上学习到更多内容,而self-attention就可以。

2、self-attention与RNN 

联系:① 输入和输出都是 vector sequences,

区别:①RNN 的输出很难抽取到(考虑到)距离较远位置的信息,而SA则突破了距离的限制,② RNN是串行运算的,SA是并行的,③单向RNN只能考虑当前输出左侧的输入,而SA当前的输出可以考虑左右两侧的输入都可以考虑,当然双向RNN 也能考虑两侧的输入。

 3、self-attention for Graph

self-attention 不同向量之间的关联性是通过训练计算得到的;而在图中 每一个节点就是一个向量,边就表示两者存在关联,没有边的链接就表示两者关联性为0,将SA应用在图中就得了图神经网络(GNN)

【原来如此】深度学习中注意力机制(attention)的真实由来_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值