【Transformer】single self-attention的理解与计算步骤

参考B站Enzo_Mi老师
【self-Attention|自注意力机制 |位置编码 | 理论 + 代码】https://www.bilibili.com/video/BV1qo4y1F7Ep?vd_source=19425b683f74eeac34bde8ddf968a0d6
建议大家去看老师的原视频,讲解非常清晰,这里个人整理一下思路

如何理解Q K V

在这里插入图片描述
attention和推荐算法有类似之处

我们在电商购物平台上输入查询query,然后平台返回商品列表

系统会根据query去查找所有相似度高的商品,商品自带的标签就是key,query与key相乘就得到相似度

然后根据客户的评价给所有商品打分,得到value,评价高的value就高。用户喜不喜欢、评价高不高、销量高不高就是value

最后,把相似度和value相乘就得到总分

在这里插入图片描述

关于什么是token,我的理解就是输入到transformer模型中的一个batch中的最小单元的定义,可以翻译成令牌,也可以翻译成词元 对于NLP token就是每个词,对于CV token就是一个个patch图像块

深入理解可以参考知乎的这些回答 NLP领域中的token和tokenization到底指的是什么?

self attention的计算步骤

1.计算Q K V

举个例子,这在有一个四个词的句子 I have a dog 通过embedding产生四个向量,得到4个token,v=value表示词的价值,比如按照直觉,dog的价值就高一些,如果要获得a1这个词与其他词的相似度的时候,就需要用q1与其他的k2,k3,k4相乘,就得到了a1这个词与其他词的相似度,以此类推。

在这里插入图片描述

a1 a2 a3 a4 就是4个token 那么输入的向量 就是一个三维的向量 (batch_size,num,dim_in )
batch_size的我们每次用多少个batch,num就是这一批的token的个数,这里也就是4,dim_in是每个token的特征维数,这里可以看到是2,因此每个token在这里是一个12的向量,concat到一起就是42的向量,按行堆叠,这里为了便于理解我们是一个一个token的计算,但是为了提高计算速度,实际过程是一个batch一起算,
对于q1,它等于a1W1 即12的向量乘以22的向量,得到的q1是12的向量。k1等于a1乘以W2,也是12的向量乘以22的向量,得到的k1是12的向量。v1等于a1W3,是12的向量乘以23的向量,得到的v1是1*2的向量。这个时候第一个token即a1的q,k,v就计算完了。以此类推,其他token的q,k,v都是这么计算的。

以上的介绍是为了方便大家理解,但是实际去实现的时候,为了加速计算过程,我们发现每个token在计算各自的q,k,v的时候实际上是共享了W1,W2,W3矩阵,那么我们就可以把整个batch与W1,W2,W3矩阵相乘,得到整体的Q、K、V
如下图

在这里插入图片描述

2.计算相似度分数 α \alpha α

对于q1,它等于a1W1 即12的向量乘以22的向量,得到的q1是12的向量,依次k1,k2,k3,k4相乘,k1等于a1乘以W2,也是12的向量乘以22的向量,得到的k1是12的向量,把k1向量进行转置,得到的 k 1 T k_1^T k1T就是12的向量乘以2*1的向量,得到的就是一个数,这个数再除以 d k \sqrt{d_k} dk d k d_k dk是k向量的维数,也就是2,得到 α \alpha α,相似度分数。

3.计算归一化的相似度分数 α ^ \hat\alpha α^

这一步实际上就是做了一个softmax操作,相对比较简单。

在这里插入图片描述

输入的是数,输出的还是数

计算Attention

归一化的相似度分数再分别与v1,v2,v3,v4相乘后再相加,这就计算完了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类和对象-继承

师从黑马程序员 基本语法 有些类与类之间存在特殊的关系,例如: 定义这些类时,下一级别的成员除了拥有上一级的共性,还有自己的特性。 这时候我们就可以考虑继承技术,减少重复代码 语法:class 子类&…

【鸿蒙 HarmonyOS 4.0】应用状态:LocalStorage/AppStorage/PersistentStorage

一、介绍 如果要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。 LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象&…

Android Studio下载gradle超时问题解决

