当前位置: 首页 > news >正文

【小白学AI系列】NLP 核心知识点(八)多头自注意力机制

文章目录

      • **多头自注意力机制(Multi-Head Self-Attention)**
        • **核心概念**
      • **1. 自注意力机制(Self-Attention)**
      • **2. 多头机制(Multi-Head Attention)**
      • **3. 为什么要用多头注意力机制?**
      • **4. 公式总结**
      • **5. 例子:如何理解多头自注意力机制?**
      • **6.自注意力机制的前提**
        • **1. 输入的表示形式:词嵌入**
        • **2. 线性变换得到 Q, K, V**
        • **3. 计算注意力权重:Query 和 Key 的相似度**
        • **4. Softmax 归一化**
      • **自注意力机制的关键步骤和公式**
      • **为什么要进行点积和转置操作?**

多头自注意力机制(Multi-Head Self-Attention)

多头自注意力机制是 Transformer 中最核心的部分,它使得模型能够同时从不同的子空间捕捉输入序列的不同上下文信息,从而更好地理解和处理复杂的关系。这个机制是 Transformer 相比传统 RNN 和 LSTM 模型最大的创新之一。

核心概念

自注意力机制的核心思想是:对于输入的每一个词,我们都计算它与其他所有词之间的关系,并用这些关系加权来更新词的表示。

1. 自注意力机制(Self-Attention)

在自注意力机制中,我们会计算每个单词对其他所有单词的“注意力”分数,然后根据这些分数加权所有单词的表示,得到每个单词的上下文相关表示

计算步骤:

  1. 对输入的每个单词生成三个向量:查询(Query)键(Key)值(Value)
  2. 计算查询和键之间的相似度(通常是点积),用来衡量一个单词对其他单词的“关注”程度。
  3. 将这些相似度值进行softmax操作,得到每个单词对其他单词的注意力权重。
  4. 使用这些注意力权重对值(Value)进行加权求和,从而得到加权后的输出表示。

公式
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

其中:

  • Q Q Q:查询向量(Query)
  • K K K:键向量(Key)
  • V V V:值向量(Value)
  • d k d_k dk:向量的维度,用于缩放相似度(防止值过大)

解释:

  • 通过计算 查询(Q)键(K) 之间的相似度,得到了每个词对其他词的关注度。
  • softmax 操作使得关注度的值变得更易于解释,变成了概率分布。
  • 最终将这些权重应用到 值(V) 上,得到加权后的输出。

2. 多头机制(Multi-Head Attention)

多头自注意力机制 进一步将多个不同的自注意力机制并行化,每个注意力头关注输入的不同方面。通过多头机制,模型能够从多个子空间中学习不同的上下文关系,从而捕捉到更多的信息。

步骤:

  1. 输入的查询(Q)、键(K)、值(V)分别通过多个不同的线性变换,得到多个“头”。
  2. 每个头都有自己的自注意力计算,得到多个输出。
  3. 最后将多个头的输出拼接起来,并通过一个线性变换,得到最终的输出表示。

公式
Multi-Head Attention ( Q , K , V ) = Concat ( head 1 , head 2 , … , head h ) W O \text{Multi-Head Attention}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, \dots, \text{head}_h) W^O Multi-Head Attention(Q,K,V)=Concat(head1,head2,,headh)WO

其中:

  • head i = Attention ( Q W i Q , K W i K , V W i V ) \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)
  • W i Q , W i K , W i V W_i^Q, W_i^K, W_i^V WiQ,WiK,WiV 是每个头的线性变换矩阵。
  • W O W^O WO是输出的线性变换矩阵。

解释:

  • 每个**头(head)**是一个独立的自注意力机制,每个头学习不同的上下文信息。
  • 最终,将多个头的输出拼接在一起,再通过一个线性层生成最终的输出。

3. 为什么要用多头注意力机制?

  • 捕捉多样化信息:每个注意力头在学习过程中关注不同的上下文信息,能够从不同的角度理解序列之间的关系。例如,一个头可以关注句子中的语法关系,另一个头可以关注句子的语义。
  • 提高模型的表达能力:通过多个注意力头,模型能同时处理来自不同子空间的信息,这增强了模型的表征能力。
  • 提高模型的灵活性和鲁棒性:在实际应用中,不同任务可能需要捕捉不同层次的信息,多头注意力可以灵活地组合各个头的不同特点,从而提升性能。

