试图带你一文搞懂transformer注意力机制(Self-Attention)的本质

news2024/11/9 5:52:48

这篇文章主要想搞懂以下几个问题:

1、什么是自注意力(Self-Attention)

2、Q,K,V是什么

好了废话不多说,直接进入正题

Q,K,V分别代表query,key和value,这很容易让人联想到python的字典数据结构,假设我们有一个字典,存放着一个班级的身高(key)和体重(value)关系

{'160':50,'166':57,'173':65,'177':67,...}

这里取前三组,并以表格的形式展现:

        假设接到一个查询(query)身高为162,该查询并未在字典中,想要通过已有的字典数据预测改身高下的体重信息,直观推断,该体重可能会在50-57之间。但是想要定量的计算体重的预测值,我们可以通过加权平均的方式进行求解。

162和160之间的距离为2,162与166之间的距离为4,160与166之间的距离为6,那么162->160取4/6的权重,162->166取2/6的权重。

那么映射到体重上,对体重进行加权,就可以估计出162对应的体重约为50*(4/6)+57*(2/6)=52.33,接近50也符合预期。

因为162在[160,166]之间,所以这里很容易的为他们分配更多的权重,更加的注意他们,越近分配的权重越大,分别为他们分配了2/3和1/3的注意力权重。

但是在字典中,可能其他的键值对(key,value)对该query也存在影响,但是我们没有用上,那么要怎么用上字典中的所有数据,让估计的值更准确呢?

假设用一个函数\alpha(q,k_{i})来表示qk所对应的注意力权重,那么体重的预测值f(q)可以用以下方式得出:

f(q)=\alpha(q,k_{1}) v_{1} + \alpha(q,k_{2}) v_{2} + \alpha(q,k_{3}) v_{3} = \sum_{i=1}^{3}\alpha(q,k_{i}) v_{i}

其中\alpha是能够表征相关性的函数,以高斯核为例,那么

\alpha(q,k_{i})=softmax(-\frac{1}{2}(q-k_{i})^{2})=\frac{e^{-\frac{1}{2}(q-k_{i})^{2}}}{\sum_{j=1}^{3}e^{-\frac{1}{2}(q-k_{j})^{2}}}

其中-\frac{1}{2}(q-k_{i})^{2}为注意力分数,softmax(-\frac{1}{2}(q-k_{i})^{2})为注意力权重。

将对应的数值带入到公式中可得(其中的数字不是张量,所以用了x)

f(162)=\alpha(162,160) \times 50 + \alpha(162,166) \times 57 + \alpha(162,173) \times 65 = \sum_{i=1}^{3}\alpha(162,k_{i})\times v_{i} 

这样我们就可以利用上字典中其他的元素,通过身高来估计体重,这也就是注意力机制。

以上表示的是输入数据为一维的情况,当query,key,value为多维的情况也是类似的。

在介绍多维情况前先介绍注意力分数\alpha(q,k_{i})的计算方式有以下几种:

        目前大多的模型都是缩放点积模型,Transformer模型使用缩放点积注意力机制而不使用加性模型,这是因为缩放点积注意力在实际应用中表现更好。它具有更好的计算效率,适用于长序列,而且有更好的梯度传播性质,使得训练更加稳定。此设计是为了提高模型的性能和效率。这里以点积模型为例。

 对于q_{1}k_{1}

\alpha(q_{1},k_{1})=softmax(q_{1}\cdot k_{1}^{T})

其余的 q_{2}k_{2}以及q_{3}k_{3}以相同的方式处理。

\alpha(q_{2},k_{2})=softmax(q_{2}\cdot k_{2}^{T})

\alpha(q_{3},k_{3})=softmax(q_{3}\cdot k_{3}^{T})

那么就能得到: 

f(q)=\alpha(q_{1},k_{1}^{T}) v_{1} + \alpha(q_{2},k_{2}^{T}) v_{2} + \alpha(q_{2},k_{3}^{T}) v_{3} = \sum_{i=1}^{3}\alpha(q_{i},k_{i}^{T}) v_{i} 

