想象你就是一家 AI 公司的 HR,要为一个“高级 AI 工程师”岗位招人。岗位需求一发布,简历堆满邮箱。你不可能把 1000 份简历全部背下来,只能一边盯着岗位需求,一边快速扫过每份简历的关键词,心里默默打一个“契合分”,最后按契合度的高低,把最优秀候选人的经验吸收进团队。Transformer 的缩放点积注意力(Scaled Dot-Product Attention),就是把这套“招聘逻辑”变成了一台超高效率的引擎。更妙的是,在一个句子里,每个词都在扮演 HR——它先发出“我想找什么”的岗位需求(Query),再和全句每个词的“简历标签”(Key)做点积打分,把分数缩放到合适区间,经 softmax 换算成权重,最后对每个词的“真实内涵”(Value)加权求和,完成一次自我升级。这套机制有多高效?一个小小的“除以 √dk”设计,为什么能稳定训练、防止梯度饱和?它和前辈“加性注意力”相比又赢在哪里?本文把这套引擎拆成 7 个零件,从招聘故事讲到数学原理,让你彻底看透这个 Transformer 最核心的运算。

岗位关联

缩放点积注意力是 Transformer 的运算心脏。理解它,是读懂大模型工作原理、攻克注意力相关面试题的必修课,也是从 RNN 时代走向大模型时代的第一块跳板。

目录
  1. 可视化演示
  2. 注意力核心:先学会“抓重点”
  3. 点积相似度:给契合度打分
  4. 缩放因子动机:给打分装上“校准刻度”
  5. 权重归一化:把分数换算成“录用比例”
  6. 加权聚集:融合成“综合人才画像”
  7. 加性对比:为什么点积赢了“人工面试官”
  8. 效率优势:矩阵乘法撑起的“招聘流水线”
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示QK点积计算、缩放因子稳定梯度、注意力加权求和三个核心步骤,切换模式查看注意力运算的完整流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

QK点积:衡量Query与Key的相似度 Q和K向量点积得到注意力分数矩阵 高分离线表示高相似度 Score = Q · K^T 点积计算高效,可并行化加速

注意力核心:先学会“抓重点”

想象你刚入职一家 AI 公司的 HR 部,老板丢来一个岗位需求:“高级 AI 工程师,精通 Transformer,最好懂推荐系统。”办公桌上 1000 份简历堆得像小山。你不可能逐字读完每一份,于是很自然地学会“抓重点”:一边盯着岗位需求里的关键词,一边扫过每份简历的标题,心里快速圈定几个高度吻合的候选人。这就是注意力机制的雏形——把有限的精力,动态地投放到最值得看的地方。句子里的词也一样:它在升级自己的理解时,不必平均地阅读每个词,而应该重点看最相关的词。

在 Transformer 里,输入 X 是句子里所有词向量排成的矩阵。为了让每个词既能“发出招聘需求”,又能“展示简历标签”与“呈现真实能力”,我们准备了三个投影矩阵,把 X 分别变成 Q、K、V。Q 的每一行是一份“岗位需求书”,写的是“我在找什么”;K 的每一行是“简历标签”,写的是“我是什么”;V 的每一行才是“真实能力”,写的是“我能贡献什么”。三者来自同一个输入,却扮演三个截然不同的角色。

这三个矩阵的来历,就是三个可学习的线性变换。Q 和 K 的特征维度记为 dk,V 的特征维度记为 dv。注意,dk 将出现在后面缩放公式的分母里——它是整套机制中最重要的超参数之一。

三份材料备齐,招聘流程进入正题——批量打分。

Q=XWQ,K=XWK,V=XWVQ = XW_Q, \quad K = XW_K, \quad V = XW_V
同一个输入 X 乘以三套不同的权重矩阵,就变成三种角色:查询、键、值。
  1. 输入矩阵 X句子里每个词的向量排成一行,X 有 n 行、每行 d 维。
    X∈Rn×dX \in \mathbb{R}^{n \times d}
  2. 投影矩阵 WW 把词向量旋转拉伸到查询或内容的语义空间,数值靠训练学出。
    WQ,WK∈Rd×dk,WV∈Rd×dvW_Q, W_K \in \mathbb{R}^{d \times d_k}, \quad W_V \in \mathbb{R}^{d \times d_v}
  3. 三路变身同一个 X 分别乘三个矩阵,得到完全不同的三套角色向量。
    Q,K,V 分别承载查询、标签与内容Q, K, V \text{ 分别承载查询、标签与内容}