4. 公式总结

最终的多头自注意力机制的计算过程是:
Multi-Head Attention ( Q , K , V ) = Concat ( head 1 , head 2 , … , head h ) W O \text{Multi-Head Attention}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, \dots, \text{head}_h) W^O Multi-Head Attention(Q,K,V)=Concat(head1,head2,,headh)WO
其中每个头的计算公式为:
head i = Attention ( Q W i Q , K W i K , V W i V ) \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) headi=Attention(QWiQ,KWiK,VWiV)
并且:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

5. 例子:如何理解多头自注意力机制?

假设我们有一个句子:“我 爱 机器 学习”,并且想要计算“”这个词的自注意力。

  1. 第一步:生成查询、键、值

    • 对于每个词,都生成查询(Q)、键(K)和值(V)向量。
  2. 第二步:计算查询和键的相似度

    • 计算“爱”这个词的查询向量 Q 爱 Q_{\text{爱}} Q 与其他词的键向量的相似度,得到一个相似度矩阵。
  3. 第三步:注意力分配

    • 对这个相似度矩阵进行 softmax 归一化,得到每个词的权重。
  4. 第四步:加权值向量

    • 使用这些权重来加权其他词的值向量,得到“爱”这个词的上下文表示。
  5. 多头计算

    • 在多头机制中,模型会同时进行多个这样的计算,每个头关注不同的上下文关系,最终将所有头的结果拼接起来,生成“爱”这个词的综合表示。

没问题!让我们再从头开始,拆解这个公式背后的前置条件,慢慢引导你理解每一步。

6.自注意力机制的前提

自注意力机制(Self-Attention)是深度学习中用于序列数据处理的核心机制之一,尤其在处理文本、语言模型、机器翻译等任务时非常常见。为了能理解自注意力机制中的公式,我们首先要理解以下几个关键的前置条件:

1. 输入的表示形式:词嵌入

在自然语言处理中,文本首先会被转换成数值形式,通常使用 词嵌入(Word Embedding) 技术将词语转换为高维向量。假设我们有一个句子:“猫吃鱼”,它被转换成词向量后,可能变成这样的矩阵:

X = [ 猫的向量 吃的向量 鱼的向量 ] \mathbf{X} = \begin{bmatrix} \text{猫的向量} \\ \text{吃的向量} \\ \text{鱼的向量} \end{bmatrix} X= 猫的向量吃的向量鱼的向量

这个矩阵 ( \mathbf{X} ) 是我们输入给模型的词向量表示。

2. 线性变换得到 Q, K, V

接下来,为了应用自注意力机制,我们会通过线性变换(矩阵乘法)将输入矩阵 X \mathbf{X} X 分别转换为 查询向量(Query,Q)键向量(Key,K)值向量(Value,V)

  • Query(Q):表示当前元素对其他元素的关注点。它类似于“询问”某个问题。
  • Key(K):表示每个元素的特征。它类似于“标签”,帮助我们决定当前元素对哪些其他元素重要。
  • Value(V):表示每个元素的具体信息。它包含了我们想要从当前元素中提取的内容。

通过以下线性变换,得到这些向量:

Q = X W q , K = X W k , V = X W v \mathbf{Q} = \mathbf{X} \mathbf{W_q}, \quad \mathbf{K} = \mathbf{X} \mathbf{W_k}, \quad \mathbf{V} = \mathbf{X} \mathbf{W_v} Q=XWq,K=XWk,V=XWv

其中, W q \mathbf{W_q} Wq W k \mathbf{W_k} Wk W v \mathbf{W_v} Wv 是学习到的权重矩阵。

3. 计算注意力权重:Query 和 Key 的相似度

接下来的步骤是计算 Query(Q)Key(K) 之间的相似度,这就涉及到一个关键的计算:点积(Dot Product)

为什么要计算 Query 和 Key 的相似度呢?因为我们希望知道对于当前的查询(Q),它应该关注哪些键(K)。点积越大,表示查询和键之间的相似度越高,也就是说,这个位置就应该更“重要”地被考虑。

