首页 > 其他分享 >pytorch(10.2) 注意力汇聚理论

pytorch(10.2) 注意力汇聚理论

时间:2023-10-16 22:23:52浏览次数:42  
标签:10.2 Attention attention 汇聚 信息 pytorch 计算 机制 注意力

 

https://zh.d2l.ai/chapter_attention-mechanisms/nadaraya-waston.html

 

 

https://zhuanlan.zhihu.com/p/265108616

 

Attention注意力机制与self-attention自注意力机制

 

Attention注意力机制与self-attention自注意力机制

1.为什么要因为注意力机制

在Attention诞生之前,已经有CNN和RNN及其变体模型了,那为什么还要引入attention机制?主要有两个方面的原因,如下:

(1)计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。

(2)优化算法的限制:LSTM只能在一定程度上缓解RNN中的长距离依赖问题,且信息“记忆”能力并不高。

注意力机制的优缺点

attention的优点

1.参数少:相比于 CNN、RNN ,其复杂度更小,参数也更少。所以对算力的要求也就更小。

2.速度快:Attention 解决了 RNN及其变体模型 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

3.效果好:在Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

attention的缺点

缺点:自注意力机制的信息抓取能力其实不如RNN和CNN,在小数据集的表现不如后两者,只有在数据量上来了之后才能发挥出实力。实际应用中数据集较小时建议还是用CNN和RNN

缺点有啊,需要的数据量大。因为注意力机制是抓重点信息,忽略不重要的信息,所以数据少的时候,注意力机制效果不如bilstm,现在我们企业都用注意力机制,因为企业数据都是十万百万级的数据量,用注意力机制就很好。还有传统的lstm,bilstm序列短的时候效果也比注意力机制好。所以注意力机制诞生的原因就是面向现在大数据的时代,企业里面动不动就是百万数据,超长序列,用传统的递归神经网络计算费时还不能并行计算,人工智能很多企业比如极视角现在全换注意力机制了

2.什么是注意力机制

在介绍什么是注意力机制之前,先让大家看一张图片。当大家看到下面图片,会首先看到什么内容?当过载信息映入眼帘时,我们的大脑会把注意力放在主要的信息上,这就是大脑的注意力机制。

 

 

同样,当我们读一句话时,大脑也会首先记住重要的词汇,这样就可以把注意力机制应用到自然语言处理任务中,于是人们就通过借助人脑处理信息过载的方式,提出了Attention机制

3.注意力机制模型

 

 

从本质上理解,Attention是从大量信息中有筛选出少量重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

至于Attention机制的具体计算过程,如果对目前大多数方法进行抽象的话,可以将其归纳为两个过程:

第一个过程是根据Query和Key计算权重系数,

    而第一个过程又可以细分为两个阶段:

    第一个阶段根据Query和Key计算两者的相似性或者相关性;

    第二个阶段对第一阶段的原始分值进行归一化处理;

第二个过程根据权重系数对Value进行加权求和。

这样,可以将Attention的计算过程抽象为如图展示的三个阶段。

 第一个阶段

在第一个阶段,可以引入不同的函数和计算机制,根据Query和某个 Keyi ,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:

 

 第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样,第二阶段引入类似SoftMax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算:

 

 1过程对位置加权

 2通用公式

  3要求它们是非负的,并且总和为1,引入一个高斯核(Gaussian kernel)

4 联合a和K

 

 如果一个键xi越是接近给定的查询x<span class="math notranslate nohighlight">, 那么分配给这个键对应值yi<span class="math notranslate nohighlight">的注意力权重就会越大, 也就“获得了更多的注意力”。

如图

因此由观察可知“查询-键”对越接近, 注意力汇聚的注意力权重就越高。

 第二阶段

第二阶段的计算结果 ai 即为 Valuei 对应的权重系数,然后进行加权求和即可得到Attention数值:

 

通过如上三个阶段的计算,即可求出针对Query的Attention数值,目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程。

 

4.Self-attention自注意力机制

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题。

自注意力机制的计算过程:

1.将输入单词转化成嵌入向量;

2.根据嵌入向量得到q,k,v三个向量;

3.为每个向量计算一个score:score =q . k ;

4.为了梯度的稳定,Transformer使用了score归一化,即除以

 

5.对score施以softmax激活函数;

6.softmax点乘Value值v,得到加权的每个输入向量的评分v;

