self-attention(自注意力机制)

news2024/12/23 9:51:04

先举个有趣的例子理解 Q 、 K 、 V Q、K、V QKV
在这里插入图片描述
将我们要查询的内容,和商品列表进行相似度匹配,先拿出相似度更高的商品列表。
再根据以往的评价,计算出总分,按照分数进行排序。

self-attention

在这里插入图片描述

d k \sqrt{d_k} dk 的意义: d k d_k dk表示k向量的长度,这里除以 d k \sqrt{d_k} dk ,是因为如果 Q 、 K Q、K QK的维度很长的时候, Q K T QK^T QKT点积后就会变得很大,这样就会将softmax函数推到具有非常小的梯度区域当中去,为了避免这种影响,所以除以 d k \sqrt{d_k} dk

  • “非常小的梯度区域” 指的是在优化算法中,模型参数的梯度值(即损失函数关于参数的变化率)非常接近于零的情况。这可能发生在训练过程中,当模型接近一个局部极小值或平稳区域时,梯度值可能会变得非常小,甚至接近于零。

  • 在深度学习中,梯度下降等优化算法用于更新模型的参数,以最小化损失函数。梯度指导着参数的更新方向,因此较大的梯度通常会导致较大的参数更新,从而加速训练。然而,如果梯度变得非常小,参数的更新幅度将会减缓,从而可能影响模型的训练速度和性能。

整个计算过程:
在这里插入图片描述

假设 a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3, a 4 a_4 a4都是embedding之后的向量

步骤一:求出 Q 、 K 、 V Q、K、V QKV
从这几个向量 a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3, a 4 a_4 a4中分别提取 q i q^i qi k i k^i ki v i v^i vi,实用的提取方式就是让他们分别乘以 W 1 W_1 W1, W 2 W_2 W2, W 3 W_3 W3,例如

  • q 1 q^1 q1 = a 1 ∗ W 1 a^1 * W_1 a1W1
  • k 1 k^1 k1 = a 1 ∗ W 2 a^1 * W_2 a1W2
  • v 1 v^1 v1 = a 1 ∗ W 3 a^1 * W_3 a1W3

由于他们都是公用一套 W 1 W_1 W1, W 2 W_2 W2, W 3 W_3 W3,所以可以并行计算:
在这里插入图片描述

将所有的 a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3, a 4 a_4 a4 concat起来,得到一个4x2的矩阵,分别乘以 W 1 W_1 W1, W 2 W_2 W2, W 3 W_3 W3

  • W 1 W_1 W1,就会得到一个4x2的输出矩阵,输出的每一行就是 q 1 q^1 q1 q 2 q^2 q2 q 3 q^3 q3 q 4 q^4 q4,整个矩阵就是 Q Q Q,也就是公式中的 Q Q Q
  • V V V的维度不一定要和 Q 、 K Q、K QK的维度一样,但一般在nlp中他们都是一样的
  • W i W_i Wi初始值随机,随着训练更新

步骤二: 计算 α = Q K T d k d k : k 向量长度 \begin{aligned}\text{计算}&\alpha=\frac{QK^T}{\sqrt{d_k}}\\d_k&:k\text{向量长度}\end{aligned} 计算dkα=dk QKT:k向量长度

在得到了 q i q^i qi k i k^i ki v i v^i vi之后,先用 q 1 q_1 q1举例:
q 1 q_1 q1分别和 k 1 k^1 k1 k 2 k^2 k2 k 3 k^3 k3 k 4 k^4 k4相乘,得到了 α 1 , 1 \alpha_{1,1} α1,1 α 1 , 2 \alpha_{1,2} α1,2 α 1 , 3 \alpha_{1,3} α1,3 α 1 , 4 \alpha_{1,4} α1,4,这四个数值 α i {\alpha_i} αi称他为相似度分数

步骤三:softmax处理 α ^ = s o f t m a x ( Q K T d k ) \hat{\alpha}=softmax(\frac{QK^T}{\sqrt{d_k}}) α^=softmax(dk QKT)

把4个相似度分数经过softmax处理,我们就拿了新的4个相似度分数,

步骤四:
把上面得到的4个新数值,分别和 v 1 v^1 v1 v 2 v^2 v2 v 3 v^3 v3 v 4 v^4 v4进行相乘后的结果再相加,得到加权和 b 1 b_1 b1 b 2 b_2 b2 b 3 b_3 b3 b 4 b_4 b4

这里面的 b i b_i bi每一个都包含了全局信息,因为在计算过程中,这每一个b都是他自己的query和其他的key进行计算的得到的。

在这里插入图片描述

代码演示

在这里插入图片描述

随机出一个输入X,X的维度就是1、4、2,1是batchsize,4是指有4个token,2是指每个token的长度,
将X传入到对象中去,
d k ∗ − 0.05 d_k * -0.05 dk0.05 = 1 d k \frac{1}{\sqrt{d_k}} dk 1
分别使用3个全连接层, 从输入中提取qkv,
然后Q乘K的转置再除以 d k \sqrt{d_k} dk
最后在做一个softmax,在最后一个纬度做(dim=-1)
最后把softmax拿得到结果和V做点乘,拿到最终的输出。

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

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

相关文章

ubuntu 安装 python

ubuntu 安装 python 初环境与设备查询是否安装安装python 本篇文章将介绍ubuntu 安装 python 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 查询是否安装 因为系统也许会自带一个python,所以验证一下,如果自…

Linux mysql5.7开启 binlog

查看 mysql是否开启 binlog。 查看命令: show variables like %log_bin%; log_bin OFF 是关闭的状态。 编辑my.cnf配置文件 vim /etc/my.cnf 默认的配置文件内容: 增加下面内容 server_id 1 binlog_format ROW log-bin mysql_log_bin 重启mysq…

