Self-Attention机制的计算详解

这篇具有很好参考价值的文章主要介绍了Self-Attention机制的计算详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Attention的思想

​ Attention注意力的核心目标就是从众多信息中选择出对当前任务目标更关键的信息,将注意力放在上面。

​ 本质思想就是【从大量信息中】【有选择的筛选出】【少量重要信息】并【聚焦到这些重要信息上】,【忽略大多不重要的信息】。聚焦的过程体现在【权重系数】的计算上,权重越大越聚焦于其对应的value值上。即权重代表了信息 的重要性,而value是其对应的信息。

​ 个人理解,就是对参数进行“加权求和”。

2. Self-Attention计算公式

Self-Attention机制的计算详解

​ 其中, X X X表示输入的数据, Q , K , V Q,K,V Q,K,V对应内容如图,其值都是通过 X X X和超参(先初始化,后通过训练优化)进行矩阵运算得来的。

可以理解为:Self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。

3. Self-Attention的计算实例

​ 结合代码进行理解:

Step1: 初始化 W Q , W K , W V W^Q , W^K,W^V WQ,WK,WV矩阵

class BertSelfAttention(nn.Module):
    self.w_q = nn.Linear(config.hidden_size, self.all_head_size) # 输入768, 输出768
    self.w_k = nn.Linear(config.hidden_size, self.all_head_size) # 输入768, 输出768
    self.w_v = nn.Linear(config.hidden_size, self.all_head_size) # 输入768, 输出768

​ 假设三种操作的输入都是同等维度的矩阵,这里每个特征维度都是768.即三者的维度:
W Q . s h a p e = [ 768 , 768 ] W K . s h a p e = [ 768 , 768 ] W V . s h a p e = [ 768 , 768 ] W^Q.shape = [768, 768] \\ W^K.shape = [768, 768] \\ W^V.shape = [768, 768] WQ.shape=[768,768]WK.shape=[768,768]WV.shape=[768,768]

Step2: 定义输入

​ 输入的特征维度也为768,即:每个字用768维来进行表示,如图所示:
Self-Attention机制的计算详解

即输入的X的维度为: [6, 768].

Step3: 计算 Q , K , V Q, K, V Q,K,V

​ 由于维度的问题,需要调换以下顺序,以及可能会涉及到转置:
Q = X ⋅ W Q K = X ⋅ W K V = X ⋅ W V Q = X·W^Q \\ K = X·W^K \\ V = X·W^V Q=XWQK=XWKV=XWV
​ 根据以上公式,得到 Q , K , V Q, K, V Q,K,V 的维度:
Q . s h a p e = [ 6 , 768 ] ∗ [ 768 , 768 ] = [ 6 , 768 ] Q.shape = [6, 768] * [768,768] = [6, 768] Q.shape=[6,768][768,768]=[6,768]
K , V K,V K,V同理。其维度图如下:
Self-Attention机制的计算详解

Step4: 根据公式计算注意力Attention
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q, K, V) = softmax({Q K^T \over \sqrt{d_k}}) V Attention(Q,K,V)=softmax(dk QKT)V
First: Q , K Q, K QK 矩阵相乘,维度变化: [ 6 , 768 ] ∗ [ 768 , 6 ] = [ 6 , 6 ] [6, 768] * [768, 6] = [6, 6] [6,768][768,6]=[6,6],如图:
Self-Attention机制的计算详解
(1)首先用Q的第一行,即“我”字的768特征和K中“我”字的768为特征点乘求和,得到输出(0,0)位置的数值,这个数值就代表了“我想吃酸菜鱼”中“我”字对“我”字的注意力权重
(2)然后显而易见输出的第一行就是“我”字对“我想吃酸菜鱼”里面每个字的注意力权重;整个结果自然就是“我想吃酸菜鱼”里面每个字对其它字(包括自己)的注意力权重(就是一个数值)了.
Second: 除以 d k , d k \sqrt{d_k} ,d_k dk ,dk表示特征维度,在本例中 d k = 768 d_k = 768 dk=768 。之所以要除以这个数,是为了矩阵点乘后的范围,确保softmax的梯度稳定性。
Three: 最后就是注意力权重和 V V V 矩阵相乘,如图所示:
Self-Attention机制的计算详解
​ (1)首先是“我”这个字对“我想吃酸菜鱼”这句话里面每个字的注意力权重,和V中“我想吃酸菜鱼”里面每个字的第一维特征进行相乘再求和,这个过程其实就相当于用每个字的权重对每个字的特征进行加权求和,