点积相似度:给契合度打分

现在你手头有岗位需求书和成堆简历。你发明了一把“契合度尺子”:把需求书里每一项要求,与简历标签里对应的词相乘,再把所有乘积加起来。方向一致、互相呼应的项乘积为正,冲突的项乘积为负,所以总分越高代表越契合。这就是“点积”打分——两个向量对应位置相乘后求和,简单、直观、可并行。

设 qᵢ 是第 i 个词的查询向量,kⱼ 是第 j 个词的键向量,它们的点积分就是所有分量乘积之和。几何上,这个分数还等于“两个向量的长度之积乘以夹角的余弦”:夹角越小、方向越一致,分数越高——就像两个人握手时手掌方向一致,让人立刻觉得“合拍”。

把 Q 的所有行与 K 的所有行两两配对,就得到 n×n 的分数矩阵 S。在矩阵版本里,这一步写作 QKᵀ,一次乘法算完所有词对的相似度。几何意义同样清晰:分数同时反映“方向是否一致”和“向量本身的规模”。

打出来的分数有个隐患:一头大一头小,甚至出现负分。HR 盯着这些“裸分”开始发愁——直到“校准刻度”的出现。

sij=qi⋅kj=∑m=1dkqi,mkj,ms_{ij} = q_i \cdot k_j = \sum_{m=1}^{d_k} q_{i, m} k_{j, m}
方向越一致、向量越大,契合分就越高;夹角超过 90° 时,分数还会变成负数。
  1. 长度之积两向量各自长度相乘,代表“匹配规模”有多大。
    ∥qi∥⋅∥kj∥\lVert q_i \rVert \cdot \lVert k_j \rVert
  2. 夹角余弦cosθ 衡量方向一致程度,夹角越小越接近 1,垂直为 0,反向为负。
    cos⁡θ=qi⋅kj∥qi∥ ∥kj∥\cos\theta = \frac{q_i \cdot k_j}{\lVert q_i \rVert \, \lVert k_j \rVert}

缩放因子动机:给打分装上“校准刻度”

你很快发现,岗位需求写得越细(维度越高),分数就越“飘”:要么接近满分,要么低到离谱,几乎没有中间地带。原因藏在数学的统计规律里:每个单维度的微小波动,会在求和时被一步步累加,维度越多,累计的波动越大。就像用一把过于精密的尺子量桌面,反而把微小起伏都算进去,读数极不稳定。

假设 q 和 k 的每个分量独立同分布、均值 0、方差 1,那么点积的方差恰好等于分量个数 dk。方差等于 dk,意味着分数标准差约为 √dk:当 dk=64 时,分数能飘到 ±8 附近。这么大的分数塞进 softmax 的指数函数,输出会迅速变成“独热”——一个权重接近 1,其余接近 0,而饱和区域的梯度几乎为 0,训练基本停摆。

论文给出的解法朴素得惊人:把每个分数除以 √dk。方差对“乘以常数 a”会变成原来的 a² 倍,所以除以 √dk 后,方差精确回到 1。分数从“±√dk 量级”压缩回“±1 量级”,softmax 重新回到梯度充沛的工作区间。相当于给打分尺装上一个随维度自动变化的“校准刻度”。

有了缩放,完整的“缩放点积注意力”公式终于登场。它由四步接龙组成:内积打分、缩放、softmax 归一、对 V 加权求和。

校准后的分数不再“飘”,HR 心里的秤稳了。接下来要把分数翻译成“录用比例”。

