当前位置: 首页 > news >正文

selfAttention 中的dk到底是什么

在Self-Attention机制中,为什么需要对 Q K T QK^T QKT 的结果进行缩放,除以 d k \sqrt{d_k} dk 。以下是详细解释:

缩放的原因

除以 d k \sqrt{d_k} dk 的原因有两个:

  1. 防止输入过大:如果不缩放, Q K T QK^T QKT的值可能会非常大,这会导致Softmax的值非常小,接近于0,从而造成梯度消失问题。
  2. 归一化:缩放使得 Q ⋅ K Q\cdot K QK 的结果满足均值为0,方差为1的分布,类似于归一化的效果。

数学推导

假设 Q Q Q K K K中的元素是从均值为0,方差为1的独立同分布随机变量。设 X = q i X = q_i X=qi Y = k i Y = k_i Y=ki,则:

  1. E ( X ) = E ( Y ) = 0 E(X) = E(Y) = 0 E(X)=E(Y)=0
  2. D ( X Y ) = E ( X 2 ) E ( Y 2 ) − [ E ( X ) E ( Y ) ] 2 = 1 ⋅ 1 − 0 = 1 D(XY) = E(X^2)E(Y^2) - [E(X)E(Y)]^2 = 1 \cdot 1 - 0 = 1 D(XY)=E(X2)E(Y2)[E(X)E(Y)]2=110=1

因此, D ( ∑ i = 1 d k q i k i ) = d k D\left(\sum_{i=1}^{d_k} q_i k_i\right) = d_k D(i=1dkqiki)=dk

Q K T QK^T QKT 的缩放:
D ( Q K T d k ) = 1 d k D ( ∑ i = 1 d k q i k i ) = 1 d k ⋅ d k = 1 D\left(\frac{QK^T}{\sqrt{d_k}}\right) = \frac{1}{d_k} D\left(\sum_{i=1}^{d_k} q_i k_i\right) = \frac{1}{d_k} \cdot d_k = 1 D(dk QKT)=dk1D(i=1dkqiki)=dk1dk=1

好的,让我们通过一个具体的例子来说明 (d_k) 的作用以及为什么要除以 (\sqrt{d_k})。

假设我们有一个查询向量 q \mathbf{q} q 和一个键向量 k \mathbf{k} k,它们的维度 d k = 4 d_k = 4 dk=4。这些向量的元素是均值为0、方差为1的独立同分布随机变量。我们具体来看下这两个向量的点积结果以及缩放后的结果。

假设:
q = [ 1.2 , − 0.5 , 0.3 , 0.8 ] \mathbf{q} = [1.2, -0.5, 0.3, 0.8] q=[1.2,0.5,0.3,0.8]
k = [ 0.6 , − 0.1 , − 1.5 , 0.7 ] \mathbf{k} = [0.6, -0.1, -1.5, 0.7] k=[0.6,0.1,1.5,0.7]

计算点积:
q ⋅ k = 1.2 × 0.6 + ( − 0.5 ) × ( − 0.1 ) + 0.3 × ( − 1.5 ) + 0.8 × 0.7 \mathbf{q} \cdot \mathbf{k} = 1.2 \times 0.6 + (-0.5) \times (-0.1) + 0.3 \times (-1.5) + 0.8 \times 0.7 qk=1.2×0.6+(0.5)×(0.1)+0.3×(1.5)+0.8×0.7
= 0.72 + 0.05 − 0.45 + 0.56 = 0.72 + 0.05 - 0.45 + 0.56 =0.72+0.050.45+0.56
= 0.88 = 0.88 =0.88

不进行缩放时,这个点积结果直接用于Softmax计算。但是,当 (d_k) 很大时,这个值可能会非常大,导致Softmax输出非常尖锐。为了避免这种情况,我们将点积结果除以 (\sqrt{d_k}) 来进行缩放。

在本例中, d k = 4 d_k = 4 dk=4,因此 d k = 2 \sqrt{d_k} = 2 dk =2

