想象你走进一座巨大的图书馆。你心里带着一个明确的查书需求——“我想找一本讲深度学习的入门书”。这个需求就是 Query。书架上的每一本书,书脊上都贴着标签(分类号、主题词),这些标签就是 Key。而书里真正的内容,就是 Value。注意力的整个过程,就是你扫视书架、比对标签、最终综合几本书的内容形成回答的过程。 这套“需求查书”的流程,正是现代大语言模型(Transformer)的核心运算——注意力计算。它只用三步就能讲完:第一步,拿你的需求(Query)与每本书的标签(Key)做匹配打分;第二步,把分数归一化成“优先借阅权重”;第三步,按权重把几本书的内容(Value)加权混合成一份综合摘要。大模型在读到每个词时,都会用这套机制“回顾”上下文中的相关词语,从而生成通顺的下一句。 本文用“图书馆找书”这个比喻,带你彻底拆解 Query、Key、Value 的交互逻辑,并配套 Python 代码演示一个完整的注意力头是怎么算出来的。

岗位关联

掌握注意力计算,是理解 Transformer、BERT、GPT 等主流模型的“钥匙”。对 NLP 工程师和算法学习者而言,这是从“调包”走向“懂原理”的必修基础课。

目录
  1. 可视化演示
  2. 认识三元组:读者、标签与书
  3. 打分函数:标签与需求有多匹配
  4. Softmax归一化:把分数变成优先级
  5. 加权聚合:按权重翻阅内容
  6. 完整流程:从矩阵视角看全局
  7. 多头注意力:多支探索队并行查书
  8. 模型应用:从图书馆到真实模型
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Query-Key-Value注意力计算三步骤:打分函数计算相似度、softmax归一化得权重、Value加权聚合输出,切换模式理解Transformer核心运算。

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

打分函数与Query-Key相似度计算 Query与每个Key通过点积计算相似度得分,缩放点积除以sqrt(d_k)防止内积过大导致softmax饱和 加性打分用MLP计算Q-K匹配度,适用于维度不同的跨模态注意力 score(Q,K_i) = Q · K_i / sqrt(d_k) 打分函数衡量Query与Key的匹配程度,是注意力权重的基础

认识三元组:读者、标签与书

图书馆里的“查书”看似简单,背后却藏着三个完全不同的角色。你是那个提出问题的读者,手里拿着一张写满需求的纸条——这就是 Query。它不是模糊的想法,而是一个具体的向量,在模型里就是一串数字,刻画了“我在找什么”。书脊上的分类标签是 Key,书里的正文是 Value。没有这三个角色,任何查书流程都无法运转。

当模型处理一个句子时,每个词都会同时扮演读者、标签和书三种角色。比如“猫坐在垫子上”这句话,“猫”作为 Query 时,会对“垫子”发起查询——因为“坐”这个动作需要知道“在哪里”。这里的 Key 是每个词的“身份标识”,Value 是每个词携带的“内容信息”。三者各司其职,缺一不可。

在实际模型中,这三个角色并非天然存在,而是通过线性变换从原始词向量中投影出来的。对于长度为 n 的输入序列,把每个词的向量拼成矩阵 \(X\),然后乘上三个可学习的权重矩阵:

回到图书馆:读者手里的需求纸条不是凭空产生的,而是从“你已有的知识”中提炼出来的;书脊上的标签是图书管理员统一贴好的;书的内容是作者写就的。三者的“翻译方式”(三个 W 矩阵)随着训练不断被优化,最终学会如何从同一个输入中抽出最合适的需求、标签和内容。

Q=XWQ,K=XWK,V=XWV\displaystyle Q = XW_Q, \quad K = XW_K, \quad V = XW_V
通俗理解:\(W_Q\) 是“需求翻译器”,\(W_K\) 是“标签生成器”,\(W_V\) 是“内容编码器”。同一批词向量经过三个不同视角,变成三种用途的向量。
  1. 输入矩阵把一句话中每个词的向量按行堆叠成矩阵 X,n 是词数,d 是每个词的维度。
    X=[x1x2⋮xn]X = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}
  2. Query 投影用权重矩阵 \(W_Q\) 把所有词变换成“查询向量”,回答“我在找什么”。
    Q=XWQQ = X W_Q
  3. Key 投影用权重矩阵 \(W_K\) 把所有词变换成“标签向量”,回答“我是什么”。
    K=XWKK = X W_K
  4. Value 投影用权重矩阵 \(W_V\) 把所有词变换成“内容向量”,承载真正要被提取的信息。
    V=XWVV = X W_V