Var(sijdk)=dk(dk)2=1\text{Var}\left(\frac{s_{ij}}{\sqrt{d_k}}\right) = \frac{d_k}{(\sqrt{d_k})^2} = 1
这一整行公式,就是 Transformer 引擎的核心燃烧室。
  1. 分数矩阵Q 与 K 的转置相乘,得到所有词对的匹配分数。
    QK⊤∈Rn×nQK^{\top} \in \mathbb{R}^{n \times n}
  2. 逐元素缩放每个分数独立除以 √dk,把方差从 dk 拉回 1。
    (QK⊤)ijdk\frac{(QK^{\top})_{ij}}{\sqrt{d_k}}
  3. 行方向 Softmax沿每一行把分数归一成概率权重,后面一节细讲。
    A=softmax(QK⊤dk)A = \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)
  4. 左乘 V权重矩阵与 Value 相乘,完成对真实内容的加权聚集。
    Output=AV\text{Output} = A V

权重归一化:把分数换算成“录用比例”

校准后的契合分有大有小,但不能直接用——你不可能同时给 1000 个人发全职 offer。你需要一个“比例换算器”:把一串实数分数变成非负、加起来恰好等于 100% 的权重。这个换算器就是 softmax。它先对每个分数做指数运算 eˣ,指数函数的特性是“强者愈强”:分数相差 1,权重差距立刻拉大到 e 倍(约 2.72 倍)。这保证了拔尖的候选人获得压倒性关注。

与此同时,softmax 又是“软”的——每个候选人都能分到一点正权重,注意力不会变成非赢即输的硬选择。分子上的指数把所有实数映射成正数,分母把同一行的指数求和,两者相除后,每行权重都是正数且总和为 1。整个过程光滑可微,梯度可以顺畅地往回传,模型才能端到端训练。

权重就是“录用比例”——万事俱备,只欠最后一步:把大家的经验融合成一份“综合人才画像”。

aij=exp⁡(sij)∑l=1nexp⁡(sil)a_{ij} = \frac{\exp\left(s_{ij}\right)}{\sum_{l=1}^{n} \exp\left(s_{il}\right)}
Softmax 让“录用比例”之和恒为 1,同时放大了高分候选人的存在感。
  1. 指数分子对分数取自然指数,负分变正数,分数差距被放大。
    esije^{s_{ij}}
  2. 行内求和把第 i 行所有候选人的指数值相加,作为归一化分母。
    ∑l=1nesil\sum_{l=1}^{n} e^{s_{il}}
  3. 相除归一分子除以分母,保证每行权重非负且总和为 1。
    ∑j=1naij=1\sum_{j=1}^{n} a_{ij} = 1

加权聚集:融合成“综合人才画像”

你最终没有只录取一个人,而是让所有候选人按“录用比例”贡献自己的看家本领:权重大的多讲,权重小的少讲,最后合成一份集百家之长的“综合人才画像”。这个画像既保留了与岗位匹配方向的优势,又不丢失多元细节。在注意力里,每个词的“真实内涵”就是 V 向量,我们把权重 aᵢⱼ 与对应的 vⱼ 相乘再全部相加,得到第 i 个词的新向量 zᵢ。

这一步叫“加权聚集”,本质就是“求期望”:以权重为概率,对候选 Value 做加权平均。用矩阵写出来更简洁——权重矩阵 A 左乘 V,一次算出整句话所有词的新表示。得到的输出与输入 X 的“词数”完全一致,只是每个词都吸收了全句的语境信息,这正是 Transformer 每一层都在做的“全员互相学习”。

至此,每个词都完成了一轮“招聘式升级”。可为什么非要用点积来打分?前辈“加性注意力”表示不服。

zi=∑j=1naijvj,Z=AVz_i = \sum_{j=1}^{n} a_{ij} v_j, \qquad Z = AV
输出是输入经过“招聘式调研”后的升级版:每个词都带着全句的信息走向下一层。
  1. 注意力权重aᵢⱼ 是第 i 个词分给第 j 个词的预算比例,介于 0 和 1 之间。
    aij∈[0,1],∑j=1naij=1a_{ij} \in [0, 1], \quad \sum_{j=1}^{n} a_{ij} = 1
  2. 加权缩放每个 Value 向量按权重放大或缩小,权重大的候选贡献更多。
    aijvja_{ij} v_j
  3. 累加融合所有候选按贡献相加,得到一个携带全句语境的输出向量。
    ∑j=1naijvj∈Rdv\sum_{j=1}^{n} a_{ij} v_j \in \mathbb{R}^{d_v}