将其转换为矩阵形式:

 即:

f(Q) = softmax(Q\cdot K^{T})\cdot V

还会除以一个特征维度\sqrt{d_{k}}将得分进行缩放,让梯度更稳定,乘法可能会产生梯度爆炸问题。

也就是:

f(Q) = softmax(Q\cdot K^{T}/\sqrt{d_{k}})\cdot V

这就是常见的缩放点积模型。经过softmax后,大值被放大,小值被抑制,这让模型能更加关注权重更大的地方。

如果其中的QKV都是同一个矩阵,那么他就是自注意模型了

X表示其中的一个矩阵

那么f(X) = softmax(X\cdot X^{T}/\sqrt{d_{k}})\cdot X

直接这么做其实没有多大意义的,实际的transformer中会将QKV使用linear做线性变换(可学习参数W),映射到不同的线性空间,并且会将其分成多个head,每个head能学到不同的东西,来增加特征的多样性,从而为模型提供更多的表达能力。

那么就能得到

f(X) = softmax(XW_{q}\cdot X^{T}W_{k}^{T}/\sqrt{d_{k}})\cdot XW_{v}

也就是自注意模型的公式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西安交大转子数据集故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型)

1.运行效果:西安交大转子数据集故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型)_哔哩哔哩_bilibili 2.环境库版本 如果库版本不一样, 一般也可以运行,这里展示我运行时候的库版本,是为了…

多线程 - 锁策略 CAS

常见的锁策略 此处谈到的锁策略,不局限于 Java,C,Python,数据库,操作系统……但凡是涉及到锁,都是可以应用到下列的锁策略的 乐观锁 vs 悲观锁 锁的实现者,预测接下来锁冲突(锁竞争,两个线程针对一个对象加锁,产生阻塞等待了)的概率是大,还是不大,根据这个冲突的概率,来接下…

30+程序员:如何成为工作领域专家丨IDCF

想要独立完成有一定复杂度的开发和维护工作,或者带领团队完成产品发布、项目交付?要成为研发经理、核心项目负责人? 但又苦于没有丰富的实战经验、或是有经验但是没有可以证明能力水平的认证。 在IT行业,年龄是一个敏感话题。特…

AI一体化运维监控方案助力医院监控体系信息化、智能化

智慧医院是现代医疗领域的新兴概念,是通过先进的物联网技术和新兴技术联合人工智能,实现一体化医院运维监控管理,旨在提升医院的安全性、运行效率和服务质量。 具体方案 1、 视频监控系统 医院可以安装视频监控摄像头,覆盖关键区…

vue-mixin

1.vue中,混入(mixin)是一种特殊的使用方式。一个混入对象可以包含任意的组件配置选项(data, props, components, watch,computed…)可以根据需求"封装"一些可复用的单元,并在使用时根据一定的策略合并到组件的选项中,使用时和组件自…

记录使用vant组件库的Popup的问题

使用过程中,需要实现点击遮罩层不关闭,智能点击关闭按钮或提交按钮才能关闭遮罩层,看了官网要使用close-on-click-overlay属性, 一开始的写法是错误的: close-on-click-overlayfalse 这个写法明显传递的是string, 而官网中明确要求要穿布尔值, 所以需要在前面加冒号 :clos…

【基础篇】三、Flink集群角色、系统架构以及作业提交流程

文章目录 1、集群角色2、部署模式3、Flink系统架构3.1 作业管理器(JobManager)3.2 任务管理器(TaskManager) 4、独立部署会话模式下的作业提交流程5、Yarn部署的应用模式下作业提交流程 1、集群角色 Flink提交作业和执行任务&…

04在命令行中使用Maven命令创建Maven版的Web工程,并将工程部署到服务器的步骤