4. Softmax 归一化

因为我们要将计算出的相似度转化为概率分布,使得所有的注意力权重之和为 1,我们会用 Softmax 函数对相似度进行归一化处理。

自注意力机制的关键步骤和公式

  1. 计算 Query 和 Key 的点积:

    计算 Query(Q)Key(K) 的点积,得到一个矩阵,这个矩阵表示每个 Query 和每个 Key 之间的相似度:

Scores = Q K T \text{Scores} = \mathbf{Q} \mathbf{K}^T Scores=QKT

这里的 K T \mathbf{K}^T KT代表 Key 矩阵的转置。为什么要转置呢?这是因为我们要计算的是每个查询(Q)和所有键(K)之间的相似度。为了进行点积, Q \mathbf{Q} Q 的行和 ( \mathbf{K} ) 的列必须匹配。因此, K \mathbf{K} K的转置让它们的维度对齐。

  1. 缩放(Scaling)操作:

    由于点积可能会变得非常大,尤其是在高维空间中,所以我们会对点积结果进行 缩放。这个缩放的因子是 d k \sqrt{d_k} dk ,其中 d k d_k dk是 Key 向量的维度。这个缩放操作可以帮助缓解梯度爆炸和数值不稳定的问题。

Scores scaled = Q K T d k \text{Scores}_{\text{scaled}} = \frac{\mathbf{Q} \mathbf{K}^T}{\sqrt{d_k}} Scoresscaled=dk QKT

  1. Softmax 归一化:

    对缩放后的点积结果应用 Softmax 函数,确保每一行的注意力权重和为 1,使得它们能够作为概率分布:

Attention Weights = Softmax ( Q K T d k ) \text{Attention Weights} = \text{Softmax}\left(\frac{\mathbf{Q} \mathbf{K}^T}{\sqrt{d_k}}\right) Attention Weights=Softmax(dk QKT)

  1. 加权求和:

    最后,我们将计算出的注意力权重与 Value(V) 矩阵相乘,得到加权的输出。每个位置的输出都由它的注意力权重决定,权重越大,影响越大:

Output = Attention Weights ⋅ V \text{Output} = \text{Attention Weights} \cdot \mathbf{V} Output=Attention WeightsV


为什么要进行点积和转置操作?

  1. 点积计算相似度
    点积可以用来衡量两个向量的相似度。对于每一个查询向量 Q i \mathbf{Q}_i Qi,我们都需要衡量它与所有键向量 K j \mathbf{K}_j Kj之间的相似度。通过计算点积,我们可以得出每个查询与所有键的相对“重要性”。

  2. 转置的作用
    转置操作是为了使得 K \mathbf{K} K列向量 能与 Q \mathbf{Q} Q行向量 对齐,确保它们能进行点积运算。转置后的矩阵 K T \mathbf{K}^T KT 让我们能够计算出查询与每个键之间的相似度。

相关文章:

【小白学AI系列】NLP 核心知识点(八)多头自注意力机制

文章目录 **多头自注意力机制(Multi-Head Self-Attention)****核心概念** **1. 自注意力机制(Self-Attention)****2. 多头机制(Multi-Head Attention)****3. 为什么要用多头注意力机制?****4. 公…...

学习笔记——word中图目录、表目录 标题引用

目标1: 建立——图1-1 引用——图1-1 1在word文档中的引用——>插入题注 新建标签,然后命名为“图1-“。 点击确认,即可插入如图所示 图1- 1 春天 需要把图1-和后面那个1中间的空格删除,即 图1-1 春天 2怎么去引用这个“…...

3.3 Hugging Face Transformers核心功能模块深度解析

Hugging Face Transformers核心功能模块深度解析 一、模块化架构总览 #mermaid-svg-wxTV5vrEo7Y57IlW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wxTV5vrEo7Y57IlW .error-icon{fill:#552222;}#mermaid-svg-wxT…...

linux中设置脚本定时执行ntp命令同步时间

目录 一、背景二、过程1.到系统目录2.安装ntp3.创建文件夹4.创建脚本文件5.提升脚本文件权限6.设置执行时间:7.检查是否设置了执行器(执行后输出的内容为执行器中的定时执行内容)8.执行脚本文件9.查看日志文件,是否执行成功 三、总…...