加性对比:为什么点积赢了“人工面试官”

在你之前,公司老 HR 用的是另一套打分流程:不看简历关键词的直白匹配,而是让岗位需求和简历标签先过一层“人工神经网络面试官”——把两者线性组合后塞进 tanh 激活函数,再由一个权重向量压成一个分数。这就是“加性注意力”(additive attention)。它像一位精雕细琢的面试官,每见一位候选人都要现场发挥一次。

论文《Attention Is All You Need》的实验给出了一个反直觉的结论:加性注意力和点积注意力效果相近。但加性注意力每算一对 (q, k) 都要跑一遍带激活的小神经网络,无法直接利用矩阵乘法库;而点积注意力只需要一次内积,天然就是高度优化的矩阵乘法。这就好比“手工逐个面试”和“标准化笔试机器”:笔试机器虽然粗糙一点,但一次能扫上万份简历,还能源源不断并行。

老 HR 佩服得五体投地。于是现任 HR(Transformer)拍板:就用品类齐全、又快又省的缩放点积。

eij=v⊤tanh⁡(Wqi+Ukj)e_{ij} = v^{\top} \tanh\left(W q_i + U k_j\right)
加性注意力用一个小型神经网络打分,拟合能力强,但工程成本高出许多。
  1. 线性融合q 和 k 分别乘权重矩阵后相加,把两方信息揉在一起。
    Wqi+UkjW q_i + U k_j
  2. 非线性激活tanh 把融合结果压进 (-1, 1),引入非线性表达能力。
    tanh⁡(⋅)∈(−1,1)\tanh(\cdot) \in (-1, 1)
  3. 投影打分行向量 vᵀ 与结果做点积,压成一个标量分数。
    eij=v⊤tanh⁡(Wqi+Ukj)e_{ij} = v^{\top} \tanh(W q_i + U k_j)

效率优势:矩阵乘法撑起的“招聘流水线”

为什么点积能跑得这么快?因为它把“逐对打分”变成了“一次矩阵乘法”。你还是那个 HR,但不再手写 1000×1000 个契合分,而是把岗位需求、简历标签分别摞成两个大表格,交给一台能同时算所有交叉项的“超级表格机”。在 GPU 上,矩阵乘法有 cuBLAS 这类经过数十年优化的库,成百上千个核心同时发力,QKᵀ 一次算完 n² 个分数。

它们各自的复杂度都是 O(n²·d_k),但点积的常数小得多,也不需要逐个词调用 MLP,内存占用(中间激活)也更低。缩放、softmax、加权求和每一环都是矩阵或逐元素运算,天然可并行。这也解释了为什么后来的 GPT、BERT 都沿用这套设计——即使后续用稀疏或线性注意力来减小 n² 项,内核算法始终没有变。

从“抓重点”到“批量打分”,从“校准刻度”到“加权融合”,这套招聘流水线正式跑通。它稳定、高效、可并行——这正是 Transformer 一路狂飙的动力源泉。

S=QK⊤dk,A=softmax(S),Z=AVS = \frac{QK^{\top}}{\sqrt{d_k}}, \quad A = \text{softmax}(S), \quad Z = AV
从打分到融合,整条链路只有两次矩阵乘法和一次逐元素归一,每一步都踩在硬件的最强项上。
  1. 一次乘法算全部QKᵀ 把 n×n 个词对分数一次性算完,无需逐对循环。
    (n×dk)⋅(dk×n)⇒n×n(n \times d_k) \cdot (d_k \times n) \Rightarrow n \times n
  2. 逐元素缩放每个位置独立除以 √dk,天然可以并行执行。
    Sij=(QK⊤)ij/dkS_{ij} = (QK^{\top})_{ij} / \sqrt{d_k}
  3. 两条乘法链路softmax 后再乘 V,总计算量约为 O(n²·d_k)。
    Cost=O(n2dk)+O(n2dk)\text{Cost} = O(n^2 d_k) + O(n^2 d_k)

AI 应用场景

大模型预训练:让每个词“全员互招”

阶段:模型架构设计 / 预训练