​ (2)然后再用“我”这个字对对“我想吃酸菜鱼”这句话里面每个字的注意力权重和V中“我想吃酸菜鱼”里面每个字的第二维特征进行相乘再求和,依次类推最终也就得到了(L,768)的结果矩阵,和输入保持一致。

注意:

​ 注意力机制是没有位置信息的,所以需要引入位置编码。

4. 引申

​ 介绍transformer相关的内部结构。

4.1 Multi-Head Attention

​ 即多头注意力机制,其作用是让模型从多个子空间中关注到不同方面的信息。其模型图如下:
Self-Attention机制的计算详解

​ 其计算步骤如下

Step1: 初始化多组 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV

​ 如上图中初始化了三组,分别是:
W 1 Q , W 1 K , W 1 V W 2 Q , W 2 K , W 2 V W 3 Q , W 3 K , W 3 V W_1^Q,W_1^K,W_1^V \\ W_2^Q,W_2^K,W_2^V \\ W_3^Q,W_3^K,W_3^V W1Q,W1K,W1VW2Q,W2K,W2VW3Q,W3K,W3V
Step2: 分别计算每组的 Q , K , V Q,K,V QKV

​ 得到三组 Q , K , V Q, K, V Q,K,V

Step3: 分别按照之前的公式计算Attention

​ 由图将计算到的Attention称之为: Z 1 , Z 2 , Z 3 Z_1, Z_2, Z_3 Z1,Z2,Z3

Step4: 将各组Attention( Z 1 , Z 2 , Z 3 Z_1, Z_2, Z_3 Z1,Z2,Z3)拼接然后进行线性变换映射到原来的空间中

​ 如下图:
Self-Attention机制的计算详解
​ 将三个 Z 1 , Z 2 , Z 3 Z_1, Z_2, Z_3 Z1,Z2,Z3进行凭借,然后经过线性变换,即得到和原来输入同等维度的Z, 也可以理解为最终的注意力。

4.2 Add & Norm

​ Add操作的目的是:借鉴了残差网络,防止退化

​ Norm操作的目的是:对向量进行标准化,以达到加速收敛的效果
Self-Attention机制的计算详解
注:

(1)其中主要部分有参考下面这篇文章,写得非常好Attention注意力机制详解

(2)这个视频也讲解的非常好 https://www.bilibili.com/video/BV1E44y1Y7B4/?spm_id_from=autoNext文章来源地址https://www.toymoban.com/news/detail-498505.html

