深度学习:自注意力机制(Self-attention)详解

自注意力机制(Self-attention)详解

自注意力机制(Self-attention)是一种用于神经网络中的机制,能够动态地捕捉序列中不同位置元素之间的依赖关系,并根据这些依赖关系生成新的序列表示。它特别适用于处理序列数据(如文本、时间序列、语音信号等),目前在自然语言处理、语音识别和计算机视觉等领域被广泛应用。

自注意力机制之所以被称为“自注意力”,是因为它在单一序列中通过计算序列元素之间的相互依赖关系来生成新的特征表示。这与传统的注意力机制(如用于机器翻译中,编码器与解码器之间的注意力机制)有所不同,后者通常涉及两个序列之间的交互。

自注意力机制的核心工作原理

自注意力机制可以分为以下几个步骤:

1. 查询、键、值向量的生成

对于序列中的每个输入向量(例如在文本处理中,一个词的嵌入表示),我们将其通过三个不同的权重矩阵 ( W q W^q Wq ), ( W k W^k Wk ) 和 ( W v W^v Wv ) 线性映射为查询向量(Query vector, ( q ))键向量(Key vector, ( k ))值向量(Value vector, ( v ))。这些向量可以描述为:

  • 查询向量 ( $q_i = W^q x_i $)
  • 键向量 ( $k_i = W^k x_i $)
  • 值向量 ( v i = W v x i v_i = W^v x_i vi=Wvxi )

其中,( x i x_i xi ) 是输入序列的第 ( $i $) 个元素的嵌入表示。这三种向量分别用于不同的操作:

  • 查询向量 ( q i q_i qi ) 用于与其他输入元素的键向量进行匹配,以确定该元素应该“关注”序列中的哪些部分。
  • 键向量 ( k i k_i ki ) 用于与查询向量进行匹配,生成注意力得分。
  • 值向量 ($ v_i$ ) 通过加权求和生成新的输出表示。

2. 注意力得分的计算

为了确定序列中每个元素之间的相关性,自注意力机制通过点积运算计算每个查询向量 ( $q_i $) 与所有其他元素的键向量 ( k j k_j kj ) 的相似度。相似度的计算方式为:

[
α i , j = q i ⋅ k j \alpha_{i,j} = q_i \cdot k_j αi,j=qikj
]

即查询向量 ( $q_i $) 和键向量 ( k j k_j kj ) 的点积。这个点积结果 ($ \alpha_{i,j}$ ) 表示序列中的第 ($ i KaTeX parse error: Can't use function '\)' in math mode at position 1: \̲)̲ 个元素对第 \( j$ ) 个元素的关注程度(即相关性)。

3. 归一化:softmax

得到的点积得分 ( α i , j \alpha_{i,j} αi,j ) 并不是直接用于生成输出向量的,而是需要通过softmax函数进行归一化处理,以将它们转换为有效的概率分布:

[
α ^ i , j = exp ⁡ ( α i , j ) ∑ j = 1 n exp ⁡ ( α i , j ) \hat{\alpha}_{i,j} = \frac{\exp(\alpha_{i,j})}{\sum_{j=1}^n \exp(\alpha_{i,j})} α^i,j=j=1nexp(αi,j)exp(αi,j)
]

通过 softmax 函数,每个 ( α i , j \alpha_{i,j} αi,j ) 被转换成 ( $\hat{\alpha}_{i,j} $),表示第 ( $i $) 个元素对第 ( j j j ) 个元素的相对关注权重。这样,所有元素的关注权重和为 1。

4. 输出的加权求和

归一化后的注意力权重 ( α ^ i , j \hat{\alpha}_{i,j} α^i,j ) 决定了每个输入元素对输出的贡献大小。具体地,输出向量 ( b i b_i bi ) 是对所有值向量 ( v j v_j vj ) 进行加权求和:

[
b i = ∑ j = 1 n α ^ i , j v j b_i = \sum_{j=1}^{n} \hat{\alpha}_{i,j} v_j bi=j=1nα^i,jvj
]

这意味着,第 ($ i$ ) 个元素的输出向量 ($ b_i$ ) 是所有输入元素的值向量 ( $v_j $) 通过对应的注意力权重 ( $\hat{\alpha}_{i,j} $) 加权后得到的。因此,输出向量不仅包含了第 ( i i i ) 个元素本身的信息,还包含了其他相关元素的信息。

5. 缩放点积注意力

在计算点积时,如果查询向量和键向量的维度较大,点积的值可能会变得很大,这会导致 softmax 输出接近 0 或 1,使得梯度消失或过于集中。为了解决这个问题,Transformer 引入了缩放因子 ( 1 d k \frac{1}{\sqrt{d_k}} dk 1 ) 来对点积进行缩放,公式变为:

[
α i , j = q i ⋅ k j d k \alpha_{i,j} = \frac{q_i \cdot k_j}{\sqrt{d_k}} αi,j=dk qikj
]

其中 ( d_k ) 是键向量的维度。缩放因子的引入有助于防止在模型训练过程中出现梯度问题。

6. 多头注意力(Multi-head Attention)

在实际应用中,Transformer 引入了多头注意力机制。多头注意力的核心思想是通过多个不同的查询、键和值的线性变换来生成多组并行的注意力操作,进而捕捉序列中不同位置之间的多样化关系。具体过程如下:

  • 将输入向量通过不同的权重矩阵 ( $W^q, W^k, W^v $) 线性变换为多组查询、键和值向量。
  • 对每组查询、键和值向量分别计算自注意力输出。
  • 将所有头部的输出连接起来,再通过一个线性层进行投影,得到最终的输出。

公式表示为:

[
MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,,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^O $) 是线性变换的权重矩阵。

多头注意力机制的优势在于它能够从不同的“视角”来捕捉输入序列中元素之间的不同关联,从而提高模型的表达能力。

自注意力的优势

  1. 并行化计算:与循环神经网络(RNN)不同,自注意力机制不依赖于顺序传递的隐藏状态,因此可以进行并行计算,极大提高了计算效率。
  2. 捕捉长距离依赖关系:自注意力机制能够轻松捕捉序列中任意位置元素之间的依赖关系,不管这些元素距离多远,这使得它特别适用于处理长序列。
  3. 灵活性强:自注意力机制能够动态地调整各个元素之间的关注权重,根据不同的上下文情况学习不同的依赖关系。

自注意力的局限性

  1. 计算复杂度高:由于自注意力需要计算每个元素与其他所有元素之间的依赖关系,因此其计算复杂度为 ($ O(n^2) $),当序列长度较长时,这会导致计算开销非常大。
  2. 无法显式捕捉位置信息:自注意力机制本身并不考虑输入序列的位置信息,因此需要引入**位置编码(Positional Encoding)**来为序列中的每个元素附加位置信息。

总结

自注意力机制通过查询、键和值向量的转换,能够有效捕捉序列中元素之间的依赖关系。它通过点积计算出元素之间的相似度,然后通过 softmax 归一化生成注意力权重,最终对值向量加权求和生成输出表示。自注意力机制在 Transformer 模型中得到了广泛应用,并通过多头注意力进一步增强了模型对序列关系的捕捉能力。

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

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

相关文章

软件设计师-上午题-14 信息安全(5分)

信息安全题号一般为7-9或10-11题,分值一般为5分。 目录 1 防火墙 1.1 真题 2 病毒 2.1 真题 3 网络攻击 3.1 真题 4 网络安全 4.1 真题 5 杂题选讲 1 防火墙 1.1 真题 1.2009年下半年第8题 2.2013年上半年第8题 3.2014年上半年第8题 4.2011年上半年第9题…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序

AWTK 应用程序开发完成后,在配置文件中添加 harmonyos 的选项,通过create_project.py脚本即可生成 DevEco Studio的工程。 安装开发环境 DevEco Studio HarmonyOS 的开发工具。 Python 运行环境。 git 源码管理工具。 下载 awtk 和 awtk-harmonyos…

如何创建备份设备以简化 SQL Server 备份过程?

SQL Server 中的备份设备是什么? 在 SQL Server 中,备份设备是用于存储备份数据的物理或逻辑介质。备份设备可以是文件、设备或其他存储介质。主要类型包括: 文件备份设备:通常是本地文件系统中的一个或多个文件。可以是 .bak 文…

Dependency: androidx.webkit:webkit:1.11.0-alpha02. 问题

android studio 打包后出现这个问题 1.步骤更新topOn sdk 添加 //Admob api “com.anythink.sdk:adapter-admob:6.4.18” api “com.google.android.gms:play-services-ads:23.4.0” api "com.google.android.gms:play-services-ads:23.4.0"sdk 中会出现打包编译报错…

ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装

1. NVIDIA驱动 系统设置->软件和更新->附加驱动->选择NVIDIA驱动->应用更改。该界面会自动根据电脑上的GPU显示推荐的NVIDIA显卡驱动。 运行nvidia-smi: NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the lat…

SpringBoot监控