7.相加之后得到最终的输出结果z :z=

 

标签:10.2,Attention,attention,汇聚,信息,pytorch,计算,机制,注意力
From: https://www.cnblogs.com/gooutlook/p/17768519.html

相关文章

  • pytorch(9-1) 门控循环单元
     复杂实现 importtorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lfromAPI_86import*#1-1初始化权重Wbdefget_params(vocab_size,num_hiddens,device):num_inputs=num_outputs=vocab_sized......
  • 文心一言 VS 讯飞星火 VS chatgpt (114)-- 算法导论10.2 7题
    七、用go语言,给出一个O(n)时间的非递归过程,实现对一个含n个元素的单链表的逆转。要求除存储链表本身所需的空间外,该过程只能使用固定大小的存储空间。文心一言:在Go语言中,你可以使用迭代方法来反转一个单链表。这种方法只需要O(1)的额外空间。首先,我们需要定义链表的数据结构:t......
  • 文心一言 VS 讯飞星火 VS chatgpt (114)-- 算法导论10.2 7题
    七、用go语言,给出一个O(n)时间的非递归过程,实现对一个含n个元素的单链表的逆转。要求除存储链表本身所需的空间外,该过程只能使用固定大小的存储空间。文心一言:在Go语言中,你可以使用迭代方法来反转一个单链表。这种方法只需要O(1)的额外空间。首先,我们需要定义链表的数据结构:type......
  • 【地表最强】深度学习环境配置攻略 | 【nvidia-driver】, 【cuda toolkit】, 【cudnn
    更新截止到2023.10.161.要素:linux(ubuntu22.04)nvidia-driver(也叫做cudadriver):英伟达GPU驱动,命令:nvidia-smicuda(也叫做cudatoolkit):这个必须有。CUDA是NVIDIA创建的一个并行计算平台和编程模型(用这个来跑深度学习),命令:nvcc-Vcudnn:nvidia开发的深度学习算子库,用......
  • 安防视频监控EasyCVR视频汇聚平台与萤石云平台的适配方案分析
    随着科技的不断发展,互联网技术逐渐深入到我们生活的各个领域。其中,安防监控领域受益于互联网技术的发展,逐渐呈现出智能化、高清化、远程化的趋势。本文将介绍一种基于萤石云与EasyCVR平台的安防视频监控解决方案,以满足用户对安全性、实时性、精准性等方面的需求。一、需求分析目......
  • pytorch的 jit功能不应该叫aot功能吗?
    jit简介pytorch的jit功能是为了生成类似于计算图的功能,能加快模型速度,便于部署,属于是取tensorflow之长补自己之短。jit由来之所以叫jit,是因为他仍然属于实时解释的范畴,但是能预先生成中间量,“审时度势”地实时运行。参考可以看这位帖子:https://zhuanlan.zhihu.com/p/65088592......
  • 一周总结(2023.10.2-2023.10.15)
    2023.10.2考试。T1是简单的,T2是一个比较简单的dp,状态等东西都是对的,但是因为有一个地方没有取模而只交了暴力。受不鸟。T3是概率dp,考场上想了比较久想出来并实现了。T4是一个容斥计数题,大概理解了但是没有补。考场上千万要注意细节,以免丢掉不该丢的分。2023.10.3还是考试......
  • 文心一言 VS 讯飞星火 VS chatgpt (113)-- 算法导论10.2 5题
    五、用go语言,使用单向循环链表实现字典操作INSERT、DELETE和SEARCH,并给出所写过程的运行时间。文心一言:在Go语言中,我们首先需要定义一个Node结构体来表示单向循环链表的节点,然后再定义一个LinkedList结构体来表示单向循环链表。接下来,我们可以实现INSERT、DELETE和SEARCH操作。......
  • 文心一言 VS 讯飞星火 VS chatgpt (113)-- 算法导论10.2 5题
    五、用go语言,使用单向循环链表实现字典操作INSERT、DELETE和SEARCH,并给出所写过程的运行时间。文心一言:在Go语言中,我们首先需要定义一个Node结构体来表示单向循环链表的节点,然后再定义一个LinkedList结构体来表示单向循环链表。接下来,我们可以实现INSERT、DELETE和SEARCH操作......
  • PyTorch之线性回归模型
    1简介1.1线性回归模型简介线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y=wx+e,e为误差服从均值为0的正态分布。其中只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,称为一元......