打分函数:标签与需求有多匹配

你拿着需求纸条走到书架前,眼睛快速扫过一排书脊。你不需要打开每一本书,只凭标签就能判断“这本讲深度学习的,很相关”“这本讲历史的,不相关”。这个“只看标签就能估算匹配度”的动作,在数学上叫打分函数(scoring function)。

打分函数的作用是计算一个 Query 向量与每个 Key 向量的相似度。最常用的打分方式是点积(dot product):把两个向量的对应位置相乘再求和。两个向量方向越一致,点积越大,说明越匹配。就像需求里“深度学习”这个词和标签“机器学习”方向一致,分数就高。

给定 Query 向量 \(q\) 和 Key 向量 \(k_i\),点积打分的定义如下。为了稳定训练,Transformer 使用缩放点积注意力,将点积结果除以 \(\sqrt{d_k}\):

你看书脊时,脑子里其实在飞速做“点积”:需求里“深度学习”这个分量和标签“机器学习”对应分量方向一致,分数就高。而 \(\sqrt{d_k}\) 这个缩放,就像提醒自己“别太激动”,避免对某个标签过度反应、把其他书全忽略掉。

si=q⋅kidk=∑j=1dkqjkijdk\displaystyle s_i = \frac{q \cdot k_i}{\sqrt{d_k}} = \frac{\sum_{j=1}^{d_k} q_j k_{ij}}{\sqrt{d_k}}
通俗理解:除以 \(\sqrt{d_k}\) 像是给打分装了个“血压计袖带”,把分数压在合理区间,防止分数过大导致后续 softmax 梯度消失。
  1. 点积展开把 \(q\) 的第 j 个分量与 \(k_i\) 的第 j 个分量相乘后求和,衡量两向量方向是否一致。
    si=∑j=1dkqjkijs_i = \sum_{j=1}^{d_k} q_j k_{ij}
  2. 缩放因子\(d_k\) 是 Key 向量的维度。维度高时点积数值随维度线性增长,除以 \(\sqrt{d_k}\) 让方差保持稳定。
    scale=1dk\text{scale} = \frac{1}{\sqrt{d_k}}
  3. 最终得分缩放后的分数 \(s_i\) 是一个标量,表示第 i 个 Key 与当前 Query 的匹配程度。
    si=q⋅kidks_i = \frac{q \cdot k_i}{\sqrt{d_k}}

Softmax归一化:把分数变成优先级

你扫完一排书架,心里冒出一串零散分数:“这本 9 分,这本 3 分,这本 -2 分”。但分数本身没有意义——你需要的是“先看哪本、后看哪本”的优先级。Softmax 就是那位把分数翻译成概率的“排序员”。

Softmax 把一组任意实数映射成一组介于 0 和 1 之间、总和为 1 的权重。它先对每个分数做指数运算,把负数变成正数、分数差距拉大,然后除以所有指数的和完成归一化:

其中 n 是序列长度。\(\alpha_i\) 就是第 i 个 Key 对应的注意力权重,表示“有多少注意力应该分配给位置 i 的 Value”。

Softmax 就像你在心里把“9 分、3 分、-2 分”换算成“60% 概率先看这本,30% 扫一眼那本,10% 顺手翻翻另一本”。哪怕那本 -2 分的历史书,也保留了 10% 的被关注可能——因为也许里面有你需要的一个冷门知识点。

αi=exp⁡(si)∑j=1nexp⁡(sj)\displaystyle \alpha_i = \frac{\exp(s_i)}{\sum_{j=1}^{n} \exp(s_j)}
通俗理解:Softmax 像“成绩排名转投票占比”,最优者获得最大权重,但每个人都保底分到一点关注,不会完全归零。
  1. 指数运算对原始分数 \(s_i\) 取自然指数 \(\exp(s_i)\),分数越高指数越大,高分的优势被放大。
    ei=exp⁡(si)e_i = \exp(s_i)
  2. 求和归一化把所有指数加起来作为分母 Z,保证所有权重总和为 1。
    Z=∑j=1nexp⁡(sj)Z = \sum_{j=1}^{n} \exp(s_j)
  3. 输出权重每个指数除以总和 Z,得到 0~1 之间的权重 \(\alpha_i\)。
    αi=eiZ\alpha_i = \frac{e_i}{Z}

加权聚合:按权重翻阅内容

