本文目录:

  • 一、核心思想:一句话概括
  • 二、计算流程的直观比喻
  • 三、分步计算详解(附数字例子)
    • 第 1 步:创建 Query, Key, Value 向量
    • 第 2 步:计算注意力分数
    • 第 3 步:缩放并应用 Softmax
    • 第 4 步:与 Value 向量加权求和,得到输出
  • 四、矩阵运算:实际是如何计算的
  • 五、为什么 Self-Attention 如此强大?
      • 总结

在这里插入图片描述
前言:之前讲解了Transformer各部分作用、残差等,本文分享self-attention。

一、核心思想:一句话概括

Self-Attention 的核心思想是:让序列中的每一个词(元素)都能够“关注”到序列中的所有其他词(包括它自己),并根据相关性动态地聚合所有词的信息,从而得到一个新的、融入了全局上下文信息的表示。

简单比喻:
读一句话时,为了理解某个词的含义,你的大脑会自动地回顾句子中的其他词,并赋予它们不同的重要性。Self-Attention 就是让机器模拟这个过程。

  • 理解“它”这个词时,你会更关注句子前面提到的某个名词(比如“苹果”)。
  • 理解“好吃”这个词时,你会更关注“苹果”而不是“石头”。

二、计算流程的直观比喻

我们把 Self-Attention 想象成一个信息检索系统

  1. 准备阶段(Input Processing):每个词都把自己改造成三份身份:查询(Query)键(Key)值(Value)
  2. 检索阶段(Attention Scoring)
    • 一个词(通过它的 Query)去“询问”序列中的所有词(它们的 Key):“我和你们每个人的相关度是多少?”
    • 通过计算 Q·K 得到一组相关度分数(Attention Scores)。
  3. 加权求和阶段(Output)
    • 将这些相关度分数作为权重,对所有词的 Value(实际携带的信息)进行加权求和。
    • 最终输出:一个融合了全局信息的、新的词表示。

最终效果:每个词的新表示,不再是它孤立的嵌入向量,而是一个深知全局上下文的“社交达人”。


三、分步计算详解(附数字例子)

假设我们有一个简单的序列:“Thinking Machines”,两个词。它们的初始嵌入向量(假设维度为 4)为:
x₁ = [1, 0, 1, 0] (代表 “Thinking”)
x₂ = [0, 2, 0, 2] (代表 “Machines”)

第 1 步:创建 Query, Key, Value 向量

每个输入向量 x_i 会分别乘以三个可训练的权重矩阵 W^Q, W^K, W^V,从而产生对应的 Q, K, V 向量。

假设我们的权重矩阵是:

W^Q = [[1, 0, 1, 0],[0, 1, 0, 1],[1, 0, 0, 1],[0, 1, 1, 0]]W^K = [[0, 1, 1, 0],[1, 0, 0, 1],[0, 0, 1, 1],[1, 1, 0, 0]]W^V = [[1, 1, 0, 0],[0, 1, 1, 0],[0, 0, 1, 1],[1, 0, 0, 1]]

计算第一个词 “Thinking” 的 Q, K, V:
q₁ = x₁ · W^Q = [1,0,1,0] · W^Q = [2, 0, 2, 0]
k₁ = x₁ · W^K = [1,0,1,0] · W^K = [0, 2, 2, 0]
v₁ = x₁ · W^V = [1,0,1,0] · W^V = [1, 1, 1, 1]

同理,计算 “Machines” 的 Q, K, V:
q₂ = x₂ · W^Q = [0,2,0,2] · W^Q = [0, 4, 0, 4]
k₂ = x₂ · W^K = [0,2,0,2] · W^K = [4, 0, 4, 0]
v₂ = x₂ · W^V = [0,2,0,2] · W^V = [2, 2, 2, 2]

关键W^Q, W^K, W^V 是模型需要学习的参数,它们决定了如何从原始输入中解读出“要查询什么”、“用什么来被查询”、“实际信息是什么”。

第 2 步:计算注意力分数

我们现在计算 “Thinking” (Query)对序列中每个词(Key)的注意力分数。分数通过 Query 和 Key 的点积计算。

score₁₁ = q₁ · k₁ = [2,0,2,0] · [0,2,2,0] = 0*2 + 2*0 + 2*2 + 0*0 = 4 (Thinking 与自身的相关性)
score₁₂ = q₁ · k₂ = [2,0,2,0] · [4,0,4,0] = 2*4 + 0*0 + 2*4 + 0*0 = 16 (Thinking 与 Machines 的相关性)

