attention 注意力机制 学习笔记-GPT2
注意力机制
这可能是比较核心的地方了。
gpt2 是一个decoder-only模型,也就是仅仅使用decoder层而没有encoder层。
decoder层中使用了masked-attention 来进行注意力计算。在看代码之前,先了解attention-forward的相关背景知识。
在普通的self-attention 中,对于一个长为T的句子,对其中第t个单词。需要计算t和句子中所有T个单词的注意力。也就是使用词t的Q向量 q t q_t qt 和 T中的所有单词的key向量 k j , 0 < = j < = T k_j, 0<=j<=T kj,0<=j<=T相乘。得到词t和句子中其他单词的注意力得分。

于是对于词t和当前句子S, 得到了注意力得分向量,而后对该向量使用softmax. 标准化的同时得到softmax后的注意力得分。
然后使用 每个词对应的值向量与注意力得分相乘之后再求和
( v 1 , v 2 , . . . , v T ) ( s c o r e t 1 s c o r e t 2 . . . s c o r e t T ) = o u t t (v_1, v_2, ..., v_T) \begin{pmatrix}score_{t1}\\score_{t2}\\... \\score_{tT}\end{pmatrix} = out_t (v1,v2,...,vT) scoret1scoret2...scoretT =outt
这里要注意, s o c r e t i socre_{ti} socreti 是一个标量值,但是 v t v_t vt 是 一个向量,长度和词嵌入向量长度相同,相加时,对每个向量位置元素对应相加。

对于masked-attention呢,实际上就是计算注意力得分时候,对第t个单词,仅仅计算0到t单词的注意力得分,t~T 部分的注意力得分不计算,计算softmaxs时t之后的部分以初值0代替。


multi-head attention
前面了解了attention基本知识,就很好理解多头注意力了。多头注意力实际上就是将单个Q,K,V向量,分裂为多个头,然后和self-attention一样流程计算每个头的注意力,最后得到一个输出向量,然后将多个头的输出向量拼接到一起,得到最后的输出结果。

比如,原本的一个向量长度为 l e n g t h Q = = l e n g t h K = = l e n g t h V = = 168 length_Q == length_K == length_V == 168 lengthQ==lengthK==lengthV==168 分裂为12个注意力头之后,每个注意力头的QKV向量长度为 l e n g t h Q i = = l e n g t h K i = = l e n g t h V i = 64 , i ∈ [ 0 , 12 ] length_{Q_i} == length_{K_i} == length_{V_i} = 64, i \in [0,12] lengthQi==lengthKi==lengthVi=64,i∈[0,12],
然后和分裂的self-attention一样,对每个词t的第i个头的Q向量 Q t i Q_{t_i} Qti,与其他词的第i个头的K向量 K j i , 0 < = j < = t , i ∈ [ 0 , 12 ] K_{j_i}, 0<=j<=t, i\in[0,12] Kji,0<=j<=t,i∈[0,12] 内积,得到注意力得分。
而后和self-attention一样的,每一个注意力头的Value向量和该头的注意力得分相乘,得到该注意力头的结果。
对于12个头长度为64的attention,最后得到12个64长的注意力结果
再将其拼接,得到长为768的注意attention forward结果,和单个注意力头但是长为768的attention结果相同。

