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

news2024/11/12 17:09:56

自注意力机制(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.coloradmin.cn/o/2236987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业相机常用功能之白平衡及C++代码分享

目录 1、白平衡的概念解析 2、相机白平衡参数及操作 2.1 相机白平衡参数 2.2 自动白平衡操作 2.3 手动白平衡操作流程 3、C++ 代码从XML读取参数及设置相机参数 3.1 读取XML 3.2 C++代码,从XML读取参数 3.3 给相机设置参数 1、白平衡的概念解析 白平衡(White Balance)…

推荐一款SSD硬盘优化器:Auslogics SSD Optimizer Pro

SSD Optimizer Pro 是一款专为优化固态硬盘 (SSD) 性能而设计的专业工具,旨在最大化 SSD 的效率,延长硬盘使用寿命。凭借简便的操作界面和强大的优化功能,SSD Optimizer Pro 可以让用户充分利用 SSD 的优势,从而获得更高的系统性能…

常用机器人算法原理介绍

一、引言 随着科技的不断发展,机器人技术在各个领域得到了广泛应用。机器人算法是机器人实现各种功能的核心,它决定了机器人的行为和性能。本文将介绍几种常用的机器人算法原理,包括路径规划算法、定位算法和运动控制算法。 二、路径规划算法…

基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究

摘要:本文探讨了完善适配视频号交易小程序的重要意义,重点阐述了开源 AI 智能名片 S2B2C 商城小程序在这一过程中的应用。通过分析其与直播间和社群的无缝衔接特点,以及满足新流量结构下基础设施需求的能力,为门店在视频号直播交易…

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别,可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网: ​安装 WSL 前提 以下基于windows 111专业版进行配置,windows 10应该也是可以…

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

AHB Matrix 四星级 验证笔记(2.4) Tt3.3AHB总线协议测试时的 并行数据

文章目录 前言一、代码二、错误1.地址范围2. 并行执行线程中变量覆盖的情况3.有关incr的beat 前言 来源路科验证本节搞定 T3.3 AHB总线协议的覆盖&#xff1a;AHB_PROTOCOL_COVER 即测试ahb slave接口和master接口支持&#xff08;尽可能&#xff09;全部的ahb协议传输场景&am…

C++builder中的人工智能(16):神经网络中的SoftPlus激活函数

现在我们继续探索一下SoftPlus激活函数在人工神经网络&#xff08;ANN&#xff09;中的应用。了解SoftPlus激活函数的工作原理&#xff0c;将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录 神经网络中的激活函数是什么&#xff1f;能在C中创建激活函数吗&#xff1f…

Java的(.properties后缀)的配置文件介绍与读取(3种情况)

目录 一、&#xff08;.properties后缀&#xff09;的配置文件。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;基本语法。 1、键值对。 2、如何注释&#xff1f; 3、编码类型。 4、空白字符。 5、多行值。 &#xff08;3&#xff09;".properties后缀&…

yaml文件编写

Kubernetes 支持YAML和JSON格式管理资源 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式;用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化容易读懂 一&#xff0c;yaml语法格式 1.1 基本语法规则 使用空格进行缩进&#xff08;不使用制表符&#xff0…

Node.js——fs模块-文件删除

1、在Node.js中&#xff0c;我们可以使用unlink或unlinkSync来删除文件。 2、语法&#xff1a; fs.unlink(path,callback) fs.unlinkSync(path) 参数说明&#xff1a; path 文件路径 callback 操作后的回调函数 本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学…

新版IJidea 如何打开数据库窗口(2024.2.4 版)(连接数据库)

新版IJidea 2024.2.4 如何打开数据库窗口&#xff1f; 方式&#xff1a;使用插件&#xff0c;Database Navigator 1.安装插件&#xff0c;步骤如下&#xff1a; 打开 Settings/Preferences 对话框&#xff08;快捷键 CtrlAltS&#xff09;。前往 Plugins 菜单项。在搜索框中…

黄仁勋:AI数据中心可扩展至百万芯片 性能年翻倍,能耗年减2-3倍

本周&#xff0c;英伟达CEO黄仁勋接受了《No Priors》节目主持人的采访&#xff0c;就英伟达的十年赌注、x.AI超级集群的快速发展、NVLink技术创新等AI相关话题进行了一场深度对话。黄仁勋表示&#xff0c;没有任何物理定律可以阻止将AI数据中心扩展到一百万个芯片&#xff0c;…

java 面向对象高级

1.final关键字 class Demo{public static void main(String[] args) {final int[] anew int[]{1,2,3};// anew int[]{4,5,6}; 报错a[0]5;//可以&#xff0c;解释了final修饰引用性变量&#xff0c;变量存储的地址不能被改变&#xff0c;但地址所指向的对象的内容可以改变} }什…

Codeforces Round 984 (Div. 3)

题目链接 A. Quintomania 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;vector<int>arr(n);fer(i, 0 ,n) cin >> arr[i];fer(i, 1, n){if(abs(arr[i] - arr[i - 1]) ! 5 && abs(arr[i] - arr[i - 1]) ! 7){cout << "N…

基于BILSTM及其他RNN序列模型的人名分类器

数据集Kaggle链接 NameNationalLanguage | Kaggle 数据集分布: 第一列为人名,第二列为国家标签 代码开源地址 Kaggle代码链接 https://www.kaggle.com/code/houjijin/name-nationality-classification Gitee码云链接 人名国籍分类 Name Nation classification: using BI…

打包18款AI营销神器,批量运营项目收藏必备!

淘金的不如卖铲子的&#xff0c;AI工具的应用越来越普及&#xff0c;这也让很多原本淘金的人都来卖铲子。如果自己能有很好的铲子&#xff0c;自己也会淘金&#xff0c;就可以既能卖铲子赚钱&#xff0c;也能掏金赚钱。 还有两天就是双十一了&#xff0c;各种AI工具&#xff0…

Leetcode - 周赛422

目录 一&#xff0c;3340. 检查平衡字符串 二&#xff0c;3341. 到达最后一个房间的最少时间 I 三&#xff0c;3342. 到达最后一个房间的最少时间 II 四&#xff0c;3343. 统计平衡排列的数目 一&#xff0c;3340. 检查平衡字符串 本题直接暴力&#xff0c;定义一个变量 s&…

聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 11月5日消息 比亚迪腾势D9登陆泰国 苹果 iOS 18.2 将发布 真我GT7 Pro防尘防水细节 小米15 Ultra最快明年登场 …

Pytest-Bdd-Playwright 系列教程(7):使用测试代码生成辅助工具

Pytest-Bdd-Playwright 系列教程&#xff08;7&#xff09;&#xff1a;测试代码生成辅助工具的使用 前言一、代码生成辅助工具的设计思路1.1 功能概览1.2 适用人群 二、如何使用 pytest-bdd 代码生成器三、代码生成器的实际应用场景3.1 初学者的学习和实践3.2 大规模功能测试3…