现在你有了优先级:重点读那本 9 分的书,快速浏览 3 分的书,随手翻一翻 -2 分的书。最终你从这几本书里综合出答案。注意,你不是只听那本最高分的,而是“按权重混合”。这个混合动作就是注意力计算的最后一步:加权聚合。

加权聚合就是把每个 Value 向量乘上对应的注意力权重,然后全部加在一起,得到输出向量。这个输出向量融合了所有位置的信息,但权重大的 Value 在结果中占主导地位:

输出向量的维度与 \(v_i\) 相同,可以直接传给下一层网络。

你在笔记本上写下最终答案,这个答案不是任何一本书的原文,而是几本书的“加权摘要”:重点书贡献了大部分内容,次要书补充了边角信息。这正是注意力的妙处——让模型“带着重点、不遗漏地”聚合上下文,而不是死板地只看一个词。

output=∑i=1nαivi\displaystyle \text{output} = \sum_{i=1}^{n} \alpha_i v_i
通俗理解:如果权重是 0.7、0.2、0.1,输出就是“0.7 份书A + 0.2 份书B + 0.1 份书C”,像调鸡尾酒按比例混合。
  1. 权重乘值每个 Value \(v_i\) 与对应权重 \(\alpha_i\) 做标量乘法,权重越大,这个 Value 在结果中占比越高。
    αivi\alpha_i v_i
  2. 求和把 n 个加权后的向量逐元素相加,得到维度不变的输出向量。
    output=∑i=1nαivi\text{output} = \sum_{i=1}^{n} \alpha_i v_i

完整流程:从矩阵视角看全局

前面三步已经分别讲完了。现在退后一步,看整座图书馆是怎么运转的:你一次不是只查一本书,而是同时扫过整个书架。在矩阵运算中,模型会对 Query 矩阵中的每一行,同时与所有 Key 行计算匹配,一步到位得到所有位置的权重和输出。

将单向量运算推广到矩阵,就是 Transformer 原论文中的核心公式。它把“打分 → 归一化 → 聚合”合并成一个优雅的矩阵表达式:

其中 \(QK^\top\) 计算每对 (Query, Key) 的点积,softmax 沿最后一维归一化,最后乘 \(V\) 完成加权聚合。

整个图书馆的查书流程被压缩成一张矩阵乘法的“流水线”:\(QK^\top\) 生成需求匹配表,softmax 把表折算成权重,最后 \(AV\) 按权重加权汇总。模型每次读一个词,相当于在一张巨型“查书表”上完成了一趟完整的注意力之旅。

Attention(Q,K,V)=softmax(QK⊤dk)V\displaystyle \text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} \right) V
通俗理解:\(QK^\top\) 是“全部需求的匹配表”,softmax 把每行分数变成权重,乘以 \(V\) 就是按行取加权和。整个过程在 GPU 上可以一步并行完成。
  1. 相似度矩阵\(Q\) 与 \(K^\top\) 相乘得到分数矩阵,每个元素是第 i 个 Query 与第 j 个 Key 的匹配度。
    S=QK⊤S = QK^\top
  2. 逐行归一化对分数矩阵的每一行做 softmax,保证每个 Query 对所有 Key 的权重和为 1。
    A=softmax(S)A = \text{softmax}(S)
  3. 加权聚合权重矩阵 \(A\) 与 Value 矩阵 \(V\) 相乘,得到输出矩阵,每一行是对应 Query 的上下文向量。
    Output=AV\text{Output} = A V

多头注意力:多支探索队并行查书

一个人查书难免片面——只看书名,可能错过内容精彩但标题平平的书。于是你带了三个朋友分头行动:一个看主题,一个看作者国籍,一个看出版年份。最后你们聚在一起,把三份意见拼成一份综合报告。这就是多头注意力(Multi-Head Attention)。

单头注意力只用一套 Q/K/V 投影,模型只能从一种视角看序列。多头机制把维度切成 h 份,每份用独立的三套投影矩阵并行计算注意力,最后拼接各头输出并线性融合,让模型同时捕捉多种关系模式:

多头注意力让模型不再“一根筋”。多支探索队并行查书,每队有自己关注的“标签维度”,最后汇合时取长补短。这也是为什么 Transformer 能同时捕捉“小猫坐在垫子上”中“坐”与“垫子上”的位置关系,以及“小猫”与“猫”的指代关系——不同的头各司其职。