第 3 步:缩放并应用 Softmax

  1. 缩放(Scale):点积的结果可能很大,导致 Softmax 梯度变小。因此除以 Key 向量维度(d_k)的平方根进行缩放。这里 d_k=4,平方根是 2。
    scale_score₁₁ = 4 / 2 = 2
    scale_score₁₂ = 16 / 2 = 8

  2. Softmax:将分数转换为概率分布(总和为1),使得大的分数更大,小的分数更小。
    softmax([2, 8]) ≈ [0.012, 0.988]

    解读:对于 “Thinking” 这个词来说,它认为 “Machines” 的信息(0.988)远比它自己的信息(0.012)重要得多!

第 4 步:与 Value 向量加权求和,得到输出

将 Softmax 得到的权重作用在所有词的 Value 向量上,并求和,得到 “Thinking” 位置的新表示 z₁

z₁ = 0.012 * v₁ + 0.988 * v₂ ≈ 0.012*[1,1,1,1] + 0.988*[2,2,2,2] ≈ [1.97, 1.97, 1.97, 1.97]

这个新的 z₁ 向量就是 “Thinking” 经过自注意力机制处理后的输出。它几乎完全由 “Machines” 的信息构成,这非常合理,因为 “Thinking Machines” 是一个整体概念。

对 “Machines” 重复步骤 2-4,可以计算出 z₂


四、矩阵运算:实际是如何计算的

上述过程是为了理解,实际代码中是用矩阵一次算完的,极其高效。

  1. 将所有输入词向量堆叠成矩阵 X
  2. 计算 Q, K, V 矩阵:
    Q = X · W^Q
    K = X · W^K
    V = X · W^V
  3. 计算注意力分数矩阵:Scores = Q · K^T / sqrt(d_k)
  4. 对 Scores 矩阵的每一行应用 Softmax。
  5. 计算输出矩阵 ZZ = Softmax(Scores) · V

整个过程可以封装为一个漂亮的公式:
Attention(Q, K, V) = softmax(QK^T / √dₖ) V


五、为什么 Self-Attention 如此强大?

  1. 全局依赖性:一步直接捕获序列中任意两个位置之间的关系,不受距离限制。解决了 RNN 的长程依赖问题。
  2. 并行化:巨大的矩阵乘法可以完全并行计算,训练速度远快于必须顺序计算的 RNN。
  3. 可解释性:通过分析注意力权重(softmax(QK^T)),我们可以直观地看到模型在做决策时关注了哪些词,如图:

总结

Self-Attention 是一个精巧的“信息检索与聚合”系统。它通过 Query、Key、Value 的抽象,让模型能够动态地、有选择地融合序列的全局信息,从而为每个位置生成一个上下文感知的强大表示。它是 Transformer 能够统治 NLP 乃至整个深度学习领域的基石。

本文分享到此结束。

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

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

相关文章

25、优化算法与正则化技术:深度学习的调优艺术

学习目标:深入理解各种优化算法的原理和适用场景,掌握学习率调度的方法和策略,学会使用Dropout、批归一化等正则化技术,理解早停和验证策略,建立深度学习调优的系统性知识。 深度学习的成功不仅依赖于精巧的模型架构,更在于巧妙的训练策略。如果说网络架构是房屋的设计图…

Netty-01-NIO前置知识

目录 NIO三大组件 一. ByteBuffer 基本用法 DirectByteBuffer与HeapByteBuffer对比 字符串转ByteBuffer ByteBuffer.wrap(byte[] ) 粘包与拆包 文件编程 零拷贝transferTo 二. 阻塞与非阻塞Channel 三. Selector SelectionKey(重点) Select…

知识点17:多Agent系统架构设计模式

知识点17:多Agent系统架构设计模式 核心概念 掌握系统架构思维,理解多Agent系统的设计原则和模式 架构设计核心概念 在构建多Agent系统时,良好的架构设计是系统成功的关键。本节将介绍多Agent系统架构设计中的核心概念,包括单点瓶…

数据库造神计划第五天---增删改查(CRUD)(1)

🔥个人主页:寻星探路 🎬作者简介:Java研发方向学习者 📖个人专栏:《从青铜到王者,就差这讲数据结构!!!》、 《JAVA(SE)----如此简单&a…

基于Vue3的人工智能生成内容标识服务平台前端页面设计

效果图&#xff1a;素材库&#xff1a;App.vue<template><div id"app"><!-- 头部导航 --><Header /><!-- 主要内容区域 --><main class"main-content"><div class"container"><!-- 强制性国家标准…

使用 MyCat 实现 MySQL 主从读写分离

文章目录使用 MyCat 实现 MySQL 主从读写分离完整指南一、MySQL 读写分离基础概述1.1 读写分离工作原理1.2 为什么需要读写分离1.3 读写分离的两种实现方式主流读写分离中间件对比二、MyCat 中间件简介2.1 MyCat 核心功能2.2 MyCat 适用场景三、环境准备与 MyCat 安装3.1 前提&…

物联网传感器检测实验

