深度网络学习笔记(一)——self-attention机制介绍和计算步骤

self-attention机制介绍及其计算步骤

  • 前言
  • 一、介绍和意义
  • 二、 计算细节
    • 2.1 计算Attention Score
    • 2.2 计算value
    • 2.3 计算关联结果b
    • 2.4 统一计算
  • 三、总结

前言

Transformer是一种非常常见且强大的深度学习网络架构,尤其擅长处理输出为可变长度向量序列的任务,如自然语言处理(NLP)和图(Graph)处理。Transformer采用了self-attention机制,克服了传统循环神经网络(RNN)在处理长序列时存在的梯度消失和并行计算困难的问题。本文将详细介绍self-attention机制的定义和计算细节。

如果觉得该笔记对您有用的话,可以点个小小的赞,或者点赞收藏关注一键三连ヾ(◍’౪`◍) ~ 谢谢!!

一、介绍和意义

Self-attention是一种计算输入序列中每个元素对其他所有元素的重要性权重的方法。它主要用于捕捉序列数据(如文本)中的长期依赖关系和上下文信息。尽管类似的功能可以通过全连接层(fully-connected layer)实现,但当输入长度非常大时,全连接层的参数计算量会爆炸性增加,导致计算负担过大。以下图为例,当输入为4个节点时,全连接层的计算量已经非常巨大(箭头数量),可以想象当输入增多后的计算量。在这里插入图片描述
为了解决以上问题,Self-attention便被提了出来。主要计算步骤如下(注意在本文中,所有的计算公式都是基于上图中四个输入(这四个输入将在一个向量中)的例子,即输入为 a 1 , a 2 , a 3 , a 4 a_1,a_2,a_3, a_4 a1a2a3a4)。

二、 计算细节

2.1 计算Attention Score

Self-attention用于捕捉上下文信息,因此引入了注意力分数(Attention Score) α \alpha α。给 α \alpha α加上下标后,就可以代表任意两个节点之间的关联程度了。比如 α 1 , 2 \alpha{_1,_2} α1,2代表了节点a1和a2之间的关联程度。为计算关联程度因子 α \alpha α,我们引入了三个向量Query, Key和Value,分别用首字母q,k,v来表示。这里首先介绍q,k和 α \alpha α的计算公式:
q i = W q ⋅ a i k j = W k ⋅ a j α i , j = q i ⋅ k j q^i = W^q \cdot a^i \\ k^j = W^k \cdot a^j \\ \alpha{_i,_j} = q^i \cdot k^j qi=Wqaikj=Wkajαi,j=qikj
解释:首先对于每个输入 a i a^i ai(如单词的嵌入),通过乘上 W q W^q Wq获得对应的 q i q^i qi,之后对任意输入 a j a^j aj乘上 W k W^k Wk获得 k j k^j kj,将这两个值相乘即可获得输入 a i a^i ai a j a^j aj的关联程度,即注意力分数为 α i , j = q i ⋅ k j \alpha{_i,_j} = q^i \cdot k^j αi,j=qikj。如下图所示。在这里插入图片描述
当然输入 a i a^i ai也可以用自己的q乘k得到自己与自己的关联程度,比如 α 1 , 1 \alpha{_1,_1} α1,1可由 q 1 ⋅ k 1 q^1 \cdot k^1 q1k1计算得到。最后,将得到的结果输入一个softmax层中,使用softmax函数对注意力分数进行归一化,得到每个输入节点对其他输入向量的权重,即获得处理后的attention sore α ′ \alpha^{\prime} α,如下图所示(右上角是softmax计算公式)。
在这里插入图片描述

2.2 计算value

再将向量 W q W_q Wq乘上对应的输入向量a,得到对应的v值,公式为:
v i = W v ⋅ a i v^i = W_v \cdot a^i vi=Wvai这与 Query 和 Key 的计算方式一致。将每个输入向量对应的v值全部计算出来,如下图所示。

在这里插入图片描述

2.3 计算关联结果b

最终我们可以得到Self-attention针对单个输入 a 1 a_1 a1的输出结果 b 1 b^1 b1
b 1 = ∑ i α 1 , i ′ ⋅ v i b^1 = \sum_{i} \alpha_{1,i}^{\prime} \cdot v^i b1=iα1,ivi根据这个公式,我们可以看出,某个上下文向量同a1的关联程度越高,对应的值在b中的占比就越大。
在这里插入图片描述

2.4 统一计算

上述计算都是针对单个输入进行的,在这里我们将将输入看成一个整体,即一整个输入向量,来再次梳理整个计算步骤。

  1. 首先我们可以将所有输入向量统合到一起,形成一个向量为I,这里依旧用图中的4个输入为例,公式为:
    I = [ a 1   a 2   a 3   a 4 ] I = [ a^{1} \ a^{2} \ a^{3} \ a^{4} ] I=[a1 a2 a3 a4]
  2. 其次我们可以计算统一的Q,K和V:
    Q = [ q 1   q 2   q 3   q 4 ] = W q ⋅ [ a 1   a 2   a 3   a 4 ] = W q ⋅ I K = [ k 1   k 2   k 3   k 4 ] = W k ⋅ [ a 1   a 2   a 3   a 4 ] = W k ⋅ I V = [ v 1   v 2   v 3   v 4 ] = W v ⋅ [ a 1   a 2   a 3   a 4 ] = W v ⋅ I Q = [ q^{1} \ q^{2} \ q^{3} \ q^{4}] = W^q \cdot [ a^{1} \ a^{2} \ a^{3} \ a^{4} ] = W^q \cdot I \\ K = [ k^{1} \ k^{2} \ k^{3} \ k^{4} ] = W^k \cdot [ a^{1} \ a^{2} \ a^{3} \ a^{4} ] = W^k \cdot I\\ V = [ v^{1} \ v^{2} \ v^{3} \ v^{4} ] = W^v \cdot [ a^{1} \ a^{2} \ a^{3} \ a^{4} ] = W^v \cdot I Q=[q1 q2 q3 q4]=Wq[a1 a2 a3 a4]=WqIK=[k1 k2 k3 k4]=Wk[a1 a2 a3 a4]=WkIV=[v1 v2 v3 v4]=Wv[a1 a2 a3 a4]=WvI
  3. 此时,我们可以把输入节点a1的关联分数 α \alpha α 写成如下公式:
    [ α 1 , 1   α 1 , 2   α 1 , 3   α 1 , 4   ] = q 1 ⋅ [ k 1   k 2   k 3   k 4 ] [\alpha_{1,1} \ \alpha_{1,2} \ \alpha_{1,3} \ \alpha_{1,4} \ ] = q^1 \cdot [k^{1} \ k^{2} \ k^{3} \ k^{4}] [α1,1 α1,2 α1,3 α1,4 ]=q1[k1 k2 k3 k4]同理,剩下三个输入向量的关联分数公式为:
    [ α 2 , 1   α 2 , 2   α 2 , 3   α 2 , 4   ] = q 2 ⋅ [ k 1   k 2   k 3   k 4 ] [ α 3 , 1   α 3 , 2   α 3 , 3   α 3 , 4   ] = q 3 ⋅ [ k 1   k 2   k 3   k 4 ] [ α 4 , 1   α 4 , 2   α 4 , 3   α 4 , 4   ] = q 4 ⋅ [ k 1   k 2   k 3   k 4 ] [\alpha_{2,1} \ \alpha_{2,2} \ \alpha_{2,3} \ \alpha_{2,4} \ ] = q^2 \cdot [k^{1} \ k^{2} \ k^{3} \ k^{4}]\\ [\alpha_{3,1} \ \alpha_{3,2} \ \alpha_{3,3} \ \alpha_{3,4} \ ] = q^3 \cdot [k^{1} \ k^{2} \ k^{3} \ k^{4}]\\ [\alpha_{4,1} \ \alpha_{4,2} \ \alpha_{4,3} \ \alpha_{4,4} \ ] = q^4 \cdot [k^{1} \ k^{2} \ k^{3} \ k^{4}] [α2,1 α2,2 α2,3 α2,4 ]=q2[k1 k2 k3 k4][α3,1 α3,2 α3,3 α3,4 ]=q3[k1 k2 k3 k4][α4,1 α4,2 α4,3 α4,4 ]=q4[k1 k2 k3 k4]我们可以发现,当我们把所有输入向量的关联分数放进一个向量A中时,我们会得到:
    A = [ α 1 , 1 α 1 , 2 α 1 , 3 α 1 , 4 α 2 , 1 α 2 , 2 α 2 , 3 α 2 , 4 α 3 , 1 α 3 , 2 α 3 , 3 α 3 , 4 α 4 , 1 α 4 , 2 α 4 , 3 α 4 , 4 ] = [ q 1 q 2 q 3 q 4 ] ⋅ [ k 1 k 2 k 3 k 4 ] = Q T ⋅ K A = \begin{bmatrix} \alpha_{1,1} & \alpha_{1,2} & \alpha_{1,3} & \alpha_{1,4} \\ \alpha_{2,1} & \alpha_{2,2} & \alpha_{2,3} & \alpha_{2,4} \\ \alpha_{3,1} & \alpha_{3,2} & \alpha_{3,3} & \alpha_{3,4} \\ \alpha_{4,1} & \alpha_{4,2} & \alpha_{4,3} & \alpha_{4,4} \\ \end{bmatrix} = \begin{bmatrix} q^1 \\ q^2 \\ q^3 \\ q^4 \\ \end{bmatrix} \cdot \begin{bmatrix} k^1 & k^2 & k^3 & k^4 \end{bmatrix} =Q^T \cdot K A= α1,1α2,1α3,1α4,1α1,2α2,2α3,2α4,2α1,3α2,3α3,3α4,3α1,4α2,4α3,4α4,4 = q1q2q3q4 [k1k2k3k4]=QTK
    最后,通过softmax得到最终的注意力矩阵(Attention Matrix) A ′ A^\prime A值:
    A ′ = [ α 1 , 1 ′ α 1 , 2 ′ α 1 , 3 ′ α 1 , 4 ′ α 2 , 1 ′ α 2 , 2 ′ α 2 , 3 ′ α 2 , 4 ′ α 3 , 1 ′ α 3 , 2 ′ α 3 , 3 ′ α 3 , 4 ′ α 4 , 1 ′ α 4 , 2 ′ α 4 , 3 ′ α 4 , 4 ′ ] = s o f t m a x ( A ) A^\prime = \begin{bmatrix} \alpha_{1,1}^\prime & \alpha_{1,2}^\prime & \alpha_{1,3}^\prime & \alpha_{1,4}^\prime \\ \alpha_{2,1}^\prime & \alpha_{2,2}^\prime & \alpha_{2,3}^\prime & \alpha_{2,4}^\prime \\ \alpha_{3,1}^\prime & \alpha_{3,2}^\prime & \alpha_{3,3}^\prime & \alpha_{3,4} ^\prime\\ \alpha_{4,1}^\prime & \alpha_{4,2}^\prime & \alpha_{4,3}^\prime & \alpha_{4,4}^\prime \\ \end{bmatrix} =softmax( A ) A= α1,1α2,1α3,1α4,1α1,2α2,2α3,2α4,2α1,3α2,3α3,3α4,3α1,4α2,4α3,4α4,4 =softmax(A)
  4. 此时我们已经得到了整体的关联分数向量 A ′ A^\prime A和整体的Value向量,就可以通过相乘得到对应每输入个位置的加权和,就是整体的输出结果向量O:
    O = [ b 1   b 2   b 3   b 4 ] = [ v 1   v 2   v 3   v 4 ] ⋅ A ′ = V ⋅ A ′ O = [b^1\ b^2\ b^3\ b^4] = [v^1\ v^2\ v^3\ v^4] \cdot A^\prime =V \cdot A^\prime O=[b1 b2 b3 b4]=[v1 v2 v3 v4]A=VA

三、总结

以上就是 self-attention 层的计算步骤。尽管看上去复杂,但实际上在这些计算中只有 W q W^q Wq W k W^k Wk W v W^v Wv是需要在网络中学习的参数,输入 I 在输入层就会传递给网络,剩下的都是基于这些参数的计算。
self-attention 机制的核心在于能够并行计算,极大地提升了训练和推理效率,特别适合 GPU 加速。这是 self-attention 相比 RNN 的一个重要优势。通过 self-attention 机制,Transformer 可以在处理长序列时有效地捕捉到序列中的长期依赖关系和上下文信息,解决了传统 RNN 的一些主要问题。在下一篇文章中,我们将深入探讨 Transformer 的整体架构。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51仿真器 PZ-51Tracker 未知设备

插上仿真器,右击我的电脑 等待一下,选择winUSB 此时在keil中选择仿真器会报错,需要安装如下我是win10) 安装好后退出再试,没有报错即可 这项也要选择 另外配置晶振

AI去衣技术中的几何着色:揭秘数字时尚的魔法

在数字化时代,人工智能(AI)正以前所未有的速度改变我们的生活,从智能家居到自动驾驶汽车,再到个性化医疗。然而,AI的影响远不止于此。它正在重塑我们对艺术、设计和时尚的理解。特别是在数字时尚领域&#…

数学建模 —— 人工神经网络(6)

目录 一、人工神经网络 1.1 人工神经网络结构 1.2 神经元/感知器 1.3 激活函数 1.3.1 sign函数 1.3.2 sigmoid函数(Logistic函数) 1.3.3 tanh双曲正切函数 1.3.4 ReLU函数 1.4 分类 二、BP人工神经网络 2.1 概述 2.2 处理过程 2.3 例题 2.…

太空音响器

目录 1.课程设计项目 2.任务和要求 3.总体功能设计与仿真 3.1.元器件汇总 3.2.总体方案设计 3.3 总体电路仿真 4.单元模块设计及电路仿真 4.1 互补型振荡器电路 5.组装,调试与测试 6.分析与总结 7.参考文献 1.课程设…

汇编原理 | 二进制、跳转指令、算数运算、

一.二进制 two complement reprentation(补码) 二进制的运算: 6的二进制 0110 -6的二进制 如何表示? 四个bit的第一个bit表示符号:1负0正 -6表示为1010 解释: 0 0000 1 0001 -1 1111(由 …

[图解]建模相关的基础知识-01

6 00:00:21,930 --> 00:00:25,450 我们尝试以一个更深的 7 00:00:25,460 --> 00:00:27,170 或者更基本的角度 8 00:00:28,410 --> 00:00:32,760 来思考建模的问题 9 00:00:37,630 --> 00:00:42,470 首先,我们来说一个观点,就是说 10 00:…

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接: 1、用WPS打开文档; 2、用Ctrla全选,或者点击上方的【选择】-【全选】,选中文档全部内容; 3、按CTRLSHIFTF9组合键,即可一次性将取文档中所有…

IDEA一键启动多个微服务

我们在做微服务项目开发的时候,每次刚打开IDEA,就需要把各个服务一个个依次启动,特别是服务比较多时,逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。 操作步骤 点击Edit Configurations 2.点击“”,…

数据图同步软件ETL

ETL介绍 ETL(Extract, Transform, Load)软件是专门用于数据集成和数据仓库过程中的工具。ETL过程涉及从多个数据源提取数据,对数据进行转换以满足业务需求,然后将数据加载到目标数据库或数据仓库中。以下是ETL软件的一些关键功能…

matplotlib实现双柱图

1,读取txt文件实现数据可视化 2,txt文件如下图 姓名,语文,数学,英语 小米,98,100,20 小明,100,20,98 小黑,78,98,1003,代码如下 import matplotlib.pyplot as plt import matplotlib matplotlib.use(TkAgg) plt.rcParams[font.family]SimHe…

鸿蒙应用Stage模型【应用/组件级配置】

应用/组件级配置 在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的[app.json5配置文件]中配置bundleName标签,…

多元分类预测 | 基于哈里斯鹰优化HHO-卷积神经网络数据分类预测

文章目录 效果一览文章概述订阅专栏只能获取一份代码部分源码参考资料效果一览 文章概述 多元分类预测 | 基于哈里斯鹰优化HHO-卷积神经网络数据分类预测 HHO-CNN 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类…

设计模式(四)原型模式

文章目录 原型模式简介结构UML图具体实现关于拷贝浅拷贝深拷贝实现深拷贝方法 原型模式简介 原型模式是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。工作原理:原型模式创建新的对象,其本质就…

iOS App Tech Support(URL)

咪萌是一个语音类交友直播App,分成红艳知己,点唱大厅,歌手驻唱等不同房间分类,广场可以看到其他人发的一些动态,一个非常不错的App 如果您有任何疑问,您可以留言或者将问题发送至我们的邮箱。 我们会第一时…

子比主题zibll5.7修复版

下载地址:子比主题zibll5.7修复版

GPT-4o VS GPT-3.5 完胜

前言: 最近,GPT-4o已经限时免费开放了,试了一下,然后,说我的时间到了,然后,有给我转到3.5,正好遇到一个问题做一下对吧,感觉4O完胜啊。3.5还是很好胡诌,也就…

C语言深入理解指针(5)

文章目录 一、sizeof和strlen的对比1、sizeof2、strlen3、sizeof和strlen的对比 二、数组和指针笔试题解析1、一维数组2、字符数组3、二维数组 一、sizeof和strlen的对比 1、sizeof siezeof是一个操作符,sizeof计算的是变量所占内存空间大小,单位是字节…

Photoshop 首选项设置建议

Windows Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K macOS Ps菜单:Photoshop/首选项 Photoshop/Preferences 快捷键:Cmd K 对 Photoshop 的首选项 Preferences进行设置,可以提高修图与设计效率。下面是一些…

Android 使用kotlin Retrofit2 + Dagger2完成网络请求跟依赖注入组合使用

文章目录 (一)引入依赖(二)基本概念Dagger中的基本概念:Retrofit介绍 (三)Dagger2 Module 和 Provides 和 Component Inject(四)Retrofit2 创建数据类Bean跟Service服务&…

GIt快速入门(一文学会使用Git)

GIt快速入门 文章目录 GIt快速入门一、为什么要学习Git二、Git的安装1.安装Git2.下载GUI 三、Git的概念1、版本控制2、集中式控制3、分布式控制4、多人协作开发1.并行开发2.分支管理3.冲突解决4.代码审查5.分布式特性 四、Git客户端操作1.界面介绍2.提交操作3.创建分支4.合并分…