Transformer2--Multi-head self-attention
一、背景
为什么是multi-head self attention?
并行的处理多种注意力模式: 每个注意力头使用不同的线性变换,这意味着它们可以从输入序列的不同子空间中学习不同的特征关联。这样一来,模型可以通过多个注意力头同时关注输入序列的不同方面,如一句话的语法结构、语义角色、主题转移等。
增加模型的学习能力和表达能力: 通过多个注意力头,由于每个头关注的特征不同,模型可以学习到更丰富的上下文信息,这样综合起来可以更加全面的理解和处理序列。
二、多头自注意力机制的原理
2.1 自注意力机制
在介绍多头自注意力机制之前,先来简单的回顾一下自注意力机制:
自注意力机制(Self-Attention Mechanism)是Transformer架构中的核心组件,它允许模型在处理序列数据时, 考虑序列中不同位置元素之间的相互关系。在自注意力机制中,查询(Query, Q)、键(Key, K)和值(Value, V)是三个重要的概念,它们都是从输入序列经过线性变换得到的向量。

对于Q,K,V分别代表的含义,我想用一个例子来说明一下:
我们有一段文本:“小明喜欢在晴朗的日子里去公园散步。” 如果我们想要了解 “小明” 这个词在句子中的上下文含义,我们可以看看句子中其他词与 “小明” 之间的关系。
查询(Query, Q):可以把它想象成我们要寻找信息的问题或者焦点。在上面的例子中, 小明”就是我们的查询 “,我们想要知道“小明”这个词在句子中的具体含义。
键(Key, K):可以把它看作是其他单词(或者说是输入序列中的其他部分)提供的线索,帮助我们判断它们与查询的相关程度。在我们的例子中,句子中的每一个词都可以产生一个键,用来表示它是否与“小明”相关以及相关的程度。
值(Value, V):可以理解为当一个键与查询匹配时,它能提供的额外信息。在句子中,如果一个词与“小明”相关联,那么它的值向量就会被用来增强我们对“小明”的理解。比如,“喜欢”、“晴朗的日子”和“公园散步”都与“小明”有关系,它们的值向量将被用来丰富“小明”的语境。
自注意力机制通过计算查询向量(Q)和所有键向量(K)之间的相似度(通常是点积),得到一个注意力权重矩阵,然后使用这些权重对所有值向量(V)进行加权求和,从而得到一个综合了上下文信息的新表示。总结来说,Q是询问者,K是回答者提供的线索,V是等待线索的答案,自注意力机制就是通过这些线索和答案来构建输入序列的上下文关系,进而优化模型的性能。
2.2 多头自注意力机制
多头自注意力机制顾名思义,最自注意力机制最大的不同,就是使用多个QKV来构建序列的上下文关系。
在实现过程中 q i , 1 , q i , 2 q^{i,1}, q^{i,2} qi,1,qi,2, k i , 1 , k i , 2 k^{i,1}, k^{i,2} ki,1,ki,2, v i , 1 , v i , 2 v^{i,1}, v^{i,2} vi,1,vi,2与自注意力机制的获取方式一样,以q的计算为例:
q i , 1 , q j , 1 = W q , 1 q i q j q^{i,1}, q^{j,1}=W^{q,1}q^iq^j qi,1,qj,1=Wq,1qiqj
q i , 2 , q j , 2 = W q , 2 q i q j q^{i,2}, q^{j,2}=W^{q,2}q^iq^j qi,2,qj,2=Wq,2qiqj
可以看到其计算方式和自注意力机制计算q时一样。

multi-head 在计算self-attention时,和单个头的self-attention类似,只不过每一个输入 a i a^i ai会得到和头个数相同的输出 b i , 1 , b i , 2 b^{i,1},b^{i,2} bi,1,bi,2。需要注意的是,头与头对应,即 q i , 1 q^{i,1} qi,1只需要与 k i , 1 , v i , 1 k^{i,1}, v^{i,1} ki,1,vi,1做运算。

2.3 Positional Encoding(位置编码)
当前,对于一个序列而言,每一个单词出现的位置以及单词之间的距离并未被考虑进去,即第一个单词与最后一个单词的位置是等价的。但是,无论是对于一段文字序列还是一段声音信号,词语的位置不同,所表达的意思可能会发生较大的改变,不如“你不能不吃饭”和“不你不能吃饭”。
为了解决该问题,就需要用到ositional Encoding技术。对于每一个词语只需要给输入信号加上一个位置向量 e i e^i ei.

