当前位置: 首页 > news >正文

注意力机制(Attention)、自注意力机制(Self Attention)和多头注意力(Multi-head Self Attention)机制详解

目录

  • 参考
  • 一、Attention注意力机制
    • 原理
    • 计算过程
  • 二、自注意力机制
    • 2.1 自注意力关键!!
    • 2.2 实现步骤
      • 1. 获取 K Q V
      • 2. MatMul
      • 3. scale + softmax归一化
      • 4. MalMul
    • 2.3 自注意力机制的缺陷
  • 三、多头自注意力机制
    • 3.1 简介
    • 3.2 实现步骤
    • 3.3 公式

参考

感谢我的互联网导师:水论文的程序猿
参考资料和图片来源:
Transformer、GPT、BERT,预训练语言模型的前世今生
【Transformer系列(2)】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解
【Deformable DETR 论文+源码解读】Deformable Transformers for End-to-End Object Detection

一、Attention注意力机制

原理

我(查询q) 看-> 一张图 ( 被查询对象v )

我看这张图,第一眼,我就会去判断哪些东西对我而言更重要,哪些对我而言又更不重要(去计算 Q 和 V 里的事物的重要度)

重要度计算,其实是不是就是相似度计算(更接近),点乘其实是求内积。
在这里插入图片描述

计算过程

被查询对象: V = ( v 1 , v 2 , v 3 , . . . ) V = (v1, v2, v3, ...) V=v1,v2,v3,...

在transformer中,K == V

  1. 计算相似度: Q ∗ k 1 , Q ∗ k 2 , . . . . . . = s 1 , s 2 , . . s n . Q*k1 , Q*k2, ...... = s1, s2, ..sn. Qk1,Qk2,......=s1,s2,..sn.

  2. 归一化求概率: s o f t m a x ( s 1 , s 2 , s 3 , . . . ) = a 1 , a 2 , a 3 , . . a n . softmax(s1, s2, s3, ...) = a1, a2, a3, ..an. softmax(s1,s2,s3,...)=a1,a2,a3,..an.

  3. 更新V为V’: V ′ = ( a 1 ∗ v 1 + a 2 ∗ v 2 + . . . + a n ∗ v n ) V' = (a1*v1+a2*v2+...+an*vn) V=(a1v1+a2v2+...+anvn)

这样就会就得到一个新的 V’,用 V’ 代替 V。这个新的 V’除了能表示K和V(K==V),还能代表Q的信息(对Q而言对K中哪个部分关注最多,最重要),找出来了Q对K的注意力集中在哪里。

二、自注意力机制

2.1 自注意力关键!!

K、 V、 Q 来自于同一个X,三者同源。所以叫做自注意力

K V Q 如何得到? 通过x与三个向量参数( W K , W V , W Q W^K, W^V, W^Q WK,WV,WQ)相乘得到。这三个参数向量也是我们要学习的东西。

在这里插入图片描述

2.2 实现步骤

1. 获取 K Q V