解决的问题:传统 RNN 只能按从左到右的顺序读词,长句信息层层传递后被稀释,还无法并行。缩放点积注意力让句子里的每个词一步就与全句其他词完成“招聘式交流”,既抓得住长程依赖,又天然可并行。

具体案例:训练 8 亿参数的 GPT 风格模型时,输入 512 个 token 的批次,每个 Transformer block 都执行一次 QKᵀ/√dk 计算所有注意力分数,GPU 上数百个核心同时做矩阵乘法,训练吞吐量比同规模 LSTM 高出一个量级。

RAG 检索增强生成:把文档库当“简历池”

阶段:应用部署 / 推理增强

解决的问题:大模型的知识有截止时间,直接回答容易“一本正经地胡说”。RAG 把用户提问编码成 Query,把文档块编码成 Key 和 Value,先由注意力打分配对,再让模型基于检索到的文档内容生成答案,既省 token 又可控。

具体案例:企业知识库问答机器人遇到“我们的报销流程是什么”,系统把问题向量与数千个文档块的向量做点积打分,取 Top-5 文档块拼进上下文,模型再据此组织回答,答案准确率从 40% 提升到 90%。

推荐系统行为序列建模:动态理解用户此刻想要什么

阶段:特征工程 / 排序模型

解决的问题:用户的兴趣随浏览行为动态变化,一个固定兴趣向量难以刻画“此刻最想买什么”。自注意力对用户最近的行为序列做“全员互招”,每个行为都能根据当下情境重新赋权。

具体案例:电商“猜你喜欢”把最近浏览的 10 个商品编码成序列,Query 是当前场景偏好,Key 是商品标签,Value 是商品向量,加权融合后得到一个“实时兴趣画像”,点击率相对传统 LR 模型提升 15% 以上。

Python 演示

python41 行
# -*- coding: utf-8 -*-"""从零实现缩放点积注意力, 并验证缩放因子的作用."""import numpy as np  def softmax(x, axis=-1):    # 减去每行最大值防止 exp 溢出, 不改变结果    x = x - np.max(x, axis=axis, keepdims=True)    return np.exp(x) / np.sum(np.exp(x), axis=axis, keepdims=True)  def scaled_dot_product_attention(Q, K, V, scale=True):    # Q, K, V 形状: (batch, heads, seq_len, dk)    dk = K.shape[-1]    scores = np.matmul(Q, K.transpose(0, 1, 3, 2))    if scale:        scores = scores / np.sqrt(dk)    weights = softmax(scores)    return np.matmul(weights, V), weights  def main():    np.random.seed(42)    batch, heads, seq_len, dk = 2, 4, 8, 16    Q = np.random.randn(batch, heads, seq_len, dk)    K = np.random.randn(batch, heads, seq_len, dk)    V = np.random.randn(batch, heads, seq_len, dk)     raw_scores = np.matmul(Q, K.transpose(0, 1, 3, 2))    print("未缩放分数方差: %.2f (理论值 dk=%d)" % (raw_scores.var(), dk))    print("缩放后分数方差: %.2f (理论值 1)" % ((raw_scores / np.sqrt(dk)).var()))     _, w_raw = scaled_dot_product_attention(Q, K, V, scale=False)    _, w_scale = scaled_dot_product_attention(Q, K, V, scale=True)    print("未缩放时最大权重占比: %.3f" % w_raw.max(axis=-1).mean())    print("缩放后最大权重占比: %.3f" % w_scale.max(axis=-1).mean())    print("缩放后权重和是否为一:", np.allclose(w_scale.sum(axis=-1), 1.0))  if __name__ == "__main__":    main()
目的:用 NumPy 从零实现缩放点积注意力,并用随机数据验证“点积方差 = dk”“除以 √dk 后方差回到 1”两个理论结论。
  1. scores = np.matmul(Q, K.transpose(0, 1, 3, 2))把“逐对打分”换成批量矩阵乘法,所有分数一次算完。
  2. scores = scores / np.sqrt(dk)复现论文的缩放操作,让分数方差回到 1。
  3. x = x - np.max(x, axis=axis, keepdims=True)减去行最大值防止指数溢出,不影响 softmax 结果。
  4. return np.matmul(weights, V), weights权重与 Value 加权求和,得到输出上下文向量。
  5. print("未缩放分数方差: %.2f (理论值 dk=%d)" % (raw_scores.var(), dk))用数据验证“方差 = dk”的统计推导。
  6. print("缩放后最大权重占比: %.3f" % w_scale.max(axis=-1).mean())观察缩放让“一家独大”的权重占比明显回落。