相关文章:
attention 注意力机制 学习笔记-GPT2
注意力机制 这可能是比较核心的地方了。 gpt2 是一个decoder-only模型,也就是仅仅使用decoder层而没有encoder层。 decoder层中使用了masked-attention 来进行注意力计算。在看代码之前,先了解attention-forward的相关背景知识。 在普通的self-atten…...
什么是HTTP,什么是HTTPS?HTTP和HTTPS都有哪些区别?
什么是 HTTP? HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,用于在互联网上进行数据通信。它定义了客户端(通常是浏览器)和服务器之间的请求和响应格式。HTTP 是无状态的…...
SkyWalking-安装
SkyWalking-简单介绍 是一个开源的分布式追踪系统,用于检测、诊断和优化分布式系统的功能。 支持 ElasticSearch、H2、MySQL、PostgreSql 等数据库 基于 ElasticSearch 的情况 ElasticSearch(ES) 安装 1、下载并解压 https://www.elastic…...
RabbitMQ运维
1. 单机多节点 1.1 搭建RabbitMQ ①安装RabbitMQ 略 ②确认RabbitMQ运⾏没问题 #查看RabbitMQ状态 rabbitmqctl status 节点名称: 端口号: 25672:Erlang分布式节点通信的默认端⼝, Erlang是RabbitMQ的底层通信协议.15672: Web管理界⾯的默认端⼝, 通过这个端⼝可以访问R…...
Go语言并发精髓:深入理解和运用go语句
Go语言并发精髓:深入理解和运用go语句 在Go语言的世界里,go语句是实现并发的核心,它简洁而强大,允许程序以前所未有的方式运行多个任务。本文将深入探讨go语句及其执行规则,揭示Go语言并发编程的内在机制,并提供实际案例帮助读者掌握其用法。 1. go语句的基本概念(Wha…...
基于STM32的智能家居系统:MQTT、AT指令、TCP\HTTP、IIC技术
一、项目概述 随着智能家居技术的不断发展,越来越多的家庭开始使用智能设备来提升生活质量和居住安全性。智能家居系统不仅提供了便利的生活方式,还能有效地监测家庭环境,保障家庭安全。本项目以设计一种基于STM32单片机的智能家居系统为目标…...
分糖果(相等分配)
题目:有n种不同口味的糖果,第i种糖果的数量为a[i],现在需要把糖果分给m个人。分给每个人糖果的数量必须是相等的,并且每个人只能选择一种糖果。也就是说,可以把一种糖果分给多个人,但是一个人的糖果不能有多…...
docker构建jdk11
# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板 # 因为jdk必须运行在操作系统之上 FROM centos:7.9.2009# 作者名 MAINTAINER yuanhang# 创建一个新目录来存储jdk文件 RUN mkdir /usr/local/java#将jdk压缩文件复制到镜像中&#…...
唐帕科技校园语音报警系统:通过关键词识别,阻止校园霸凌事件
校园霸凌问题已成为全球教育领域的严峻挑战,给受害者带来了身心上的长期创伤。然而,随着科技的发展,尤其是人工智能和语音识别技术的不断进步,我们开始看到创新性解决方案的出现。校园语音报警系统便是其中一种利用技术手段保护学…...
酒店行业数据仓库
重要名词: PMS:酒店管理系统CRS:中央预定系统客户:可以分为会员、散客(自行到店入住)、协议(与酒店长期合作,内部价)、中介预定:可以分为线上预定、线下预定…...
A029-基于Spring Boot的物流管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
Python 列表推导式是什么 列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式, 它在 Python 中用于 转换 和 过滤 数据。 其语法格式如下所示,其中 [if 条件表达式] 可省略。 [表达式 for 迭代变量…...
一文了解Android的核心系统服务
在 Android 系统中,核心系统服务(Core System Services)是应用和系统功能正常运行的基石。它们负责提供系统级的资源和操作支持,包含了从启动设备、管理进程到提供应用基础组件的方方面面。以下是 Android 中一些重要的核心系统服…...
Scala的Array(1)
Scala的Array表示长度不可变的数组,若需要定义可变数组需要倒包 import scala.collection.mutable.ArrayBuffer 下面是关于Array的一些用法: import scala.collection.mutable.ArrayBufferobject test29 { // //不可变数组 Array // def main(args:…...
[Linux] Linux信号捕捉
在Linux中,信号捕捉是通过使用信号处理函数来实现的。信号是操作系统用于通知进程发生某些事件的机制,例如终止进程、外部中断、非法操作等。常用的信号捕捉机制是通过signal()函数或sigaction()函数来注册信号处理程序。 1. 使用signal()函数 signal(…...
Elasticsearch的查询语法——DSL 查询
控制台打印日志: index-name: local_es_staff_info202404021352 DSL:{“size”:10000,“query”:{“bool”:{“must”:[{“terms”:{“emplId”:[“001756”,“000043”,“004193”],“boost”:1.0}}],“adjust_pure_negative”:true,“boost”:1.0}},“…...
开发语言中,堆区和栈区的区别
非javascript 1. 存储方式 栈区:栈区(Stack)是由系统自动分配的内存区域,通常用于存储函数的局部变量、参数、返回地址等。栈区的内存按照先进后出的顺序进行管理。堆区:堆区(Heap)是由程序员…...
驾校增加无人机培训项目可行性技术分析
驾校增加无人机培训项目的可行性技术分析,需要从市场需求、技术基础、政策支持、培训体系构建及运营等多个维度进行综合考量。以下是对这些方面的详细分析: 一、市场需求分析 1. 行业应用广泛:无人机在航拍、农业、环境监测、地理测绘、电力…...
JavaWeb后端开发知识储备1
目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象,是用于传输数据的对象,通常在服务层与表现层之间传递数据,DTO 通常用于…...
ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案
在当今快速发展的农业领域,智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快,智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
