深度网络学习笔记(一)——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 的整体架构。

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

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

相关文章

网络原理———TCP/IP—网络层IP协议

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 目录 网络层IP协议4位版本号4位首部长度8位服务类型16位总长度16位标识 3位标志 13位片偏移8位生存时间8位协议16位首部校验和32位源IP地址 和 32位目的IP地址方案1:动态分配IP地址方案2:NAT机…

小白跟做江科大32单片机之旋转编码器计次

原理部分按照下面这个链接理解即可y小白跟做江科大32单片机之对射式红外传感器计次-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139350487https://blog.csdn.net/weixin_58051657/article/details/139350487 实验过程 1.按照江科大老师给的电路图进行连接…

C语言(内存函数)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…

springboot+vue+mybatis博物馆售票系统+PPT+论文+讲解+售后

如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统博物馆售票系统信息管理难度大,容错率低,…

sqoop操作

介绍 sqoop是隶属于Apache旗下的, 最早是属于cloudera公司的,是一个用户进行数据的导入导出的工具, 主要是将关系型的数据库(MySQL, oracle...)导入到hadoop生态圈(HDFS,HIVE,Hbase...) , 以及将hadoop生态圈数据导出到关系型数据库中 操作 将数据从mysql中导入到HDFS中 1.全量…

Pytest框架中的Setup和Teardown功能

在 pytest 测试框架中,setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作,而pytest 实际上并没有内置的 setup 和 teardown 函数,而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数(Hook…

SAP PP学习笔记14 - MTS(Make-to-Stock) 按库存生产(策略10),以及生产计划的概要

上面讲了SAP里面的基础知识,BOM,作业手顺(工艺路线),作业区(工作中心),MRP,MPS等概念,现在该到用的时候了。 SAP PP学习笔记07 - 简单BOM,派生BO…

STC8增强型单片机进阶开发--独立按键

知不足而奋进 望远山而前行 文章目录 目录 文章目录 前言 目标 内容 原理图 按键消抖 软件设计 要求 分析 实现单个按钮 实现多个按钮 使用位操作存储状态 总结 前言 本次学习旨在探索按键操作及按键消抖的原理和实现方法。通过学习原理图、按键消抖的三种方法以及软件设计的要…

如何选择D类音频放大器(数字功率放大器)

1 简介 多年来,音频内容一直在不断发展。从当地唱片店购买 12 英寸 LP 黑胶唱片的时代已经成为过去,现在我们通过流式传输几乎可即时播放云端的任何内容。虽然一些音频爱好者会为了获得新奇体验而重拾黑胶唱片,但今天绝大多数的音频都是以数…

JVM学习笔记(持续更新)

JDK、JRE、JVM区别? 类加载过程 装载 验证 准备 解析 初始化 类加载器分类 双亲委派模型 如何打破双亲委派模型? 自定义类加载器,集成ClassLoader类重写loadClass,如Tomcat JVM内存模型 JVM 需要使用计算机的内存,Java 程序…

【LeetCode 101】对称二叉树

1. 题目 2. 分析 这道题比较经典。我又一次做错了,这次是花了20min都没有做出来。 最开始我的思想就是,递归比较左根节点的左子树和右根节点的右子树是否对称即可,然后觉得能解决问题了,便动手coding。哪知道,又碰到了…

电源滤波器怎么选用

电源滤波器怎么选用 滤波器应用场景及作用第一步:第二步:第三步:第四步: 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…

算法人生(18):从神经网络的“剪枝策略”看“怎么找回时间”

IT人的工作和生活难平衡这事,到底要怎么解决呢,让我们从神经网络的“剪枝策略”中找点灵感吧! 剪枝策略是指训练和优化深度神经网络时采取的一种技术,从名字就知道,它就像修剪树木一样,去除不必要的枝叶&a…

Vuex 是什么?VueX简介

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介Vuex 是什么核心概念1.State(状态)2. Getter(获取器)3. Mutation(突变)4. Action(动作)5. Module(模块) 原理解…

使用STS临时访问凭证通过客户端直连OSS对象存储服务器

目录 1、导论 2、客户端直传 3、创建RAM用户以及RAM角色 4、如何实现客户端直传 4.1、跨域访问 4.2、安全授权 5、代码示例 5.1、后端代码实例 5.2、客户端代码实例 1、导论 最近在做项目的过程中使用到了阿里云OSS来存储客户端上传的文件,方法是直接将客…

Keras深度学习框架实战(3):EfficientNet实现stanford dog分类

1、通过EfficientNet进行微调以实现图像分类概述 通过EfficientNet进行微调以实现图像分类,是一个使用EfficientNet作为预训练模型,并通过微调(fine-tuning)来适应特定图像分类任务的过程。一下是对相关重要术语的解释。 Effici…

Flutter-自定义可展开文本控件

Flutter 在移动开发中,常常需要处理一些长文本显示的场景,如何优雅地展示这些文本并允许用户展开和收起是一个常见的需求。在本文中,我将分享如何使用Flutter实现一个可展开和收起的文本控件。 效果 我们将实现一个可展开和收起的文本控件…

yolov10模块

yolov10模块 1 C2f2 C2fCIB2.1 CIB2.2 RepVGGDW 3 PSA4 SCDown5 v10Detect 论文代码:https://github.com/THU-MIG/yolov10 论文链接:https://arxiv.org/abs/2405.14458 Conv是Conv2dBNSiLU PW是Pointwise Convolution(逐点卷积) DW是Depthwise Convolut…

【SQL学习进阶】从入门到高级应用【企业真题】

文章目录 第一题第二题第三题第四题第五题第六题第七题第八题第九题MySQL行转列使用case whengroup by完成 第十题 🌈你好呀!我是 山顶风景独好 💕欢迎来到我的博客,很高兴能够在这里和您见面! 💕希望您在这…

疫情物资捐赠和分配系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,机构管理,用户管理,发放管理,物资管理 前台账户功能包括:系统首页,个人中心,物资论坛,公告信息…