常见误区

误区softmax 里有指数函数 exp,数字太大会爆掉,所以除以 √dk 把数值压小一点,防止溢出。

正解防溢出只是附赠的福利,不是设计初衷。核心动机是稳定方差:当 q、k 各分量独立同分布(均值 0、方差 1)时,点积方差 = dk,维度一大分数就散,softmax 迅速趋向“独热”,对应区域梯度接近 0,训练停摆。除以 √dk 让方差回到 1,是从梯度健康角度做的主刀手术。

为何常见:初学者看到 exp 最先想到“溢出”,又把“除以 √dk”误当成普通的数值归一化,忽略了背后的方差分析主线。

误区分数从 5.5 变成 2.75,排名会不会乱掉?缩放是不是在“篡改”打分结果?

正解除以一个正的常数 √dk 是严格单调变换,不会改变任何相对顺序——排名第一的还是第一,垫底的还是垫底。它改变的是绝对尺度,从而改变 softmax 的“锐利程度”。就像给温度计换刻度,水银柱高度变了,冷热排名没变。

为何常见:把“数值变小”直觉地等同于“信息被压缩或失真”,忽略了单调变换保持序关系这一基本性质。

误区向量维度越高,能装的信息越多,所以把 dk 设得越大,注意力就越聪明。

正解维度大确实承载更多信息,但点积方差随 dk 线性增长。若不缩放,softmax 迅速饱和、梯度消失,模型反而训不动。信息容量与数值稳定性需要权衡,缩放因子正是这个平衡点——它保证“装得多”的同时“车不翻”。

为何常见:人们习惯“特征越多越好”,忽略了高维下内积的统计行为:各分量的随机噪声会被线性累加。

误区加性注意力里有个神经网络在打分,看着就高级,点积这种“朴素算法”精度肯定不如它。

正解论文实验明确显示二者精度接近,点积还更快、更省内存。加性注意力用 tanh 网络打分,拟合能力不弱,但无法像点积那样利用高度优化的矩阵乘法库,工程上不划算。工程选型从来不是“谁理论更强”,而是“谁又快又够用”。

为何常见:看到“神经网络打分”就本能觉得更高级、更准,忽略了实验结论与工程成本的综合权衡。

误区softmax 输出的是概率权重,权重都是正的,所以输入分数也必须是正的,缩放就是为了把负分变正。

正解softmax 里的 exp 会把任何实数映射成正数,负输入完全没问题。缩放与正负无关,纯粹是尺度问题;即使输入是负分,经过指数映射后也能正常参与加权。把“输出为正”反推成“输入必须为正”,是逻辑方向搞反了。

为何常见:看到概率一堆正数,就联想输入也应为正,混淆了指数映射的性质与输入约束。

面试题

Q1. 缩放点积注意力中,Query 与 Key 的点积结果衡量的是什么?

单选题 · easy

  • A.两个向量的方向契合度← 正确答案
  • B.两个向量的长度之和
  • C.两个向量的分量之差
  • D.两个向量的均值大小

答案:A。点积等于对应分量相乘再求和,几何上等于“长度积 × cosθ”,方向越一致分数越高。长度之和、分量之差、均值都不是点积的定义,属于干扰项。

Q2. 为什么点积结果要除以根号 dk 再进 softmax?

单选题 · mid

  • A.为了降低矩阵乘法复杂度
  • B.为了稳定方差防止梯度饱和← 正确答案
  • C.为了让所有分数变成正数
  • D.为了让输出维度保持不变

答案:B。dk 维点积的方差等于 dk,维度越大分数越散,softmax 会趋向“独热”,饱和区梯度几乎为 0。除以 √dk 让方差回到 1,是梯度健康的关键。降低复杂度、变正、保维度都与缩放无关。