创建Maven版的Web工程 使用命令生成Web工程 使用mvn archetype:generate命令生成Web工程时,需要使用一个专门生成Web工程骨架的archetype(参照官网看到它的用法) -D表示后面要附加命令的参数,字母D和后面的参数是紧挨着的,中间没有任何其它…

Mac下通过nvm管理node

背景 本地有两个项目,老项目需要用到node 14,新项目需要用node 16,所以只能通过nvm来管理node了 卸载原始的node 我的node是通过官网的.pkg文件安装的,可以通过以下命令进行删除 sudo rm -rf /usr/local/{bin/{node,npm},lib/…

第四篇Android--TextView使用详解

TextView是View体系中的一员&#xff0c;继承自View&#xff0c;用于在界面中展示文字。 基本用法&#xff1a; <TextViewandroid:id"id/textview"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&q…

一文带你上手自动化测试中的PO模式!

在UI的自动化测试中&#xff0c;我们需要把测试使用到的数据分离到文件中&#xff0c;如果单纯的写在我们的测试模块里面&#xff0c;不是一个好的设计&#xff0c;所以不管是什么类型的自动化测试&#xff0c;都是需要把数据分离出来的。当然分离到具体的文件里面&#xff0c;…

Arcgis实现Tiff合并

Arcgis实现Tiff合并 现有四幅Tiff影像 打开数据管理工具 输入使用这四幅影像 下面这个就是建立数据库&#xff0c;这个不对 点击确定 合成完毕

Facebook广告账户被封?最全防封及申诉指南

Facebook广告是海外营销的一大利器&#xff0c;但是随着互联网的发展&#xff0c;有部分不法分子正在利用他进行盈利&#xff0c;导致Facebook官方安全审核日益严格&#xff0c;不少卖家遭遇封号问题&#xff01;这篇文章就来教你如何更好地管理 Facebook广告帐户&#xff0c;实…

精品Python的美食推荐系统厨房点餐订餐

《[含文档PPT源码等]精品Python的美食推荐系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、VUE.…

大模型增长时代!低代码和 AI 的能力远不止 APP 开发

从低代码开发引发效率革命&#xff0c;到生成式 AI 打破传统限制、颠覆想象&#xff0c;一个前所未有的创造力时代已然开启。作为这场技术变革的见证者和参与者&#xff0c;让创新技术真正“为己所用”&#xff0c;解锁更多的潜在应用场景和机会&#xff0c;无疑是我们共同的目…

es6(二)——常用es6说明

ES6的系列文章目录 es6&#xff08;一&#xff09;——var和let和const的区别 文章目录 ES6的系列文章目录一、变量的结构赋值1.数组的结构赋值2.对象的结构赋值 二、模板字符串三、扩展运算符1.字符串的使用2.数组的使用 四、箭头函数1.普通函数的定义2.箭头函数的定义3.箭头…

大数据时代精准营销是提升品牌竞争力的核心

在营销理论基石渐被撼动和数字时代逐渐兴起的环境下&#xff0c;基于大众市场和大众消费的传统营销理论和方式在受众裂变(碎片化与再中心化)的现实中遇到了瓶颈&#xff0c;传统营销理念和方式在寻找目标受众的过程中已失去了威力。在数字化环境下&#xff0c;如何更好、更精准…

官方烧录软件烧写2023.10版本树莓派镜像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载官方系统二、使用步骤1.打开软件烧写镜像2. ssh是什么&#xff1f;3. 远程控制2.VNC连接3.VNC突然断开&#xff0c;使用外接显示器和鼠标双击打开wifi即…

有关数据集处理的脚本工具【附代码】

在做分类项目的时候(包括目标检测)&#xff0c;经常会涉及到数据集的预处理&#xff0c;这里我将把一些自己写的工具脚本代码开源出来供大家使用&#xff0c;后期也将不定时的更新。 相关功能&#xff1a; 1.分类任务one-hot标签转单标签 2.数据集中各个类别的统计 3.数据集…

ssm+vue的课程网络学习平台管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的课程网络学习平台管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…