方法一 1. 配置根目录的setting.gradle.kts文件 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urluri ("https://maven.aliyun.com/repos…

【Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令】

Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令 1、名词解释 1.1 CUDA CUDA(Compute Unified Device Architecture)是由NVIDIA开发的用于并行计算的平台和编程模型。CUDA旨在利用NVIDIA GPU(图形处理单元)的强大计算…

SpringCloudGateway全局过滤器

文章目录 全局过滤器的作用自定义全局过滤器过滤器执行的顺序 上一篇 Gateway理论与实践 介绍的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。 全局过滤器的作用 全局过滤器的…

App前端开发跨平台框架比较:React Native、Flutter、Xamarin等

引言 移动应用开发领域的跨平台框架正在不断演进,为开发者提供更多选择。在本文中,我们将比较几个流行的跨平台框架:React Native、Flutter和Xamarin等。讨论它们的优缺点、适用场景以及开发体验。 第一部分 React Native: 优缺点、适用场景…

大模型时代下的自动驾驶研发测试工具链-SimCycle

前言: 最近OpenAI公司的新产品Sora的发布,正式掀起了AI在视频创作相关行业的革新浪潮,AI不再仅限于文本、语音和图像,而直接可以完成视频的生成,这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…

接口自动化框架(Pytest+request+Allure)

前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种&#xff0c…

python学习the sixth day

python函数进阶 一、函数多返回值 二、函数的多种参数使用 1.位置参数 2.关键字参数 3.缺省参数 设置默认值,必须放在最后面 4.不定长参数 4.总结 三、匿名函数 1.函数作为参数传递 这是计算逻辑的传递,而非数据的传递 2.lambda匿名函数 python文件操…

【vue.js】文档解读【day 3】 | 条件渲染

如果阅读有疑问的话,欢迎评论或私信!! 文章目录 条件渲染前言:v-ifv-elsev-else-iftemplate中的v-ifv-showv-if vs v-show 条件渲染 前言: 在JavaScript中,我们知道条件控制语句可以控制程序的走向&#…

ReactNative项目构建分析与思考之react-native-gradle-plugin

前一段时间由于业务需要,接触了下React Native相关的知识,以一个Android开发者的视角,对React Native 项目组织和构建流程有了一些粗浅的认识,同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…

阿珊详解Vue Router的守卫机制

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 问题描述:在 Windows 环境中,您希望通过一个 Python 脚本来实现特定的自动化任务,该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…

CXYGZL实现钉钉、飞书和微信全面覆盖!!!

非常欣慰能在这里与大家分享,CXYGZL已圆满实现多端互通的目标!!! 无论您是在手机、电脑还是平板上使用钉钉、企微还是飞书,只需将CXYGZL轻松集成到您的办公软件中,即可实现无缝审批处理各项任务&#xff0c…

计算机找不到msvcr120.dll的五种修复方法,轻松搞定msvcr120.dll丢失问题

当计算机系统中msvcr120.dll文件丢失时,可能会引发一系列运行问题和故障现象。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分,对于许多Windows应用程序的正常运行至关重要。由于msvcr120.dll是许多软件在运行过程中依赖的重要动态链…

Java项目:44 ssm003在线医疗服务系统+jsp(含文档)

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 主要功能 前台登录: 注册用户:用户名、密码、姓名、联系电话 注册医生:医生工号、密码、医生姓名、职称、…

idea:springboot项目搭建

目录 一、创建项目 1、File → New → Project 2、Spring Initializr → Next 3、填写信息 → Next 4、web → Spring Web → Next 5、填写信息 → Finish 6、处理配置不合理内容 7、注意事项 7.1 有依赖包,却显示找不到依赖,刷新一下maven 7.…

基于 HBase Phoenix 构建实时数仓(2)—— HBase 完全分布式安装

目录 一、开启 HDFS 机柜感知 1. 增加 core-site.xml 配置项 2. 创建机柜感知脚本 3. 创建机柜配置信息文件 4. 分发相关文件到其它节点 5. 重启 HDFS 使机柜感知生效 二、主机规划 三、安装配置 HBase 完全分布式集群 1. 在所有节点上配置环境变量 2. 解压、配置环境…

瑞_Redis_短信登录(一)

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系…

2023年12月CCF-GESP编程能力等级认证Python编程七级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(每题 2 分,共 30 分) 第1题 假设变量 x 为 float 类型,如果下面代码输入为 100,输出最接近( )。 A.0 B.-5 C.-8 D.8 答案:B 第2题 对于下面动态规划方法实现的函数,以下选项中…