news 2026/9/22 14:38:43

大模型面试题31:自注意力机制的公式,为什么要除以sqrt(d_k)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型面试题31:自注意力机制的公式,为什么要除以sqrt(d_k)

一、小白先懂:自注意力是怎么“打分”的?

自注意力的核心,是给每个词(Token)计算和其他词的匹配度分数,步骤就3步:

  1. 生成3个向量:给每个词生成 Query(查询向量,好比“我要找什么”)、Key(键向量,好比“我有什么”)、Value(值向量,好比“我要输出的内容”)。
  2. 算匹配分数:用 Query 和 Key 的点积,计算两个词的相似度,公式就是:
    分数=Q×KT\text{分数} = Q \times K^T分数=Q×KT
    KTK^TKT是 Key 的转置,简单理解就是为了让矩阵能相乘)
  3. 分数归一化:用 softmax 把分数变成 0~1 之间的权重,权重越高,说明两个词关联越强,最后用权重乘以 Value 得到结果。

二、问题来了:直接算分数会“出bug”

如果不除以dk\sqrt{d_k}dk,会遇到两个大麻烦,我们用比喻讲明白:

1. 第一个麻烦:dkd_kdk越大,分数值越“离谱”

dkd_kdk是 Query 和 Key 的维度(比如 BERT 里dk=64d_k=64dk=64)。
我们可以把 Q 和 K 的每个维度值,想象成独立的随机数(均值0,方差1)。
两个向量的点积,就是把对应维度的值相乘再相加:
Q⋅K=q1k1+q2k2+...+qdkkdkQ \cdot K = q_1k_1 + q_2k_2 + ... + q_{d_k}k_{d_k}QK=q1k1+q2k2+...+qdkkdk

根据统计学知识:独立随机变量相加,方差会累加

  • 单个qikiq_ik_iqiki的方差是1×1=11 \times 1 = 11×1=1
  • dkd_kdk个加起来,总方差就是dkd_kdk,标准差就是dk\sqrt{d_k}dk

举个例子:

  • dk=64d_k=64dk=64时,点积的标准差是 8 → 分数值可能会跑到±几十
  • dk=1024d_k=1024dk=1024时,标准差是 32 → 分数值可能会跑到±几百

2. 第二个麻烦:分数太大会让 softmax “罢工”

softmax 函数的特点是:输入值越大,输出越极端
比如有两个分数:105,经过 softmax 后:
softmax([10,5])=[e10e10+e5,e5e10+e5]≈[0.993,0.007]softmax([10,5]) = [\frac{e^{10}}{e^{10}+e^5}, \frac{e^5}{e^{10}+e^5}] ≈ [0.993, 0.007]softmax([10,5])=[e10+e5e10,e10+e5e5][0.993,0.007]
几乎所有权重都集中在最大的分数上,其他分数的权重接近 0。

更要命的是:极端的输入会导致 softmax 的梯度消失
softmax 的梯度和输入值的大小成反比,输入值越大,梯度越接近 0 → 模型训练时学不到东西,相当于“罢工”了。

三、除以dk\sqrt{d_k}dk的“魔法”:给分数“降温”

这个操作的核心目的,就是把点积的方差归一化到 1,让分数值的范围变得合理。

因为点积的方差是dkd_kdk,标准差是dk\sqrt{d_k}dk,所以除以dk\sqrt{d_k}dk后:
归一化分数=Q×KTdk\text{归一化分数} = \frac{Q \times K^T}{\sqrt{d_k}}归一化分数=dkQ×KT

  • 新的方差 =dkdk=1\frac{d_k}{d_k} = 1dkdk=1
  • 新的标准差 = 1 → 分数值会稳定在±几的范围

还是上面的例子,分数105除以 8(dk=64d_k=64dk=64)后变成1.250.625,再经过 softmax:
softmax([1.25,0.625])≈[0.65,0.35]softmax([1.25, 0.625]) ≈ [0.65, 0.35]softmax([1.25,0.625])[0.65,0.35]
权重分布更合理,既突出了重要的词,又不会完全忽略其他词,同时梯度也能正常传递,模型就能顺利学习了。

四、总结

小白一句话总结

除以dk\sqrt{d_k}dk是为了防止点积分数太大,避免 softmax 输出极端值导致梯度消失,让模型能正常训练。

技术一句话总结

自注意力中Q⋅KTQ \cdot K^TQKT的方差与dkd_kdk成正比,除以dk\sqrt{d_k}dk可将方差归一化到 1,保证 softmax 输出的权重分布合理且梯度稳定。

完整自注意力公式

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q,K,V) = \text{softmax}\left( \frac{QK^T}{\sqrt{d_k}} \right) VAttention(Q,K,V)=softmax(dkQKT)V


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 22:00:51

不会写文献综述?90%的学生都卡在这3个误区!

你的文献综述是不是还停留在这样的模式? “张三(2021)认为……李四(2022)指出……王五(2023)发现……” 一段接一段,人名年份轮番登场,看似“引用规范”,实…

作者头像 李华
网站建设 2026/9/12 4:07:11

从“堆砌摘要”到“批判整合”:高质量文献综述的4步法

还在这样写文献综述吗? “张三(2021)指出……李四(2022)认为……王五(2023)发现……” 一段接一段,人名年份轮番登场,看似“引用规范”,实则逻辑松散、主题…

作者头像 李华
网站建设 2026/9/19 21:36:13

save_steps参数设置建议:平衡训练速度与模型保存频率

save_steps 参数设置建议:平衡训练速度与模型保存频率 在深度学习的实际项目中,尤其是在使用 LoRA 对大模型进行微调时,我们常常面临一个微妙的权衡:既希望训练过程尽可能高效,又担心某次意外中断导致数小时甚至数天的…

作者头像 李华
网站建设 2026/9/20 10:38:00

石墨文档协作编辑lora-scripts中文文档翻译

lora-scripts:轻量化模型微调的实践利器 在生成式 AI 快速落地的今天,如何以低成本、高效率的方式定制专属模型,已成为开发者和企业关注的核心问题。全参数微调虽然效果稳定,但动辄数百 GB 显存和数天训练周期,让大多数…

作者头像 李华
网站建设 2026/9/21 21:58:18

揭秘JDK 23向量API集成:为何它将彻底改变Java性能格局

第一章:揭秘JDK 23向量API集成:为何它将彻底改变Java性能格局Java平台在JDK 23中迎来了一项里程碑式的性能革新——向量API(Vector API)的正式集成。这一特性源自Project Panama,旨在通过高级抽象让开发者轻松利用现代…

作者头像 李华