缩放后的点积结果:
q ⋅ k d k = 0.88 2 = 0.44 \frac{\mathbf{q} \cdot \mathbf{k}}{\sqrt{d_k}} = \frac{0.88}{2} = 0.44 dk qk=20.88=0.44

现在我们来比较一下经过Softmax之前的值和经过缩放后的值在Softmax函数中的效果:

假设有另外两个查询向量和键向量的点积结果分别为2.0和0.5,计算Softmax之前和之后的值。

不缩放时的点积结果
未缩放的点积值 = [ 0.88 , 2.0 , 0.5 ] \text{未缩放的点积值} = [0.88, 2.0, 0.5] 未缩放的点积值=[0.88,2.0,0.5]
Softmax计算:
Softmax ( 0.88 , 2.0 , 0.5 ) = [ e 0.88 e 0.88 + e 2.0 + e 0.5 , e 2.0 e 0.88 + e 2.0 + e 0.5 , e 0.5 e 0.88 + e 2.0 + e 0.5 ] \text{Softmax}(0.88, 2.0, 0.5) = \left[ \frac{e^{0.88}}{e^{0.88} + e^{2.0} + e^{0.5}}, \frac{e^{2.0}}{e^{0.88} + e^{2.0} + e^{0.5}}, \frac{e^{0.5}}{e^{0.88} + e^{2.0} + e^{0.5}} \right] Softmax(0.88,2.0,0.5)=[e0.88+e2.0+e0.5e0.88,e0.88+e2.0+e0.5e2.0,e0.88+e2.0+e0.5e0.5]
≈ [ 0.184 , 0.643 , 0.173 ] \approx [0.184, 0.643, 0.173] [0.184,0.643,0.173]

缩放后的点积结果
缩放的点积值 = [ 0.44 , 1.0 , 0.25 ] \text{缩放的点积值} = [0.44, 1.0, 0.25] 缩放的点积值=[0.44,1.0,0.25]
Softmax计算:
Softmax ( 0.44 , 1.0 , 0.25 ) = [ e 0.44 e 0.44 + e 1.0 + e 0.25 , e 1.0 e 0.44 + e 1.0 + e 0.25 , e 0.25 e 0.44 + e 1.0 + e 0.25 ] \text{Softmax}(0.44, 1.0, 0.25) = \left[ \frac{e^{0.44}}{e^{0.44} + e^{1.0} + e^{0.25}}, \frac{e^{1.0}}{e^{0.44} + e^{1.0} + e^{0.25}}, \frac{e^{0.25}}{e^{0.44} + e^{1.0} + e^{0.25}} \right] Softmax(0.44,1.0,0.25)=[e0.44+e1.0+e0.25e0.44,e0.44+e1.0+e0.25e1.0,e0.44+e1.0+e0.25e0.25]
≈ [ 0.272 , 0.459 , 0.269 ] \approx [0.272, 0.459, 0.269] [0.272,0.459,0.269]

可以看到,经过缩放后,Softmax的输出分布更加平滑,不再像未缩放前那样有较大的差异,这有助于梯度的稳定性和模型的训练效果。

通过这个例子,我们可以清楚地看到为什么在自注意力机制中对点积结果进行缩放是必要的,这样可以防止数值过大导致的问题,并且让Softmax的输出更为合理。

结论

通过上述推导,我们可以看到:

  • 对 (QK^T) 进行缩放,使其满足均值为0,方差为1的分布。
  • 这样处理后的值更加稳定,输入到Softmax函数后可以避免梯度消失问题。

综合解释

  • 为什么要缩放:缩放可以防止输入到Softmax的值过大,导致梯度消失,同时使得分布更稳定。
  • 缩放因子 d k \sqrt{d_k} dk :因为键向量 K K K 的维度为 d k d_k dk,在计算点积时需要对结果进行缩放,使其方差为1,保持稳定性。

通过对这些细节的处理,Self-Attention机制能够在训练和推理过程中保持数值稳定性和计算效率。

相关文章:

selfAttention 中的dk到底是什么

在Self-Attention机制中,为什么需要对 Q K T QK^T QKT 的结果进行缩放,除以 d k \sqrt{d_k} dk​ ​。以下是详细解释: 缩放的原因 除以 d k \sqrt{d_k} dk​ ​ 的原因有两个: 防止输入过大:如果不缩放&#xf…...