map的使用(c++)

在了解map之前,我们先看看两个场景,通过这两个场景的对比,让我们知道为什么要存在存储双关键字的容器 场景一:判断一堆字符串中,某一个字符串是否出现过 在没学set容器之前,我们只能想到把这一堆字符串存到…...

毕业设计—基于Spring Boot的社区居民健康管理平台的设计与实现

🎓 毕业设计大揭秘!想要源码和文章?快来私信我吧! Hey小伙伴们~ 👋 毕业季又来啦!是不是都在为毕业设计忙得团团转呢?🤔 别担心,我这里有个小小的福利要分享给你们哦&…...

Python:蟒蛇绘制(一笔画)

一、题目要求 使用turtle库,绘制一个蟒蛇形状的图形。‬ 二、代码展示 # 请在下方开始编写你的代码 import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turt…...

mysql查询判断函数,类似decode

mysql中没有decode函数,如果使用的话,会报如下错误:Error Code: 1305. FUNCTION stockdb.decode does not exist 如果要实现像 Oracle 数据库那样原生的 DECODE 函数,可以通过以下几种方式来实现类似 DECODE 函数的功能。 -- 创建…...

异常处理、事务管理

异常处理 程序开发过程中不可避免的会遇到异常现象 如何处理 方案一:在Controller的方法中进行try...catch处理(代码臃肿,不推荐) 方案二:全局异常处理器 全局异常处理器 RestControllerAdvice :定义全…...

UART(一)——UART基础

一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…...

MySQL 中各种日志简介

MySQL 日志 慢查询日志(Slow query log) 慢查询⽇志由执⾏时间超过系统变量 long_query_time 指定的秒数的SQL语句组成,并且检 查的⾏数⼤于系统变量 min_examined_row_limit 指定值。被记录的慢查询需要进⾏优化, 可以使⽤mysqldumpslow客⼾端程序对慢…...

【每日论文】Text-guided Sparse Voxel Pruning for Efficient 3D Visual Grounding

下载PDF或者阅读论文,请点击查看:LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 中文 在这篇论文中,我们提出了一种高效的多级卷积架构,用于3D视觉定位。传统的由于采用两阶段或基…...

Kylin server v10部署docker

这里不用写什么标题 1. docker环境1.1 docker-ce1.1.1 yum安装1.1.2 离线安装 1.2 docker-compose 2. 镜像载入3. 服务启停4. 其他 1. docker环境 1.1 docker-ce docker-ce是社区版docker服务,可以通过yum方式直接安装或者离线安装,在国产化环境中&…...

计算机之就业主流岗(Mainstream Computer Employment Positions)

计算机之就业主流岗 计算机行业一直以来都是就业市场中的热门领域,技术岗位种类繁多,但每个岗位都有自己的核心技能和职责方向。以下是计算机行业中主流的技术岗位及其特点介绍,帮助你更清晰地了解这些职业的内容和发展前景。 1. 后端开发 …...

DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

【Mac技巧】添加DNS解析到hosts文件

【Mac技巧】添加DNS解析到hosts文件 Add DNS Resolution to hosts on Mac 我们通常访问一个Web站点(即网址),需要输入网址关键字(例如: 太平洋汽车网),或者输入pcauto.com.cn即可。 这期间仅…...

【批判性思维有什么用?】

1.批判性思维,指的是在人格平等的状态下,对自己和他人观点做谨慎多角度地思考。它讲究逻辑和理性,是一种高效地积累知识的方法。 2.只有那些我们完全不熟悉的结论和我们已经熟悉得不能再熟悉的结论,对它们的反思,才能…...

Golang学习笔记_34——组合模式

Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 文件系统2. 图形界面3. 组织架构 四、代码示例(Go语言)五、…...

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层?传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...

基于Spark抖音评论舆情分析系统

✔️情绪分析、文本挖掘、文本分类,词频统计、情感分析,词云制作,词语共现网络图、人物关系网络建立等 ✔️主营:指导解答anaconda、python数据分析、数据挖掘、词频统计、词云、情感分析、python机器学习、Flask Django web、jup…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...