有一个句子是“ T h i n k i n g M a c h i n e s ”,该句子中有两个单词,两个单词的向量分别 x 1 , x 2 ,分别与( W K , W V , W Q ) 3 个矩阵相乘得到 q 1 , q 2 , k 1 , k 2 , v 1 , v 2 的 6 个向量。 有一个句子是“Thinking Machines”,该句子中有两个单词,两个单词的向量分别x1,x2,分别与(W^K, W^V, W^Q)3个矩阵相乘得到q1,q2,k1,k2,v1,v2的6个向量。 有一个句子是ThinkingMachines,该句子中有两个单词,两个单词的向量分别x1,x2,分别与(WK,WV,WQ3个矩阵相乘得到q1,q2,k1,k2,v1,v26个向量。
在这里插入图片描述

2. MatMul

q 1 分别与 k 1 , k 2 点乘得到得分,寻找 q 1 对 x 1 , x 2 的重要信息 q1分别与k1,k2点乘得到得分,寻找q1对x1,x2的重要信息 q1分别与k1,k2点乘得到得分,寻找q1x1,x2的重要信息
在这里插入图片描述

3. scale + softmax归一化

scale:对得分进行规范,防止梯度下降出现问题。
softmax: 归一化求概率得到a1,a2
在这里插入图片描述
经过Softmax的归一化后,每个值是一个大于0且小于1的权重系数,且总和为0,这个结果可以被理解成一个权重矩阵W。

这个W就是注意力权重,其中包含着该单词与该句子之间的相关信息和更关心哪个部分。

4. MalMul

用得分比例 [0.88,0.12] 乘以[ v 1 , v 2 v1,v2 v1,v2]后得到相加得到z1 : z 1 = ( a 1 ∗ v 1 + a 1 ∗ v 2 ) z1 = (a1 * v1 + a1*v2) z1=(a1v1+a1v2)

在这里插入图片描述

得到的新向量z1就是thinking这个单词的新的词向量,z1里面包含着thinking这个单词和“Thinking Machines”这句话里每一个单词的相似程度和关联信息。

同理可得到z2向量,代表machines的新的词向量。

2.3 自注意力机制的缺陷

  1. 自注意力机制虽然考虑了所有的输入向量,但没有考虑到向量的位置信息。在实际的文字处理问题中,可能在不同位置词语具有不同的性质,比如动词往往较低频率出现在句首。(解决:引入位置编码)
  2. 模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置,有效信息抓取能力就差一些。 (解决:引入多头注意力)

三、多头自注意力机制

3.1 简介

简单理解:多组自注意力机制并行运行,最后把结果拼接起来。
在这里插入图片描述

3.2 实现步骤

  1. 定义多组 W q 、 W k 和 W v Wq、Wk和Wv WqWkWv,生成多组Q、K和V
  2. 分别对多组进行自注意力机制,得到多组 z ( z 0 − z n z(z_0-z_n zz0zn
  3. 多组 z ( z 0 − z n z(z_0-z_n zz0zn)进行拼接(cancat),再乘以矩阵W做一次线性变化降低维度,得到最终的Z。
    在这里插入图片描述

3.3 公式

在这里插入图片描述
其中,x是输入特征,z表示 query,由x经过Wq线性变换来的,k是key的索引,q 是query的索引,M 表示多头注意力的头数,m代表第几注意力头部, A m q k A_{mqk} Amqk表示第m头注意力权重(即上图a中一直到SoftMax的过程), W m ’ x k W^’_m x_k Wmxk其实就是value,整个[ ]内的过程就是图a的全过程, W m W_m Wm是注意力施加在value之后的结果经过线性变换(也就是图b的Linear)从而得到不同头部的输出结果, Ω k \Omega_k Ωk表示所有key的集合。

相关文章:

  • Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法
  • 【算法】算法题-20231114
  • 20. 机器学习——PCA 与 LDA
  • 神经网络激活函数的使用
  • 友元的三种实现
  • c语言-assert(断言)的笔记
  • openssl+sha256开发实例(C++)
  • 【Shell脚本10】Shell 流程控制
  • java算法学习索引之动态规划
  • IntelliJ IDEA 安装 GitHub Copilot插件 (最新)
  • HTTP服务器——tomcat的安装和使用
  • 前端案例-css实现ul中对li进行换行
  • 若依侧边栏添加计数标记效果
  • Flink之Java Table API的使用
  • GPU编程
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • IndexedDB
  • JavaScript函数式编程(一)
  • orm2 中文文档 3.1 模型属性
  • PhantomJS 安装
  • rabbitmq延迟消息示例
  • TCP拥塞控制
  • Vue学习第二天
  • 基于游标的分页接口实现
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 漂亮刷新控件-iOS
  • 前端存储 - localStorage
  • 前端技术周刊 2019-02-11 Serverless
  • 驱动程序原理
  • 如何利用MongoDB打造TOP榜小程序
  • 学习笔记:对象,原型和继承(1)
  • 一、python与pycharm的安装
  • Java总结 - String - 这篇请使劲喷我
  • ​卜东波研究员:高观点下的少儿计算思维
  • #pragma multi_compile #pragma shader_feature
  • $$$$GB2312-80区位编码表$$$$
  • (09)Hive——CTE 公共表达式
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2015)JS ES6 必知的十个 特性
  • (二)c52学习之旅-简单了解单片机
  • (南京观海微电子)——I3C协议介绍
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core中Emit的使用
  • .net framework4与其client profile版本的区别
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中 MVC 工厂模式浅析
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @Async注解的坑,小心