为什么self-attention除以根号dk而不是其他值

最近在看transformers源码的过程中一直有个疑问,为什么self-attention在Q向量与K向量转置相乘后要除以根号dk而不是dk或是其他值,借此机会做个记录。

为什么要除以一个数?

self-attention在计算注意力分数的时候,用query向量与key向量转置相乘,再除以根号d_k,经过softmax之后得到注意力权重,源码实现如下:

python 复制代码
scores = torch.matmul(query, key.transpose(-2, -1)) \ math.sqrt(d_k)
p_attn = F.softmax(scores, dim = -1)

那为什么要除以一个数呢?这与softmax的求导有关,下面给出softmax计算公式:

另softmax的表达式为x,则softmax求导结果为x*(1-x),若某项zi偏大或偏小,则softmax计算结果趋向于1或0,而其导数则会趋向于0,造成梯度消失,不利于训练的稳定,所以在计算完注意力分数后要除以一个数,以稳定其梯度。

为什么要除以根号dk呢?

在明白为什么要除以一个数之后,那么问题来了,为什么除以的是根号dk呢,而不是dk、dk的平方或者其他数值呢?

首先假设q向量与k向量是均值为0、方差为1的随机向量,则q向量与k向量相乘之后,方差随维度线性增长,相乘后方差为dk,标准差为根号dk。

根据方差的性质:

因此可以做出以下推导,在q向量与k向量乘积后除以根号dk,可以将原来的方差缩放为1,将输出控制在合理的范围内,为后续的Softmax计算提供了稳定的输入。

相关推荐
闵孚龙10 小时前
MSE AI任务调度爆火:Agent定时任务、Dify、OpenClaw、Hermes、百炼统一调度,如何把AI助手变成自动干活的数字员工?
人工智能
数智工坊10 小时前
【DACS论文阅读】跨域混合采样如何让语义分割模型从合成数据无缝迁移到真实世界
论文阅读·人工智能·算法·机器人·无人机
AI技术控10 小时前
TimesNet 论文解读:把一维时间序列变成二维变化建模的通用时序骨干
人工智能·python
米开朗基杨10 小时前
Codex App 接入中转站后仍然可以解锁所有功能
人工智能·chatgpt
一线数智10 小时前
AI+业务 Vs 业务+AI?寻找让AI真正“转”起来的确定性答案
大数据·人工智能
XMAIPC_Robot10 小时前
RK3588 PLC AMP 核隔离配置 + RT‑Thread 实时优化 + FPGA 接口定义 + CODESYS 工程
人工智能·嵌入式硬件·深度学习·fpga开发
happyness4410 小时前
2026 主流 AI 编码全景对比表
人工智能·ai编程
智慧医养结合软件开源10 小时前
数智协同,赋能康养服务高效升级
大数据·人工智能·云计算·生活
SEO_juper10 小时前
行业白皮书 GEO 化转 HTML + 结构化,AI 引用率提升 50%
人工智能·chatgpt·seo·白皮书·独立站·外贸电商·谷歌geo
萤萤七悬10 小时前
【AI精彩BUG汇总】一、yolo图像训练截图蓝色变橙色
人工智能·yolo·bug