Q3. 假设 q、k 各分量独立同分布、均值为 0 方差为 1,dk=64,未缩放时点积分数的方差约为多少?

单选题 · mid

  • A.8.0
  • B.64.0← 正确答案
  • C.16.0
  • D.1.0

答案:B。点积是 dk 个独立乘积之和,方差沿维度相加,正好等于 dk=64。若再除以 √64=8,方差变为 1。8.0 是缩放后的标准差量级,16.0 和 1.0 都不符合推导。

Q4. 当 dk 很大且不缩放时,softmax 输出的权重分布会如何变化?

单选题 · mid

  • A.权重分布更均匀
  • B.权重分布更极端← 正确答案
  • C.权重分布不受影响
  • D.权重总和超过一

答案:B。分数方差随 dk 增大,分数两极分化,softmax 的指数放大会让最大权重接近 1、其余接近 0,分布更极端而非更均匀。softmax 归一化保证总和恒为 1,因此 D 错误。

Q5. 加性注意力相对缩放点积注意力的主要劣势是?

单选题 · easy

  • A.预测精度必然更差
  • B.计算效率明显更低← 正确答案
  • C.无法用于自注意力
  • D.不能进行并行训练

答案:B。论文实验显示两者精度接近,A 错误。加性注意力每对 (q,k) 都要跑一遍带 tanh 的小网络,无法利用矩阵乘法库,常数大、内存开销高。它同样可用于自注意力,也能并行训练,C、D 均不成立。

Q6. 关于 softmax 在注意力中的作用,下列说法最准确的是?

单选题 · easy

  • A.指数放大优势,强者愈强← 正确答案
  • B.分数大多少,权重就大多少
  • C.分数越大,权重反而越小
  • D.权重只取决于分数排序

答案:A。softmax 先取指数再归一化,指数运算让分数差距放大 e 倍左右,因此“强者愈强”。它并不是线性的(B 错),也不与分数负相关(C 错),权重除了排序还依赖分数差值(D 错)。

Q7. 以下哪些属于缩放点积注意力相对加性注意力的工程优势?

多选题 · mid

  • A.可借助矩阵乘法高效并行← 正确答案
  • B.内存占用相对更低← 正确答案
  • C.精度一定严格更高
  • D.完全避免梯度消失问题

答案:AB。点积注意力可一次性算完 QKᵀ,利用高度优化的矩阵乘法库并节省中间激活,因此 A、B 正确。论文结论是“效果相近”而非严格更优,C 错;缩放缓解但未完全消除梯度问题,D 错。

Q8. 关于注意力中的 Value 向量,说法正确的有?

多选题 · mid

  • A.参与最后的加权求和← 正确答案
  • B.它承载词的真实内涵← 正确答案
  • C.来自输入乘投影矩阵← 正确答案
  • D.在打分阶段被用于匹配

答案:ABC。Value 是词的“真实能力”,由输入 X 乘 W_V 得到,最后与权重加权求和,故 A、B、C 正确。打分阶段使用的是 Key,Key 才负责与 Query 匹配,D 错误。

Q9. 下列对缩放因子 √dk 描述正确的有?

多选题 · easy

  • A.让点积分数的方差约等于常数一← 正确答案
  • B.防止 softmax 输出过早趋向独热← 正确答案
  • C.缩放会反转候选人的分数排名
  • D.缩放让分数全部变成非负值

答案:AB。除以 √dk 使方差从 dk 回到 1,进而防止 softmax 因分数过散而过早饱和,A、B 正确。除以正数是单调变换,不反转排名,C 错;缩放不改变符号,D 错。

Q10. 若不使用缩放且 dk 很大,注意力权重趋近“独热”,训练时最可能出现什么问题?

单选题 · hard

  • A.梯度消失,参数更新困难← 正确答案
  • B.梯度爆炸,损失变为无穷
  • C.注意力权重总和超过一
  • D.输出向量维度发生变化

答案:A。softmax 在饱和区(接近 0 或 1)的梯度几乎为 0,反向传播到 Q、K、V 的梯度被截断,参数难以更新,属于梯度消失而非爆炸。softmax 行和恒为 1,输出维度由矩阵形状决定,C、D 错误。