uniapp 微信小程序 订阅消息

第一步&#xff0c;需要先去小程序官方挑选一下订阅模板拿到模板id 订阅按钮在头部导航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…

【Java】try|catch|throws 具体详解+应用

目录 tryCatch 基本介绍 使用细节 throws异常处理 基本介绍 ​ 使用细节 自定义异常 基本概念 步骤 throw和throws的区别 tryCatch 基本介绍 使用细节 throws异常处理 基本介绍 使用细节 自定义异常 基本概念 步骤 throw和throws的区别

常见的软件项目质量管理5种方法

产品质量的重要性不言而喻&#xff0c;为了确保项目质量&#xff0c;我们需要快速高效地找出影响产品质量的因素。如果不能及时高效洞察影响因素&#xff0c;无法及时修复项目缺陷和Bug&#xff0c;往往会对项目造成意想不到的后果和风险&#xff0c;如需求变更、重要开发节点延…

【雕爷学编程】Arduino动手做(201)---行空板开发环境之Jupyter

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

数据库运维是什么意思?主要工作包含哪些?

还有不少小伙伴不知道数据库运维是什么意思&#xff1f;主要工作内容包含哪些&#xff1f;今天我们就一起来简单了解一下吧&#xff0c;仅供参考哦&#xff01; 数据库运维是什么意思&#xff1f; 数据库运维是指对数据库系统进行管理、监控和维护的过程&#xff0c;以确保数据…

CMU 15-445 -- Introduction to Distributed Databases - 19

CMU 15-445 -- Introduction to Distributed Databases - 19 引言System ArchitectureShared MemoryShared DiskShared Nothing Early Distributed Database SystemsDesign IssuesHomogeneous VS. Heterogeneous Database PartitioningNaive Table PartitioningHorizontal Part…

第一章 SpringBoot入门

1.SpringBoot简介 1.1.简介 Spring Boot来简化spring应用开发&#xff0c;约定大于配置去繁从简&#xff0c;just run就能创建一个独立的&#xff0c;产品级别的应用。 背景&#xff1a;J2EE笨重开发&#xff0c;繁多的配置、低下开发效率、复杂的部署流程、第三方技…

出现raise NotImplementedError报错

在学习《动手学深度学习》时&#xff0c;实现下面代码时&#xff0c;报出raise NotImplementedError错误。 import collections import torch from d2l import torch as d2l import math from torch import nnclass Seq2SeqEncoder(d2l.Encoder):def __init__(self,vocab_size,…

并发编程面试题2

并发编程面试题2 一、AQS高频问题&#xff1a; 1.1 AQS是什么&#xff1f; AQS就是一个抽象队列同步器&#xff0c;abstract queued sychronizer&#xff0c;本质就是一个抽象类。 AQS中有一个核心属性state&#xff0c;其次还有一个双向链表以及一个单项链表。 首先state…

NR sidelink(二) S-SSB

这篇看下NR sidelink S-SSB的内容,主要内容包括NR sidelink的同步原则,S-SSB的结构及相关序列,S-SSB的时频域位置,MasterInformationBlockSidelink IE解析,sidelink的同步过程,PSBCH payload及UE相关的能力IE。 NR sidelink的同步原则 参与sidelink通信之前,UE需要与覆…

VR全景智慧文旅,用科技助力旅游业振兴

引言&#xff1a; 近年来&#xff0c;科技的迅猛发展将我们带入一个全新的数字化时代&#xff0c;而虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;技术则以其令人惊叹的全新方式&#xff0c;影响着各个领域。其中&#xff0c;旅游业作为人们探索世界、体…

AIGC接地项目机会网赚场景

变现场景 1、知识库 一个大公司有1000多份内部法规、合规的条文和规范&#xff0c;给员工普及这些知识很难&#xff0c;提前上课永远敌不过遇事抱佛脚。要是有一个能将1000条发文倒背如流的老司机&#xff0c;随时随地结合员工工作的实际场景&#xff0c;给出条文解释就好了。 …

多平台发布文章-项目总结

做个最近的AIGC内容创作技术要点的总结吧&#x1f63c; 流程图 时序图

研发工程师玩转Kubernetes——通过PV的节点亲和性影响Pod部署

在《研发工程师玩转Kubernetes——PVC通过storageClassName进行延迟绑定》一文中&#xff0c;我们利用Node亲和性&#xff0c;让Pod部署在节点ubuntud上。因为Pod使用的PVC可以部署在节点ubuntuc或者ubuntud上&#xff0c;而系统为了让Pod可以部署成功&#xff0c;则让PVC与Pod…

死锁的成因,和解决方案总结

何为死锁 死锁是多线程或并发程序中的一种情况&#xff0c;当多个线程因为竞争资源而相互等待&#xff0c;并且无法继续执行的情况。在死锁中&#xff0c;每个线程都在等待其他线程释放资源&#xff0c;从而导致所有线程都陷入无限等待状态&#xff0c;无法继续向前执行&#…

Python(七十六)字符串的驻留机制

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

C++:类与对象补充 - 初始化列表、static成员、友元、匿名对象

目录 引言 一、 初始化列表 1.1 构造函数内部赋值 1.2 使用初始化列表 1.3 注意事项 1.4 explicit关键字 二、 static成员 2.1 概念 2.2 情景 2.3 特性 三、 友元 3.1 概念 3.2 语法 3.2.1 友元函数 3.2.2 友元类 3.3 特性 四、匿名对象 4.1 概念 4.2 语法 …