Self-attention与multi-head self-attention

自注意力(self-attention)允许模型在处理序列数据时,根据输入中的其他位置来加权考虑每个位置的信息。这对于处理长文本或序列中的依赖关系非常有用。

多头自注意力(multi-head self-attention)建立在自注意力机制之上,它通过允许模型同时关注不同表示子空间的信息,来增强模型捕捉不同类型的关系和依赖性的能力。

虽然自注意力专注于捕捉序列内部的依赖关系,但多头自注意力通过利用多个注意力头来捕捉不同类型的关系和依赖关系,提高了这种捕捉能力。

自注意力机制的实现:

  1. 计算注意力分数(Attention Scores)
    给定一个输入序列 X X X,我们首先将其投影到查询 Q Q Q,键 K K K,和值 V V V 的向量空间中,这是通过学习得到的权重矩阵 W Q W_Q WQ W K W_K WK W V W_V WV 实现的。然后,我们计算查询与键的点积,最后通过 softmax 函数进行标准化,得到注意力分数:

    Attention Scores = softmax ( Q K T d k ) \text{Attention Scores} = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) Attention Scores=softmax(dk QKT)
    其中, d k d_k dk 是键的维度。

  2. 计算加权和(Weighted Sum)
    注意力分数与值 V V V 相乘,得到每个位置的加权和。这一步捕捉了每个位置对其他所有位置的相对重要性。具体计算公式为:

    Self-Attention ( X ) = Attention Scores ⋅ V \text{Self-Attention}(X) = \text{Attention Scores} \cdot V Self-Attention(X)=Attention ScoresV

多头自注意力机制的实现

多头自注意力不只是单一地关注输入序列的全局信息,而是同时从不同的角度去看待输入序列。这就好比你在看待一个问题时,可以从不同的角度去思考,这样就能够更全面地理解问题了。

具体来说,多头自注意力包括了几个步骤:

  1. 投影(Projection)
    对于给定的输入序列 X X X,我们首先将其分别投影为查询 Q Q Q,键 K K K,和值 V V V 的向量。这可以通过线性变换实现:

    Q = X ⋅ W Q , K = X ⋅ W K , V = X ⋅ W V Q = X \cdot W_Q, \quad K = X \cdot W_K, \quad V = X \cdot W_V Q=XWQ,K=XWK,V=XWV
    这里, W Q W_Q WQ W K W_K WK W V W_V WV 是可学习的权重矩阵。

  2. 头的拆分(Splitting Heads)
    将每个投影后的向量 Q , K , V Q, K, V Q,K,V 分成 h h h 个头(通常 h h h 是一个超参数)。即,我们得到 h h h 组查询 Q i Q_i Qi,键 K i K_i Ki,值 V i V_i Vi,每组都是原始投影向量的子集。

  3. 注意力计算(Attention Computation)
    对于每个头 i i i,我们计算注意力分数:

    Attention i ( Q i , K i ) = softmax ( Q i K i T d k ) V i \text{Attention}_i(Q_i, K_i) = \text{softmax}\left(\frac{Q_iK_i^T}{\sqrt{d_k}}\right)V_i Attentioni(Qi,Ki)=softmax(dk QiKiT)Vi
    其中, d k d_k dk 是键的维度。通过这个步骤,每个头都得到了一组注意力加权的值。

  4. 头的合并(Concatenation of Heads)
    将每个头的注意力加权值拼接在一起,形成多头注意力的输出:
    MultiHead ( Q , K , V ) = Concat ( Attention 1 , Attention 2 , . . . , Attention h ) \text{MultiHead}(Q, K, V) = \text{Concat}(\text{Attention}_1, \text{Attention}_2, ..., \text{Attention}_h) MultiHead(Q,K,V)=Concat(Attention1,Attention2,...,Attentionh)

  5. 线性变换(Linear Transformation)
    将拼接后的输出通过另一个线性变换:
    MultiHead ( Q , K , V ) ⋅ W O \text{MultiHead}(Q, K, V) \cdot W_O MultiHead(Q,K,V)WO
    其中, W O W_O WO 是输出层的权重矩阵。

通过这些步骤,我们就得到了多头自注意力机制的最终输出,该输出保留了输入序列的各个部分,并且在多个注意力头的帮助下,能够更好地捕捉序列中的长程依赖关系。

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

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

相关文章

2024Python自动化测试面试必备知识点!

在准备 Python 自动化测试面试时,以下是一些必备的知识点,可以帮助您在面试中展现实力: 软件测试基础: 熟悉软件测试的基本概念,包括测试类型(功能测试、性能测试、安全测试等)、测试方法&#…

数据安全治理实践路线(中)

数据安全建设阶段主要对数据安全规划进行落地实施,建成与组织相适应的数据安全治理能力,包括组织架构的建设、制度体系的完善、技术工具的建立和人员能力的培养等。通过数据安全规划,组织对如何从零开始建设数据安全治理体系有了一定认知&…

微服务篇之任务调度

一、xxl-job的作用 1. 解决集群任务的重复执行问题。 2. cron表达式定义灵活。 3. 定时任务失败了,重试和统计。 4. 任务量大,分片执行。 二、xxl-job路由策略 1. FIRST(第一个):固定选择第一个机器。 2. LAST&#x…

西门子S7-1500作为智能设备共享功能

本章节介绍了共享设备的功能,优势,使用要求,使用规则,如何将智能设备作为共享设备,实现一个智能设备同时与2个IO控制器进行通信的示例,以及常见问题。 一、共享设备功能概述 信号模块可以被不同的IO控制器…

【MIT-PHP-推荐】imi-ai 是一个 ChatGPT 开源项目