位置向量的编码方式有很多种,如下图所示:

接下来的内容与multi-head知识无关了,我只是顺着课程一块记录下来了。
2.4 self-attention for image
将一张图片看作是一个vector set, 比如下面这张图像,被划分成510的一组向量集,每一个vector是一个13大小的向量。

应用的实例:

三、Self-attention v.s CNN
先说结论:CNN是简化版的self-attention。
self-attention处理数据的方式: self-attention是考虑整张图像的信息,即receptive filed的范围是自己决定的,自己觉得q与谁相关。

CNN处理数据的方式: CNN仅仅考虑定义范围内的receptive filed里面的信息

四、Self-attention v.s RNN
RNN 简单介绍:RNN的核心机制是其隐层状态,它可以保存先前输入的信息,从而在后续时间步骤中使用,这相当于给网络赋予了一定的“记忆”能力,使其能够处理具有长期依赖关系的数据。


RNN与Self-attention 的不同
-
如果一段序列较长,如果需要最右边黄色的输入与最开始蓝色输入信息的关联,需要将蓝色输入一直存储在memory中,这需要较大的内存。受内存的限制,在RNN中,后面的输入很难与最开始的输入关联。
但是在Self-attention中,只要使用黄色输入的Q与蓝色输入的K进行矩阵乘法计算就能完成这个操作。 -
RNN是noparallel, 除了最开始的输入外,RNN中每一个输入都需要考虑前一个的输出来得到当前状态的输出,无法平行处理所有输入。
但是在self-attention中,如下图所示,它可以很轻松的平行处理所有输入。