安装MongoDB UI客户端工具:mongodb-compass-1.40.2-win32-x64.msi

文章目录 1、安装 mongodb-compass-1.40.2-win32-x64.msi2、安装后配置链接地址: 1、安装 mongodb-compass-1.40.2-win32-x64.msi 2、安装后配置链接地址:...

一行命令搞定内网穿透

一行命令搞定内网穿透 一款开源免费的内网穿透工具:localtunnel ,基于 nodejs 实现,无需修改 DNS 和防火墙设置,方便快捷的将内网服务暴露到外网,为开发人员、测试人员以及需要分享本地项目的人提供实时的公网访问方式…...

C语言——扫雷游戏

扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要…...

【LLM】-16-评估LLM-与标准答案的差距

目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案,只要能制定一个评估标准,就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...

WeNet 2.0:更高效的端到端语音识别工具包

WeNet 2.0:更高效的端到端语音识别工具包 原文链接:[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包,WeNet 2.0在此基础上进行了四项主要更新&#xff0c…...

阿里大模型调用 = 》通义千问大语言模型

背景:简单的通过API或者SDK在线调用阿里云大模型(基于百炼平台),基于在线知识库 参考地址:安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...

idea使用free流程,2024idea免费使用

1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...

算法_链表专题---持续更新

文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解,包含题目有&a…...

在Windows MFC\C++编程中,如何使用OnCopyData函数

在C中,OnCopyData 函数通常不是标准C库的一部分,而是与特定的图形用户界面(GUI)框架相关联,如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中,OnCopyData 是用于处理来自其他应…...

【Qt】项目代码

main.cpp文件 argc:命令行参数个数。*argv[ ]:每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序,一定需要QApplication对象。 widget w; 在创建项目的时候,勾选widg…...

MySQL中常用工具

MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件,不能导入sql文件...

关于儿童编程语言

青少年通常会通过Scratch或Python开始学习编程。在这两种语言中,代码的编写(或者在Scratch中是构建)方式类似于英语,这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能: 信号处理函数 参数: signum:要处理的信号 handler:信号处理方式 SIG_IGN:忽略信号 SIG_DFL:执行默认操作 handler:捕捉信 …...

RoboDK的插件

目录 collision-free-planner: opc-ua: collision-free-planner: RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息,请访问我们的 文档。 生成参数无碰撞…...

List<HashMap<String, Object>>排序

如果列表中的元素类型是List<HashMap<String, Object>>&#xff0c;排序时需要考虑到value可能是任意类型的对象。在这种情况下&#xff0c;你可以针对具体的类型进行比较&#xff0c;或者使用Comparable接口来确保对象可以被正确比较。 示例代码 假设我们想要根据…...

【大数据】探索大数据基础知识:定义、特征与生态系统

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

营销材料翻译质量对销售渠道的影响

在当今的全球市场中&#xff0c;与不同受众进行有效沟通的能力对于企业的成功至关重要。营销材料的高质量翻译在通过销售渠道塑造客户旅程方面发挥着重要作用&#xff0c;影响着知名度、参与度、转化率和保留率。方法如下&#xff1a; 提高品牌知名度 在销售渠道的顶端&#x…...

centos7.9安装k8s 1.3

centos7.9安装k8s 1.3 k8s环境规划&#xff1a;初始化修改网卡配置两台服务器都执行 配置阿里yum源 安装containerd服务安装初始化k8s需要的软件包kubeadm初始化k8s集群 扩容k8s集群-添加第一个工作节点安装kubernetes网络组件-Calico测试在k8s创建pod是否可以正常访问网络和co…...

【第七节】python多线程及网络编程

目录 一、python多线程 1.1 多线程的作用 1.2 python中的 threading 模块 1.3 线程锁 二、python网络编程 2.1 通过socket访问网络 2.2 python2.x中的编码问题 2.3 python3的编码问题 一、python多线程 1.1 多线程的作用 多线程技术在计算机编程中扮演着重要的角色&a…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...