headi=Attention(QWiQ,KWiK,VWiV)\displaystyle \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
MultiHead(Q,K,V)=Concat(head1,…,headh)WO\displaystyle \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O
通俗理解:\(h=8\) 就像 8 个“注意力侦探”各查各的,一个关注语法搭配,一个关注指代关系,一个关注距离远近,最后侦探长(\(W^O\))把线索整合成统一结论。
  1. 每组独立投影每个头用不同的 \(W_i^Q, W_i^K, W_i^V\) 将输入投影到较低维子空间,确保各组视角互不干扰。
    Qi=QWiQ,Ki=KWiK,Vi=VWiVQ_i = QW_i^Q, \quad K_i = KW_i^K, \quad V_i = VW_i^V
  2. 各头注意力每个头在各自子空间上执行完整的三步注意力计算。
    headi=Attention(Qi,Ki,Vi)\text{head}_i = \text{Attention}(Q_i, K_i, V_i)
  3. 拼接并融合把所有头的输出拼接,再乘输出矩阵 \(W^O\) 得到最终结果。
    MultiHead=Concat(head1,…,headh)WO\text{MultiHead} = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O

模型应用:从图书馆到真实模型

图书馆的故事终于要搬进现实了。在大模型里,“图书馆”就是输入序列本身——每个词既是读者也是书。自注意力(Self-Attention)让每个词和句子中所有词互相查书,理解整个上下文。

Transformer 的编码器使用双向自注意力,每个词能看到左右两侧的所有词;解码器则用带掩码的自注意力,生成第 t 个词时只能看到前 t-1 个词,防止“偷看未来”。掩码通过在打分矩阵上加一个巨大的负数来实现:

其中 \(M\) 是掩码矩阵,被掩码的位置取一个极大的负数,softmax 后这些位置的注意力权重退化为 0。

自注意力让大模型拥有了“全局查书”的能力,掩码则让它在写作文时“向后翻页被禁止”。从 BERT 的双向理解到 GPT 的自回归生成,所有差异都浓缩在这一个掩码矩阵的使用上。至此,Query、Key、Value 的三步之旅,已经成为整个深度学习时代最坚固的地基。

