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 的见解, 多代理系统质…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...