mi-ai 是一个 ChatGPT 开源项目,支持聊天、问答、写代码、写文章、做作业等功能。 项目架构合理,代码编写优雅,简单快速部署。前后端代码完全开源,不管是学习自用还是商用二开都很适合。 本项目现已支持 ChatGPT 聊天 AI 和 Emb…

蓝桥杯:递增三元组

题目 递增三元组&#xff08;2018年蓝桥杯真题&#xff09; 题目描述&#xff1a; 给定三个整数数组 A [A1, A2, … AN], B [B1, B2, … BN], C [C1, C2, … CN]&#xff0c; 请你统计有多少个三元组(i, j, k) 满足&#xff1a; 1 < i, j, k < N Ai < Bj &…

都说了别用BeanUtils.copyProperties,这不翻车了吧

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 故事 新年新气象&#xff0c;小猫也是踏上了新年新征程&#xff0c;自从小猫按照老猫给的建议【系统梳理大法】完完整整地梳理完毕系统之后&#xff0c;小猫对整个系统的把控可谓又是上到可一个新的高度。…

yolov8学习笔记(二)模型训练

目录 yolov8的模型训练 1、制作数据集&#xff08;标记数据集&#xff09; 2、模型训练&#xff08;标记数据集、参数设置、跟踪模型随时间的性能变化&#xff09; 2.1、租服务器训练 2.2、加训练参数 2.3、看训练时的参数&#xff08;有条件&#xff0c;就使用TensorBoard&…

CCAA审核员认证通用基础考试大纲

认证通用基础考试大纲&#xff08;第1版&#xff09; 1.总则 本大纲依据CCAA认证人员注册准则制定&#xff0c;适用于拟向CCAA申请注册各领域实习级别的人员。 2.考试要求 2.1考试科目 各领域申请实习级别人员注册需通过“认证通用基础”科目考试。 2.2考试方式 “认证通…

(8)Linux使用C语言读取proc/stat等cpu使用数据

Linux使用C语言读取proc/stat数据 Author: OnceDay Date: 2024年2月23日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: proc(5) - Linux manual page (man7.org) The /proc Filesystem — The Linux Kernel …

Open CASCADE学习|视图

目录 Mainwin.h Mainwin.cpp Mainwin.h ​#pragma once#include <QtWidgets/QMainWindow>#include "Displaywin.h"#include "OCC.h"class Mainwin : public QMainWindow{ Q_OBJECTpublic: Mainwin(QWidget* parent nullptr); ~Mainwin();​pri…

【Java程序设计】【C00277】基于Springboot的招生管理系统(有论文)

基于Springboot的招生管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生管理系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、专业…

opengl 学习纹理

一.纹理是什么&#xff1f; 纹理是一个2D图片&#xff08;甚至也有1D和3D的纹理&#xff09;&#xff0c;它可以用来添加物体的细节&#xff1b;类似于图像一样&#xff0c;纹理也可以被用来储存大量的数据&#xff0c;这些数据可以发送到着色器上。 采样是指用纹理坐标来获取纹…

机器学习简单介绍

&#xff08;本文为简单介绍&#xff0c;内容源于网络和AI&#xff09; 当今世界,技术与创新的步伐日新月异。在各类智能技术当中,如果说有一个绝对不容忽视的关键词,那就是“机器学习”(Machine Learning)。它是人工智能领域的核心分支,使得机器获得从数据中学习、进而做出决…

软件测试人员必会的linux命令

文件和目录操作: ● ls:列出目录中的文件和子目录。 ● cd:改变当前工作目录。 ● mkdir:创建新目录。 ● rm:删除文件或目录。 ● cp:复制文件或目录。 ● mv:移动或重命名文件或目录。 文本查看和编辑: ● cat:查看文件内容。 ● more或less:分页查看文件内…

Modern C++ std::variant的6个特性+原理

1 前言 上一节《Modern C std::variant的实现原理》我们简单分析了std::variant的实现原理&#xff0c;其实要学好C编程&#xff0c;除了看优秀的代码包括标准库实现&#xff0c;读文档也是很便捷且必须的一种办法。 本节我将逐条解析文档中的五个特性&#xff0c;解析的办法有…

我耀学IT—day01-Bootstrap介绍

1.1 Bootstrap 简介&#xff1a;什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap是前端开发中比较受欢迎的框架&#xff0c;简洁且灵活。它基于HTML、CSS和JavaScript&#xff0c;HTML定义页面元素&#xff0c;CSS定义页面布局&…

H12-821_77

77.如图所示的交换网络&#xff0c;所有交换机都运行了STP协议&#xff0c;当拓扑稳定后&#xff0c;在以下哪台交换机上修改配置BPDU的发送周期&#xff0c;可以影响STD配置BPDU的发送周期&#xff1f; A.STC B.SWD C.SWA D.SWB 答案&#xff1a;C 注释&#xff1a; 在根桥上…

外贸B2C独立站与外贸B2B独立站有什么区别

随着全球互联网的普及和电子商务的快速发展&#xff0c;越来越多的企业开始将业务拓展至线上。在外贸领域&#xff0c;B2B和B2C两种独立站模式逐渐崭露头角。虽然它们都属于电子商务范畴&#xff0c;但在很多方面存在明显的区别。本文将从概念、商业模式、网站设计、营销策略等…

(十九)devops持续集成开发——jenkins的一些常用插件和工具的安装

前言 本节内容会着重介绍jenkins持续集成开发工具的一些常用插件安装以及全局工具的配置安装&#xff0c;并说明其主要作用。在开始插件和工具安装之前&#xff0c;我们要保证可以正常访问网络&#xff0c;并且使用国内的插件更新地址&#xff0c;便于插件的正常安装。官方的地…