参考资料
台大李宏毅自注意力机制和Transformer详解!
【NLP】多头注意力(Multi-Head Attention)的概念解析
相关文章:
Transformer2--Multi-head self-attention
一、背景 为什么是multi-head self attention? 并行的处理多种注意力模式: 每个注意力头使用不同的线性变换,这意味着它们可以从输入序列的不同子空间中学习不同的特征关联。这样一来,模型可以通过多个注意力头同时关注输入序列的不同方面&…...
11. Java线程的状态详解
1. 前言 本节内容主要是对多线程的 6 种状态进行详细讲解,具体内容点如下: 抛开语言,谈操作系统的线程的生命周期及线程 5 种状态,这是我们学习 Java 多线程 6 种状态的基础;掌握 Java 的线程生命周期及 6 种线程状态…...
ubuntu永久换镜像源详细方法
1.查看ubuntu的版本,不同的版本对应的不同的镜像源(下面会讲到,先按步骤操作即可) cat /etc/issue 2.先备份一个,防止更改错误 cp /etc/apt/sources.list /etc/apt/sources.list.backup 3.备份好之后删除原有的sour…...
docker部署(第一期)(相关命令)
腾讯云-----------镜像centOS 7.9 64位置---------------分配独立公网IP(远程连接)----------带宽选择最大-------------新建安全组-------------设置服务器密码---------WindTerm远程连接服务器 WindTerm下载:https://github.com/kingToolb…...
华为云L实例云服务器部署前后端分离项目全过程记录
1、配置云服务器 https://blog.csdn.net/modaoshi51991/article/details/139547630 2、上传前端项目并配置nginx 首先在前端项目运行以下代码将项目打包 我遇到node.js和openssl两个版本不兼容问题,更新版本依次解决即可 vue-cli-service build看一下package.json…...
uniapp - 微信小程序 - 自定义底部tabbar
废话不多说,直接行源码 这里需要的底部tabbar的图片在这里 我的资源里面呢 图片是这样的 先看成品吧 首先 - BaseApp\components\Tabbar.vue <script setup>import {ref,nextTick,watch} from "vue"// 核心 - 隐藏uniapp自带的底部tabbaruni.hi…...
每日一题——Python实现PAT乙级1030 完美数列(举一反三+思想解读+逐步优化)五千字好文
一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 初次尝试 再次尝试 代码结构 时间复杂度分析 空间复杂度分析 总结 我要更强 时…...
【C/C++】this指针的概念和作用
目录 一、this指针的概念 二、this指针的作用 2.1 访问当前对象的成员 2.2 返回对象本身 2.3 区分对象 2.4 在构造函数和析构函数中 2.5 在类的内部调用其他成员函数 2.6 作为参数传递 三、this指针使用 3.1 this指针的使用 3.2 C++ 中this指针使用 一、this…...
Spring Bean 的生命周期
在 Spring 框架中,Bean 的生命周期由 Spring 容器管理,从创建到销毁,Spring 提供了多种方式来定制 Bean 的初始化和销毁过程。本文将详细介绍 Spring Bean 的生命周期,包括 Bean 的初始化和销毁、自定义初始化方法和销毁方法。 一…...
锐起RDV5高性能云桌面
锐起是上海锐起信息技术有限公司旗下品牌。该公司创立于 2001 年,是桌面虚拟化产品和解决方案提供商,专注于桌面管理系统和私有云存储系统的系列软件产品研发,致力于简化 IT 管理、增强系统安全,提供简单、易用、稳定、安全的产品…...
pandas减少dataframe占用内存的若干方法
一、只获取文件需要的列,避免加载整个文件 举例:只获取A.B两列数据 df pd.read_csv(123.csv, usecols[A, B]) 二、使用更准确的数据类型,减少内存空间占用 import pandas as pd import numpy as np # 假设你的CSV文件有三列࿰…...
Ubuntu20.04 64位 安装docker(有问题可评论沟通交流)
1、查看系统版本 cat /proc/version 2、卸载可能存在或未安装成功的docker(新系统无需操作) apt-get remove docker docker-engine docker-ce docker.io 3、更新apt-get apt-get update 4、安装软件包允许apt-get通过 HTTPS 使用存储库 apt-get install …...
【C++PCL】点云处理Kd树和八叉树区别
作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的…...
makefile学习过程
makefile 完美教程 - WittXie - 博客园 (cnblogs.com) Makefile教程(绝对经典,所有问题看这一篇足够了)-CSDN博客 Makefile入门(超详细一文读懂)-CSDN博客 最实用的Makefile教程 真的很简单(搞不明白网上的教程写那么复杂干嘛&…...
Kompas AI数据分析与预测功能对比
一、引言 在现代商业环境中,数据分析与预测是企业制定战略决策的关键工具。通过对大量数据的分析,企业能够识别趋势、预测未来变化,并做出更为明智的决策。本文将对比Kompas AI与其他主要AI产品在数据分析与预测方面的能力,展示K…...
Appium+python自动化(二十五)- 那些让人抓耳挠腮、揪头发和掉头发的事 - 获取控件ID(超详解)
简介 在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获取控件的坐…...
【博士每天一篇文献-算法】Fearnet Brain-inspired model for incremental learning
阅读时间:2023-12-16 1 介绍 年份:2017 作者:Ronald Kemker,美国太空部队;Christopher Kanan,罗切斯特大学 期刊: arXiv preprint 引用量:520 Kemker R, Kanan C. Fearnet: Brain-…...
Appium+python自动化(二十六)- 烟花一瞬,昙花一现 -Toast提示(超详解)
简介 今天宏哥在这里首先给小伙伴们和童鞋们分享一个有关昙花的小典故:话说昙花原是一位花神,她每天都开花,四季都灿烂。她还爱上了每天给她浇水除草的年轻人。后来,此事给玉帝得知。于是,玉帝大发雷霆,要…...
大数据之路 读书笔记 Day1
大数据之路 读书笔记 Day1 阿里巴巴大数据系统体系架构图 1. 数据采集层 #mermaid-svg-YqqD2w3qV6jc2aGP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YqqD2w3qV6jc2aGP .error-icon{fill:#552222;}#mermaid-sv…...
吴恩达揭秘:编程Agent如何革新软件开发行业
作为 AI 领域的杰出人物,吴恩达教授对编程 Agent 的兴起表示了极大的兴趣。他认为,编程 Agent 有潜力通过自动执行繁琐的任务、提高代码质量和加速开发周期来彻底改变软件开发行业。 本文将深入探讨吴恩达对编程 Agent 的见解, 多代理系统质…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