1、Spring Boot Actuator 监控 Spring Boot Actuator 可以帮助监控和管理 Spring Boot 应用,比如健康检查、审计、统计和 HTTP 追踪等。所有的这些特性可以通过 JMX 或者 HTTP endpoints 来获得。 1、Actuator 监控应用程序 启用 Actuator 的端点,只要…

动态规划 —— dp 问题-粉刷房子

1. 剑指offer —— 粉刷房子 题目链接: LCR 091. 粉刷房子 - 力扣(LeetCode)https://leetcode.cn/problems/JEj789/description/ 2. 题目解析 根据上图可以得到costs横坐标(行)是房子的号数,红色的下标是0&…

RPA是什么,RPA有什么作用?

在数字化转型的时代背景下,企业面临着提高效率、降低成本和优化流程的巨大压力。RPA作为一种革新性的数字化技术,迅速成为企业实现这些目标的利器。那么,RPA究竟是什么?它又能为企业带来哪些实际作用呢?本文金智维将对…

RAG(检索增强生成)的实现流程;RAG怎么实现检索增强的

目录 RAG(检索增强生成)的实现流程 两次使用大模型:可以不同 一、数据准备阶段 二、应用阶段 RAG怎么实现检索增强的 实现方式 具体举例 RAG(检索增强生成)的实现流程 两次使用大模型:可以不同

【ddnsgo+ipv6】

ddnsgoipv6 DNS解析添加记录ddnsgo配置 DNS解析添加记录 ddnsgo配置

【手撕排序2】快速排序

🍃 如果觉得本系列文章内容还不错,欢迎订阅🚩 🎊个人主页:小编的个人主页 🎀 🎉欢迎大家点赞👍收藏⭐文章 ✌️ 🤞 🤟 🤘 🤙 👈 &…

Stable Diffusion的解读(一)

Stable Diffusion的解读(一) 文章目录 Stable Diffusion的解读(一)摘要Abstract一、机器学习部分1. Stable Diffusion的早期工作1.1 从编码器谈起1.2 第一条路线:VAE和DDPM1.3 第二条路线:VQVAE1.4 路线的交…

2024年该了解的常用渲染工具

随着图形技术和计算机科学的飞速发展,渲染工具在多个领域中的应用越来越广泛,包括影视特效、建筑设计、工业设计、游戏开发等。了解并掌握一些常用的渲染工具对于设计师和艺术家来说至关重要。 一、效果图建模及渲染软件 Autodesk 3ds Max 拥有强大的建…

解决 “Error: listen EACCES: permission denied 0.0.0.0:80“ 错误

前言 在开发过程中,我们经常会遇到各种各样的错误。其中一个常见的错误是 Error: listen EACCES: permission denied 0.0.0.0:80。这个错误通常发生在尝试启动一个开发服务器时,服务器试图绑定到80端口,但由于权限不足而失败。本文将详细介绍…

flink 内存配置(一):设置Flink进程内存

flink 内存配置(一):设置Flink进程内存 flink 内存配置(二):设置TaskManager内存 flink 内存配置(三):设置JobManager内存 flink 内存配置(四)…

51c嵌入式~电路~合集14

我自己的原文哦~ https://blog.51cto.com/whaosoft/12443598 一、嵌入式开发中的滤波器设计 什么是滤波器? 各种传感器信号多多少少会携带一些噪声信号,那么通过滤波器就能够更好的降低和去除噪声,还原真实有用信号。 滤波器是一个电路&…

安卓图片的着色教程(tint的使用)

目录 基础夯实:一、Tint的定义与作用二、Tint的应用场景三、Tint的使用方法四、Tint的优势五、注意事项 使用教程:一、xml文件中使用tint效果展示完整代码 二、代码中使用tint效果展示完整代码 三、使图片的主题和背景反色效果展示完整代码 四、运行例程…

Vulnhub靶机——DC-4

#环境准备 dc-4靶机:网卡nat模式 192.168.200.144 kali攻击机:网卡nat模式 192.168.200.129 #渗透过程 #信息收集 老规矩,先用nmap看看有什么端口可以搞 还是一如既往的80和22 访问80端口是一个登录界面,一上来就让我进行爆…

以太网交换安全:MAC地址漂移

一、什么是MAC地址漂移? MAC地址漂移是指设备上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。 MAC地址漂移的定义与现象 基本定义:MAC地址漂移发生在一个VLAN内的两个不同端口学习到相同的MAC地…

.NET6中WPF项目添加System.Windows.Forms引用

.NET6中WPF项目添加System.Windows.Forms引用 .NET6的WPF自定义控件默认是不支持System.Windows.Forms引用的,需要添加这个引用方法如下: 1. 在项目浏览器中找到项目右击,选择编辑项目文件(Edit Project File)。 …