到了这里,关于Self-Attention机制的计算详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • transformer模型,文本生成任务。 self-attention结构

    transformer模型,文本生成任务。 self-attention结构

    大家好,好久不见,终于又有机会来学习深度学习了, 这次我们通过全球人工智能大赛算法挑战赛的赛道一来学习。 2023全球人工智能技术创新大赛 - 算法挑战赛 赛道一的任务是  通过医疗图像的文字描述来生成医生的诊断描述。 这是一个典型的文本生成任务, 因此transf

    2023年04月09日
    浏览(12)
  • 【深度学习】Transformer,Self-Attention,Multi-Head Attention

    【深度学习】Transformer,Self-Attention,Multi-Head Attention

    必读文章: https://blog.csdn.net/qq_37541097/article/details/117691873 论文名:Attention Is All You Need Query(Q)表示当前时间步的输入信息,它与Key(K)进行点积操作,用于计算注意力权重。 Key(K)表示序列中所有时间步的信息,与Query(Q)进行点积操作,用于计算注意力权重。 Value(

    2024年02月12日
    浏览(8)
  • self-attention为什么要除以根号d_k

    self-attention的公式为 a t t e n t i o n ( Q , K , V ) = S o f t m a x ( Q K d k ) V attention(Q,K,V)=Softmax( frac{QK}{sqrt{d_{k}}})V a tt e n t i o n ( Q , K , V ) = S o f t ma x ( d k ​ ​ Q K ​ ) V 个人理解,除以 d k sqrt{d_{k}} d k ​ ​ 的原因有两点: d k d_{k} d k ​ 是词向量/隐藏层的维度 1、首先要除以一个数

    2023年04月10日
    浏览(9)
  • 【读点论文】Separable Self-attention for Mobile Vision Transformers,通过引入隐变量将Q矩阵和K矩阵的算数复杂度降低成线性复杂度,分步计算注意力。

    【读点论文】Separable Self-attention for Mobile Vision Transformers,通过引入隐变量将Q矩阵和K矩阵的算数复杂度降低成线性复杂度,分步计算注意力。

    移动视觉transformer(MobileViT)可以在多个移动视觉任务中实现最先进的性能,包括分类和检测。虽然这些模型的参数较少, 但与基于卷积神经网络的模型相比,它们具有较高的延迟 。MobileViT的主要效率瓶颈是transformer中的多头自我注意(MHA),相对于令牌(或补丁)的数量k,它需要

    2023年04月16日
    浏览(9)
  • 相对位置编码之RPR式:《Self-Attention with Relative Position Representations》论文笔记

    相对位置编码之RPR式:《Self-Attention with Relative Position Representations》论文笔记

    😄 额,本想学学XLNet的,然后XLNet又是以transformer-XL为主要结构,然后transformer-XL做了两个改进:一个是结构上做了segment-level的循环机制,一个是在attention机制里引入了相对位置编码信息来避免不同segment的同一位置采用相同的绝对位置编码的不合理。但无奈看到相对位置编码

    2024年02月17日
    浏览(12)
  • NLP入门:word2vec & self-attention & transformer & diffusion的技术演变

    NLP入门:word2vec & self-attention & transformer & diffusion的技术演变

    这一段时间大模型的相关进展如火如荼,吸引了很多人的目光;本文从nlp领域入门的角度来总结相关的技术路线演变路线。 1、introduction 自然语言处理(Natural Language Processing),简称NLP,是通过统计学、数学模型、机器学习等相关技术研究人类语言的特征,对其进行数学的表

    2024年02月11日
    浏览(13)
  • Transformer的Q、K、V和Mutil-Head Self-Attention(超详细解读)

    Transformer的Q、K、V和Mutil-Head Self-Attention(超详细解读)

    目录 一.什么是Q、K、V 二.Mutil-Head Self-Attention Transformer大行其道,在众多领域取得了不可忽视的成就。如今大火的语言大模型LLM也都是基于Transformer,但是Transformer中的Q、K、V和多头注意力到底是什么呢?这里简单做个学习记录,进行再一次认识和掌握。 Transformer中的Q、K和

    2024年02月06日
    浏览(12)
  • Python 基于pytorch实现多头自注意力机制代码;Multiheads-Self-Attention代码实现

    Python 基于pytorch实现多头自注意力机制代码;Multiheads-Self-Attention代码实现

    多头自注意力机制(Multi-Head Self-Attention)是一种注意力机制的变体,用于增强模型在处理序列数据时的建模能力。它在自注意力机制的基础上引入了多个头(Attention Head),每个头都可以学习到不同的注意力权重分布,从而能够捕捉到不同的关系和特征。 多头自注意力机制可

    2024年04月26日
    浏览(8)
  • 学习Transformer前言(Self Attention Multi head self attention)

    学习Transformer前言(Self Attention Multi head self attention)

    一直在做项目,也比较懒没有挤出时间去学习新的东西,感觉停滞很久了,好长一段时间都没有新的知识输入,早就需要就去学习transformer了,因此先来学习注意力机制,本文为个人的一个笔记总结。主要是基于李宏毅老师的一个课程视频笔记,论文原文,加上B站UP主的霹雳

    2024年02月02日
    浏览(9)
  • 神经网络学习小记录73——Pytorch CA(Coordinate attention)注意力机制的解析与代码详解

    神经网络学习小记录73——Pytorch CA(Coordinate attention)注意力机制的解析与代码详解

    CA注意力机制是最近提出的一种注意力机制,全面关注特征层的空间信息和通道信息。 Github源码下载地址为: https://github.com/bubbliiiing/yolov4-tiny-pytorch 复制该路径到地址栏跳转。 该文章的作者认为现有的注意力机制(如CBAM、SE)在求取通道注意力的时候,通道的处理一般是采

    2024年02月06日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包