/*------------------------------------------------------------------------------ * @文件名 : handle * @描述 : 用户处理函数 * @作者 : 物联网项目组 * @日期 : 2023/04/01 * @版本 : V0.0.2 *****************************…

什么是dirsearch、xray、durpsuite、sqlmap?

你提到的 dirsearch、xray、durpsuite&#xff08;可能为笔误&#xff0c;推测是 ​​Burp Suite​​&#xff09;和 sqlmap 均为网络安全领域中常用的工具&#xff0c;主要用于 Web 应用的安全测试、漏洞检测或渗透测试。以下分别详细说明&#xff1a;​​1. dirsearch​​​​…

lamp脚本部署

#!/bin/bash #关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 #配置yum网络源 echo “正在配置yum仓库” rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &am…

Redis Hash数据类型深度解析:从命令、原理到实战场景

前言 在Redis的众多数据结构中&#xff0c;Hash&#xff08;哈希&#xff09;类型占据着至关重要的地位。Redis本身就是一个高性能的键值&#xff08;Key-Value&#xff09;数据库&#xff0c;其底层的键值对便是通过哈希方式组织的。而Hash数据类型则更进一步&#xff0c;它允…

【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路

目录一、文件操作的基本概念1.1 文件的分类与打开方式1.2 文件流的概念与相关类&#xff08;ifstream、ofstream、fstream&#xff09;1.3 文件操作的基本流程二、文本文件的读写实战2.1 文本文件的打开与关闭2.2 文本文件的写入操作&#xff08;<< 运算符、write 函数&a…

从C++开始的编程生活(9)——模板初阶

前言 本系列文章承接C语言的学习&#xff0c;需要有C语言的基础才能学会哦~ 第8篇主要讲的是有关于C的模板初阶。 C才起步&#xff0c;都很简单&#xff01;&#xff01; 目录 前言 模板初阶 基本语法 函数模板的实例化 显式实例化的作用 类模板 基本语法 模板初阶 模板…

计算机网络——传输层(25王道最新版)

传输层传输层提供的服务进程 端口号 传输层协议之间的关系socket套接字有链接 VS 无连接 | 可靠 VS 不可靠UDP数据报及检验数据报格式检验方法TCPTCP协议的三大阶段TCP报文段格式&#xff08;很重要&#xff09;建立连接&#xff08;三次握手&#xff09;&#xff08;超级超级重…

羽毛球地板:从专业运动场景到全民健身市场的技术跃迁与产业重构

在全球体育产业向“专业化大众化”双轨并行的趋势下&#xff0c;羽毛球地板作为运动场景的核心基础设施&#xff0c;正经历从单一功能型产品向“性能优化场景适配智能管理”一体化解决方案的转型。据QYResearch统计&#xff0c;2031年全球羽毛球地板市场规模将达15.95亿元&…

R 语言查看类库源码的方法

你想查看 getGEO&#xff08;来自 R 语言 GEOquery 包&#xff09;的源码&#xff0c;这能帮你更好理解其工作原理和数据处理细节。由于 getGEO 是 R 函数&#xff0c;查看方法与 Python 有所不同。下面为你提供几种主要方法。 方法 适用场景 关键命令/操作 在 R 控制台直接查看…

SQL,posexplode 用法示例

示例1 -- 创建测试数据 WITH test_data AS (SELECT array(apple, banana, cherry) as fruits ) SELECT pos, col FROM test_data LATERAL VIEW posexplode(fruits) t AS pos, col;结果 pos | col ----|------- 0 | apple 1 | banana 2 | cherry示例2 -- 假设有一个用户表…

数据库造神计划第十天---数据库约束(1)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

知微传感Dkam系列3D相机SDK例程篇:CSharp连接相机及保存数据

序言 写在前面 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有&#xff1a; 1、便利他人应用相机&#xff0c;本系列文章包含公司所出售相机的SDK的使用例程及详细注释&#xff1b;2、促进行业发展及交流。 知微传感Dkam系列3D相机可以应用于定位分拣、焊接焊缝提…

[笔记] 系统分析师 第十二章 软件架构设计(分析师主要工作)

文章目录前言12.1 软件架构概述12.1.1 软件架构的意义12.1.2 软件架构的发展史12.2 软件架构建模12.3 软件架构风格12.3.1 软件架构风格概述12.3.2 数据流体系结构风格1.批处理体系结构风格2.管道-过滤体系结构风格12.3.3 调用/返回体系结构风格1.主程序/子程序风格2.面向对象体…

C++---存储周期,作用域,链接性

在C程序设计中&#xff0c;变量的行为不仅由其类型决定&#xff0c;还由存储周期&#xff08;变量在内存中存在的时间&#xff09;、作用域&#xff08;变量可被访问的代码范围&#xff09;和链接性&#xff08;变量在多文件程序中的可见性&#xff09;共同约束。 一、存储周期…