Output=softmax(QK⊤dk+M)V\displaystyle \text{Output} = \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} + M \right) V
通俗理解:掩码像“书读到一半就把后半本用夹子夹住”,翻不到未来的内容,保证生成的每一句话都只依赖已写出的部分。
  1. 掩码矩阵\(M\) 是上三角矩阵,第 i 行第 j 列位置如果 j > i,则 \(M_{ij}\) 为负无穷,其余位置为 0。
    Mij={0j≤i−∞j>iM_{ij} = \begin{cases} 0 & j \le i \\ -\infty & j > i \end{cases}
  2. 加掩码打分在 softmax 之前,将掩码矩阵与相似度矩阵逐元素相加,屏蔽位置的分数变成无穷小。
    S′=S+MS' = S + M
  3. 归一化后忽略softmax 对无穷小位置的指数趋近于 0,对应权重为 0,即模型“看不到”未来的词。
    Output=softmax(S′)V\text{Output} = \text{softmax}(S') V

AI 应用场景

机器翻译中的注意力对齐

阶段:序列到序列(Seq2Seq)建模

解决的问题:传统 RNN 编码器把整句压成一个固定向量,长句开头信息容易丢失。注意力让解码器在生成每个词时,动态回看源句中最相关的部分。

具体案例:翻译“那只猫坐在垫子上”时,解码器生成“cat“时通过注意力权重回顾源句中”猫“的 Key;生成”on“时则重点关注”坐在“的 Key。权重矩阵就是一张”对齐表”,让翻译更准。

大模型上下文学习中的注意力复用

阶段:预训练 + 推理

解决的问题:模型怎么知道 Prompt 里给出的几个示例是“示范”而不是普通文本?注意力让当前问题自动匹配最相关的示例。

具体案例:GPT 在 Few-shot 推理时,当前问题作为 Query,示例中的输入作为 Key、输出作为 Value。通过三步注意力计算,模型自动放大与当前问题相似的示例权重,从而复用示例中的推理模式完成回答。

Python 演示

python48 行
import numpy as np  def softmax(x):    """数值稳定的softmax:先减最大值,防止指数溢出"""    x_max = np.max(x, axis=-1, keepdims=True)    e = np.exp(x - x_max)    return e / np.sum(e, axis=-1, keepdims=True)  def attention(q, k, v):    """三步注意力:打分 -> softmax归一化 -> 加权聚合"""    d_k = k.shape[-1]    scores = np.matmul(q, k.T) / np.sqrt(d_k)  # 第1步:缩放点积打分    weights = softmax(scores)                  # 第2步:归一化成权重    output = np.matmul(weights, v)             # 第3步:对Value加权求和    return output, weights  def multi_head_attention(q, k, v, h=2):    """多头注意力:将特征维切成h份,各算各的注意力,最后拼接"""    d = q.shape[-1]    d_h = d // h    heads = []    for i in range(h):        q_i = q[:, i * d_h:(i + 1) * d_h]        k_i = k[:, i * d_h:(i + 1) * d_h]        v_i = v[:, i * d_h:(i + 1) * d_h]        out, _ = attention(q_i, k_i, v_i)        heads.append(out)    return np.concatenate(heads, axis=-1)  if __name__ == "__main__":    # 模拟一个3个词的句子,每个词向量维度为4    X = np.array([        [0.8, 0.1, 0.2, 0.5],   # "猫"        [0.3, 0.9, 0.1, 0.4],   # "坐"        [0.2, 0.4, 0.7, 0.1],   # "垫子上"    ])     # 简化演示:用自身作为Q、K、V(真实场景会先做线性投影)    out, W = attention(X, X, X)     print("注意力权重矩阵(第i行表示第i个词对全句的注意力):")    print(np.round(W, 3))    print("\n输出向量(每行是该词融合全句后的上下文表示):")    print(np.round(out, 3))
目的:用 NumPy 从零实现一个完整的缩放点积注意力头,并演示多头注意力的切分与拼接,运行后打印注意力权重矩阵和上下文输出向量。
  1. x_max = np.max(x, axis=-1, keepdims=True)对每行取最大值,用于 softmax 数值稳定平移
  2. e = np.exp(x - x_max)减去最大值再做指数,防止 exp 溢出成无穷大
  3. scores = np.matmul(q, k.T) / np.sqrt(d_k)矩阵乘法一次性算出所有 Query 与 Key 的缩放点积分数
  4. weights = softmax(scores)把原始分数归一化成和为 1 的注意力权重
  5. output = np.matmul(weights, v)按权重对所有 Value 加权求和,得到上下文向量
  6. q_i = q[:, i * d_h:(i + 1) * d_h]按特征维度切片,分出第 i 个头的 Query
  7. np.concatenate(heads, axis=-1)把多个头的输出沿特征维拼接,完成多头融合

常见误区

误区刚学注意力时,看到 Q、K、V 三个字母,以为模型需要三个不同的输入句子,或者三个不同的嵌入表。

正解Q、K、V 都来自同一个输入序列,只是用三个不同的权重矩阵做了线性变换。就像同一批书,既贴了标签(K),又有内容(V),还能被读者的需求(Q)引用。训练时学的是三套投影矩阵,而不是三个输入。

为何常见:符号太多且功能迥异,初学者容易把“三个角色”误解为“三个输入”。

误区觉得注意力权重越集中越好,“只关注一个词”才是理想的注意力。

正解权重分布的多样性同样重要。均匀或分散的权重让模型能同时整合多个信息源;多头机制下不同分布模式更是模型表达力的来源。就像查书不能只读一本,综合多本才能答好题。

为何常见:“注意力”的字面意思让人联想到“聚焦少数关键点”,忽略了权重作为概率分布的整体意义。

误区以为是原论文的工程小技巧,去掉也照样训练。

正解点积结果随维度线性增长,维度高时 softmax 进入饱和区,梯度趋近于 0,模型难以训练。缩放是把分数拉回合理区间,是数学上必要的稳定器。

为何常见:在小维度实验中效果差异不明显,误以为缩放因子只是性能调优的开关。

误区把注意力可视化的高亮词理解为“这个词本身很重要”。

正解权重是 Query 与 Key 交互的结果。同一个词在不同 Query 下权重完全不同——“垫子”在回答“猫在哪”时重要,在回答“谁在坐”时就不重要。权重永远是一对词之间的关系,而非词的固有属性。

为何常见:热力图的可视化形式让人直觉上把权重等同于词的重要度排序。

面试题

Q1. 注意力计算中,Query 的语义作用是?

单选题 · easy

  • A.存储历史信息的记忆单元
  • B.表达“我在找什么”的查询需求← 正确答案
  • C.对输出结果做最终分类
  • D.控制梯度消失的激活函数

答案:B。Query 是“需求方”,对应图书馆中读者手里的查书需求。它不负责记忆存储、分类或梯度控制,那些是别的模块的职责。选项 B 准确刻画了 Query 的语义角色。

Q2. 缩放点积注意力中为什么除以 √d_k?

单选题 · easy

  • A.让梯度乘以更大的数值
  • B.防止高维点积数值过大← 正确答案
  • C.把所有分数强制变为负数
  • D.让Key向量做归一化

答案:B。维度 d_k 越高,点积结果方差越大,softmax 容易进入饱和区导致梯度消失。除以 √d_k 把分数方差拉回 1 附近,保证训练稳定。它不会强制变负,也不做归一化。

Q3. “猫坐在垫子上”中,“坐”作为 Query 时,它会与谁计算注意力分数?

单选题 · easy

  • A.只与“猫”一个词交互
  • B.与句中每个词的Key打分← 正确答案
  • C.只与自己的Key打分
  • D.与句子的整体表示打分

答案:B。注意力的设计就是让每个 Query 与序列中所有位置的 Key 打分,而不是只与某一个词交互。“坐”需要判断主语、地点,因此会同时关注“猫”和“垫子上”的 Key。

Q4. softmax 在注意力中把分数变成了什么?

单选题 · mid

  • A.更高维的Value表示
  • B.和为1的注意力权重← 正确答案
  • C.新的Key向量序列
  • D.Query的点积结果

答案:B。softmax 对分数做指数归一化,输出一组介于 0~1、总和为 1 的权重,用来衡量每个 Value 应该被关注多少。它不改变维度,也不产生新的 Key。

Q5. 加权聚合步骤的输出向量等于?

单选题 · mid

  • A.最大权重对应唯一的Value
  • B.所有Value按权重的加权和← 正确答案
  • C.Query与Value的直接拼接
  • D.所有Key向量的平均值

答案:B。加权聚合是 \(\sum \alpha_i v_i\),每个 Value 乘上对应权重后求和。虽然最大权重的 Value 贡献最大,但输出是所有 Value 按权重的加权和,而非某单个 Value。

Q6. 关于多头注意力,下列说法正确的是?

多选题 · mid

  • A.每个头有独立的Q/K/V投影矩阵← 正确答案
  • B.各头输出直接相加作为结果
  • C.多头能捕捉多种依赖关系← 正确答案
  • D.头数越多效果一定越好

答案:AC。每个头拥有独立的投影矩阵,所以能关注不同类型的依赖关系。各头输出是拼接后再线性融合,而不是直接相加;头数增多并非一直有效,过多会稀释每个头的维度,甚至过拟合。

Q7. 解码器掩码注意力中,掩码矩阵的作用是?

单选题 · mid

  • A.禁止关注未来位置的词← 正确答案
  • B.增强对所有词的关注
  • C.提升Value的表示维度
  • D.让分数矩阵变成对称阵

答案:A。掩码矩阵把未来位置设为负无穷,softmax 后这些位置权重为 0,从而禁止当前位置关注未来词。这是自回归生成“不看未来”的关键机制。

Q8. 关于数值稳定性处理,正确的是?

多选题 · hard

  • A.softmax前减最大值不改变概率← 正确答案
  • B.除以√d_k能稳定softmax输入← 正确答案
  • C.掩码处加大负数使权重趋零← 正确答案
  • D.对Value做归一化是标准步骤

答案:ABC。softmax 减去最大值是等价变换,不影响概率;除以 √d_k 防止高维点积方差过大;掩码位置加大负数使指数趋近 0。对 Value 做归一化并非注意力标准操作,Value 一般直接来自线性投影。

Q9. 同一个词在不同 Query 下注意力权重不同,说明?

单选题 · hard

  • A.词的固有重要性固定不变
  • B.权重反映Query与Key匹配度← 正确答案
  • C.权重只取决于Value本身
  • D.注意力无法区分一词多义

答案:B。权重由 Query 与 Key 共同决定,同一个词作为 Key 时,与不同 Query 的点积不同。因此权重是“关系量”而非“属性量”,这也让模型能根据上下文区分一词多义。

Q10. 关于自注意力(X 同时作为 Q/K/V 来源)的说法,正确的是?

多选题 · hard

  • A.每个词能同时看到句中的所有词← 正确答案
  • B.每个词的Key和Value来自同一输入← 正确答案
  • C.Q/K/V通常经过不同的线性投影← 正确答案
  • D.自注意力天然包含词序位置信息

答案:ABC。自注意力中每个词可与句中所有词交互,K 和 V 都源自同一输入 X,且通常用不同投影矩阵生成。自注意力本身对词序不敏感,必须额外加位置编码才能利用顺序信息,因此 D 错误。