假设你去图书馆找资料。你带着一个模糊问题:“深度学习究竟是怎么工作的?”管理员递给你一张检索单,让你把问题写下来;她拿着检索单去比对每本书的索书号;最终从最相关的书里复印出几页内容,拼成一份浓缩笔记。整个过程——你出题、标签匹配、按需取内容——这就是 QKV 注意力最生动的工作画面。 在神经网络里,“找资料”发生在每个 token 之间:每个词都要拿着自己的“问题”去问其他所有词“你们有我要的信息吗?”,然后按相关程度加权整合它们的内容。这个机制让 Transformer 能同时看见一整句话、甚至一整本书的上下文,也成为大语言模型(LLM)的基石。本文不堆砌难懂的推导,而是用这座图书馆贯穿始终,带你从矩阵运算的角度,一步步拆解 Q、K、V 三个矩阵到底是什么、注意力公式每一步在做什么、为什么缩放因子必不可少,以及自注意力与交叉注意力之间微妙而重要的差别。

岗位关联

掌握 QKV 注意力,是理解 Transformer 一切变体的钥匙——它是面试高频考点、多模态模型的公共底座,也是动手实现大模型注意力层时绕不开的“基本功”。

目录
  1. 可视化演示
  2. 1. QKV概念:三位管理员的角色分工
  3. 2. 注意力公式:一次完整查书的数学速写
  4. 3. 线性变换:给数据换三副眼镜
  5. 4. 缩放点积:一把必要的尺子
  6. 5. 批量矩阵运算:百名读者同时服务
  7. 6. 自注意力:自己与自己的笔记开会
  8. 7. 交叉注意力:带着问题去借书
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示QKV注意力的矩阵运算流程,以及自注意力与交叉注意力的QKV来源差异。

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

QKV注意力计算流程 Q/K/V:输入经Wq/Wk/Wv线性变换得到三个矩阵 QK^T/√dk:计算缩放点积注意力得分 softmax→×V:归一化权重加权求和得到输出 Attn(Q,K,V) = softmax(QK^T/√dk)V 缩放因子防止softmax饱和

1. QKV概念:三位管理员的角色分工

走进一座藏书百万的图书馆,你带着一个模糊需求:“我想了解深度学习到底怎么工作。”管理员不会直接背出答案,而是拿一张检索单记下你的问题,扫过每本书的标签,把最相关的几本书找出来,最后抽出内容复印给你。一张检索单、一堆标签、一沓复印页——这就是注意力机制最朴素的分工。

在神经网络里,每个词(token)读到的是一个向量。注意力机制让每个向量承担三种角色:Query 代表“我在找什么”,Key 代表“我是什么”,Value 代表“我能给出什么”。它们合起来就是 QKV。Q 是问题,K 是索引标签,V 是真正被提取的内容——三者缺一不可。

实际计算中,Q、K、V 不会靠手工设计,而是把输入矩阵 X 分别乘上三个可学习的权重矩阵 W_Q、W_K、W_V 生成。X 的每一行是一个 token 的嵌入向量;Q 和 K 通常形状相同,V 的维度可以不同。具体数学式我们留到第 3 节拆解,这里先记住三个矩阵的分工:Query 负责“问”,Key 负责“被匹配”,Value 负责“被取走”。

图书馆的三位管理员始终在一起工作:一个把你的需求翻译成检索语言,一个翻遍标签,一个复印内容。QKV 就是他们手中的三件工具——分开看各有用途,合起来才构成完整的注意力。

2. 注意力公式:一次完整查书的数学速写

管理员查书有三个步骤:把检索单和每本书的标签比对出匹配分;把分数校准到合理范围;把分数换算成“该花多少时间读这本书”的比例。最后按这个比例,把好几本书的内容拼成一份浓缩笔记。注意力机制的完整公式,就是这三步的数学化:

从检索单到标签比对,再到按比例复印拼成笔记——注意力公式的四个步骤,正是图书馆管理员一次完整服务流程的数学速写。满屏符号拆开看,不过是一套“先打分、再归一化、最后提取”的流程。

Attention(Q,K,V)=softmax(QK⊤dk)V\displaystyle Attention(\mathbf{Q},\mathbf{K},\mathbf{V}) = softmax\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}}\right)\mathbf{V}
通俗说明:左边是“注意力三件套”的输入输出,右边按顺序做了四件事——算匹配分、缩放、归一化、加权聚合。
  1. 匹配分数矩阵 QK^TQuery 与 Key 的转置矩阵相乘,结果 S 的 (i,j) 元素表示“第 i 个 token 想找的内容”与“第 j 个 token 能提供的内容”有多匹配。
    S=QK⊤\mathbf{S} = \mathbf{Q}\mathbf{K}^\top
  2. 缩放 S/√d_k除以投影维度的平方根,把分数从可能很大的范围压回温和区间,避免 softmax 过度自信。
    S′=Sdk\mathbf{S}' = \frac{\mathbf{S}}{\sqrt{d_k}}
  3. 按行 softmax 归一化每一行经过指数归一化后变成概率分布,行和为 1,这就是“花多少注意力”的权重。
    A=softmax(S′)\mathbf{A} = softmax(\mathbf{S}')
  4. 加权求和 AV用权重矩阵 A 对 Value 矩阵 V 的每一行做加权平均,得到最终输出。
    O=AV\mathbf{O} = \mathbf{A}\mathbf{V}

3. 线性变换:给数据换三副眼镜

同一本书,在检索系统里是“分类号+关键词”,在采购系统里是“价格+出版社”,在内容系统里是“正文+注释”。数据也一样:同一份 X,为了扮演好三种角色,必须戴上三副不同度数的眼镜重新看一遍,得到三个不同侧面的矩阵。这三副“眼镜”,就是三个可学习的权重矩阵 W_Q、W_K、W_V。

训练过程就是不断调整这三副眼镜的度数,直到 Q 能问出好问题、K 能把标签贴得准、V 能保留最该被记住的内容。这也是多头注意力里“每个头一副眼镜”的由来——不同的 W 组合,看到的数据侧面就不同。

Q=XWQ,K=XWK,V=XWV\displaystyle \mathbf{Q} = \mathbf{X}\mathbf{W}_Q,\quad \mathbf{K} = \mathbf{X}\mathbf{W}_K,\quad \mathbf{V} = \mathbf{X}\mathbf{W}_V
通俗说明:X 是原始输入,W_Q、W_K、W_V 是三个随机初始化、随训练不断调整的线性变换矩阵。乘法的结果,就是把输入投影到不同语义空间的 Q、K、V。
  1. 输入矩阵 X形状为 [n, d_model],每个 token 一行,所有后续计算都从这里出发。
    X∈Rn×dmodel\mathbf{X} \in \mathbb{R}^{n \times d_{model}}
  2. 权重矩阵 W_Q形状为 [d_model, d_k],是训练中被梯度下降不断更新的参数。
    WQ∈Rdmodel×dk\mathbf{W}_Q \in \mathbb{R}^{d_{model} \times d_k}
  3. 矩阵乘法X 的每一行与 W_Q 的每一列做点积,产出查询矩阵 Q,每一行是该 token“想找什么”的表示。
    Q=XWQ∈Rn×dk\mathbf{Q} = \mathbf{X}\mathbf{W}_Q \in \mathbb{R}^{n \times d_k}
  4. K、V 同理K 用 W_K 生成,V 用 W_V 生成,V 的投影维度记为 d_v。
    K=XWK,V=XWV\mathbf{K} = \mathbf{X}\mathbf{W}_K,\quad \mathbf{V} = \mathbf{X}\mathbf{W}_V

4. 缩放点积:一把必要的尺子

如果管理员给标签打分的规则过于“手松”或“手紧”,就会出现极端情况:所有书都拿满分,或者全部零分,根本分不出高下。她需要的是一把合适的尺子,把分数的绝对高低校准到最有区分度的范围。点积注意力里的 √d_k,就是这把尺子。

假设 q、k 的元素是独立同分布、均值为 0 方差为 1 的随机变量。点积是求和形式,方差会随着维度 d_k 线性增长:

缩放因子的倒数本质上是 softmax 的“温度参数”:温度高(缩放大)则权重分布平滑,温度低(缩放小)则分布尖锐。有了这把尺子,管理员打分才既不过于宽松也不过于苛刻——缩放看似是工程小技巧,实则是保证模型训练稳定的关键一环。

σ2(q⋅k)=∑i=1dkσ2(qiki)≈dk\displaystyle \sigma^2(\mathbf{q}\cdot\mathbf{k}) = \sum_{i=1}^{d_k} \sigma^2(q_i k_i) \approx d_k
通俗说明:维度越大,点积分数的散布越宽;除以 √d_k 后方差回到 1 附近,等于把 softmax 的输入控制在一个温和范围内,避免梯度消失或爆炸。
  1. 点积展开为求和点积是逐元素相乘再求和,共 d_k 项。
    q⋅k=∑i=1dkqiki\mathbf{q}\cdot\mathbf{k} = \sum_{i=1}^{d_k} q_i k_i
  2. 方差叠加每个乘积项方差约为 1,独立求和后方差近似为 d_k。
    σ2(q⋅k)≈dk\sigma^2(\mathbf{q}\cdot\mathbf{k}) \approx d_k
  3. 除以 √d_k方差从 d_k 压回 1,softmax 输入不再极端,梯度传导更健康。
    σ2(q⋅kdk)≈1\sigma^2\left(\frac{\mathbf{q}\cdot\mathbf{k}}{\sqrt{d_k}}\right) \approx 1

5. 批量矩阵运算:百名读者同时服务

图书馆一次来了 100 位读者,每人一张检索单。管理员不会一一排队处理,而是把 100 张检索单摞成厚厚一沓,用同一套流程同时扫过所有标签、同时打分、同时复印。人数再多,节奏不变。神经网络里的“批量”和“多头”就是这套并行逻辑。

实际训练时,输入 X 的形状是 [B, L, D](B=批量大小,L=序列长度,D=嵌入维度)。加上多头后,Q、K、V 扩展为 [B, H, L, D_head],每头有独立的投影权重。QK^T 在每头内部做批量矩阵乘法:

批量运算让管理员分身有术:batch 分身、head 分身,一次服务上百读者。GPU 的并行能力让这场图书馆大服务只需几十毫秒。这也是注意力机制比循环神经网络更容易在大规模数据上加速的原因——矩阵乘法天然可并行。

QK⊤:[B,H,L,D]×[B,H,D,L]→[B,H,L,L]\displaystyle \mathbf{Q}\mathbf{K}^\top:\quad [B,H,L,D] \times [B,H,D,L] \rightarrow [B,H,L,L]
通俗说明:这个式子描述的是“每个 batch 里的每个头,各自独立算一个 L×L 的分数矩阵”。GPU 正是为这种同形状、高并发的运算而生的。
  1. B 批量维度同时处理多个句子,互不干扰。
    B=batch sizeB=\text{batch size}
  2. H 头数维度多头注意力并行地在不同特征子空间做匹配。
    H=num headsH=\text{num heads}
  3. L 序列长度句子中的 token 个数。
    L=sequence lengthL=\text{sequence length}
  4. D 头部维度每头内 Q、K 的投影维度,通常 D = d_model / H;多头输出拼接后再过一层线性变换完成合并。
    D=dmodelHD=\frac{d_{model}}{H}

6. 自注意力:自己与自己的笔记开会

有时你不需要去图书馆借书,只需把过去写的笔记摊在桌上,让每一页都看看其他页写了什么,找出相互呼应的观点,再重新整合关键内容。这就是“自己和自己开会”。自注意力中,Q、K、V 全部来自同一个输入 X,它让每个 token 都能直接看到序列中所有其他 token。

把第 2 节的 Attention 公式中 Q、K、V 替换成 X 的线性变换,就得到自注意力:

自注意力天然支持“双向建模”:一个词可以看到前后所有词,不像 RNN 只能按顺序单向传递信息。读笔记时你在页与页之间画连线和批注,自注意力也是在 token 之间画“注意力连线”——这让相隔再远的信息也能直接产生联系,是 Transformer 解决长距离依赖的关键。

SelfAttention(X)=softmax(XWQ(XWK)⊤dk)XWV\displaystyle SelfAttention(\mathbf{X}) = softmax\left(\frac{\mathbf{X}\mathbf{W}_Q(\mathbf{X}\mathbf{W}_K)^\top}{\sqrt{d_k}}\right)\mathbf{X}\mathbf{W}_V
通俗说明:序列中每个 token 都会问“我和谁有关”,然后从相关的 token 里提取信息。无论两个词在句子中隔多远,只要注意力分数高,信息就能一步直达。
  1. 同源生成Q、K、V 都从同一个 X 分别线性变换而来。
    Q=XWQ, K=XWK, V=XWV\mathbf{Q}=\mathbf{X}\mathbf{W}_Q,\ \mathbf{K}=\mathbf{X}\mathbf{W}_K,\ \mathbf{V}=\mathbf{X}\mathbf{W}_V
  2. 全局两两打分QK^T 让每个位置与所有位置计算匹配分。
    S=XWQ(XWK)⊤\mathbf{S} = \mathbf{X}\mathbf{W}_Q(\mathbf{X}\mathbf{W}_K)^\top
  3. 归一化权重经过缩放和 softmax 变成注意力权重。
    A=softmax(S/dk)\mathbf{A} = softmax(\mathbf{S}/\sqrt{d_k})
  4. 加权聚合A 与 V 相乘,输出携带全局上下文信息的向量。
    O=AV\mathbf{O} = \mathbf{A}\mathbf{V}

7. 交叉注意力:带着问题去借书

机器翻译时,你心里酝酿着中文的措辞(Q),却不断回到英文原版书上查证原意(K、V)。这就是两种不同来源的信息互相配合——一边是“我的组织”,一边是“你的资料”。交叉注意力中,Q 来自解码器,K、V 来自编码器。

公式与自注意力完全相同,只是输入来源不同。用 X_dec 表示解码器输入、X_enc 表示编码器输出:

自注意力是“自己读自己”,交叉注意力是“带着自己的问题去读别人的书”。两种注意力共用同一个公式,差别只在 Q、K、V 的出处——这正是注意力机制优雅的地方:一套流程,两种用法,信息融合清晰而高效。

CrossAttention(Xdec,Xenc)=softmax(XdecWQ(XencWK)⊤dk)XencWV\displaystyle CrossAttention(\mathbf{X}_{dec},\mathbf{X}_{enc}) = softmax\left(\frac{\mathbf{X}_{dec}\mathbf{W}_Q(\mathbf{X}_{enc}\mathbf{W}_K)^\top}{\sqrt{d_k}}\right)\mathbf{X}_{enc}\mathbf{W}_V
通俗说明:解码器的每个 token 都拿着自己的 Q,去编码器的 K、V 里“检索”最相关的信息,从而在生成时参考源语言上下文。
  1. Q 来自解码器当前已生成的内容负责“提问”。
    Q=XdecWQ\mathbf{Q}=\mathbf{X}_{dec}\mathbf{W}_Q
  2. K、V 来自编码器源语言序列负责提供索引和内容。
    K=XencWK, V=XencWV\mathbf{K}=\mathbf{X}_{enc}\mathbf{W}_K,\ \mathbf{V}=\mathbf{X}_{enc}\mathbf{W}_V
  3. 分数矩阵形状结果是 [L_dec, L_enc],解码器每个位置对齐编码器所有位置。
    S∈RLdec×Lenc\mathbf{S}\in\mathbb{R}^{L_{dec}\times L_{enc}}
  4. 聚合源语言信息softmax 权重与 V 相乘,得到携带相关源信息的输出。
    O=softmax(S/dk) V\mathbf{O} = softmax(\mathbf{S}/\sqrt{d_k})\,\mathbf{V}

AI 应用场景

1. 检索增强生成(RAG)

阶段:检索与生成

解决的问题:传统关键词检索只能做字面匹配,用户问“深度学习适合处理什么数据”,含“神经网络”的文档可能被漏掉。把用户问题编码为 Query、候选文档编码为 Key/Value,注意力分数就能衡量语义相关性,实现“语义检索”。

具体案例:企业知识库问答系统中,用户提问经编码器变成 Q 向量,知识库中的每个文档块预编码为 K、V 向量。注意力机制对千上万文档块打分,选出最相关的几段,再交给大语言模型组织成回答。

2. 机器翻译

阶段:序列到序列学习

解决的问题:传统 RNN 翻译长句时容易遗忘开头信息。自注意力对源语言进行全局建模,交叉注意力让解码器在生成每个词时都能“回头翻阅”编码器的任意位置,解决长距离对齐问题。

具体案例:英译中系统中,英文句子经过编码器得到上下文向量;解码器每生成一个中文字符,其 Q 都会与英文句子的 K、V 做交叉注意力计算,决定当前词应该重点关注英文句子的哪个部分。

3. 长文档摘要

阶段:文本理解与生成

解决的问题:一篇 5000 字新闻稿的关键信息分散在各处,人工摘要耗时且易遗漏。自注意力让每个词都能直接感知全文,加权聚合后突出最重要的信息,再引导生成式模型产出凝练摘要。

具体案例:金融研报自动摘要系统中,模型先对研报做自注意力编码,每个句子间建立注意力连接;再结合指向原文的引导向量,生成 200 字以内的简报供分析师快速审阅。

Python 演示

python35 行
import numpy as np def scaled_dot_product_attention(Q, K, V):    d_k = Q.shape[-1]    scores = np.matmul(Q, K.transpose(0, 2, 1)) / np.sqrt(d_k)    weights = np.exp(scores - scores.max(axis=-1, keepdims=True))    weights = weights / weights.sum(axis=-1, keepdims=True)    output = np.matmul(weights, V)    return output, weights def linear_projection(X, W, b=None):    out = np.matmul(X, W)    if b is not None:        out = out + b    return out np.random.seed(42)n_tokens = 4d_model = 8d_k = d_v = 8X = np.random.randn(n_tokens, d_model)W_Q = np.random.randn(d_model, d_k)W_K = np.random.randn(d_model, d_k)W_V = np.random.randn(d_model, d_v) Q = linear_projection(X, W_Q)K = linear_projection(X, W_K)V = linear_projection(X, W_V)output, attn_weights = scaled_dot_product_attention(Q, K, V) print("输入X形状:", X.shape)print("Q形状:", Q.shape, " K形状:", K.shape, " V形状:", V.shape)print("注意力权重形状:", attn_weights.shape)print("第一行注意力权重:", np.round(attn_weights[0], 3))print("输出形状:", output.shape)
目的:用 NumPy 实现缩放点积注意力,演示从输入 X 生成 Q、K、V,再到计算注意力权重和输出的完整矩阵运算流程。
  1. Q = linear_projection(X, W_Q)输入 X 与权重矩阵相乘,生成查询矩阵
  2. scores = np.matmul(Q, K.transpose(0, 2, 1)) / np.sqrt(d_k)批量矩阵乘得到匹配分数并缩放
  3. weights = np.exp(scores - scores.max(axis=-1, keepdims=True))减最大值再取指数,数值稳定版 softmax
  4. weights = weights / weights.sum(axis=-1, keepdims=True)归一化,每行和为 1
  5. output = np.matmul(weights, V)注意力权重与 V 相乘,完成加权聚合

常见误区

误区初学者常认为 Q、K、V 就是把输入复制三份,只是名字不同,所以注意力本质上就是输入自己和自己做比较。

正解实际上 Q、K、V 由输入 X 分别乘以三个完全不同的可学习权重矩阵得到,相当于在同一份数据上做三种不同性质的“投影加工”。用图书馆比喻:同一座藏书,检索单、标签索引、内容复印页都是不同系统生成的,绝不是同一张纸复制三次。

为何常见:因为公式里 Q、K、V 都写作 X 乘某个矩阵,乍看像是同一个东西换了名字。

误区有些人觉得除以 √d_k 只是一个防止溢出的调参小技巧,删掉也能跑。

正解缩放有严谨数学依据。当向量维度 d_k 增大时,点积分数的方差近似等于 d_k,数值范围变大,softmax 会进入饱和区,梯度趋近于 0。除以 √d_k 相当于把方差压回 1 附近,让 softmax 保持敏感——这直接影响模型能不能训得动。

为何常见:它只是一个除法,看起来像工程常数,不像网络结构那样显眼,容易被当成“经验补丁”。

误区把注意力权重矩阵画成热力图,就能断言“模型在看什么”,把它当作模型的解释证据。

正解注意力权重只反映 QK^T 加 softmax 的结果,它受嵌入表示、训练任务、层数位置影响。同一句话在不同训练阶段权重会变,很多情况下权重分布并不对应人类直觉的“关注对象”。研究者近年也提醒,直接用注意力图做可解释性结论需要非常谨慎。

为何常见:“注意力”这个命名本身就暗示了人类式的关注,容易让人把数学权重误认为认知解释。

误区认为交叉注意力和自注意力是两种完全不同的公式,一个在编码器用,一个在解码器用。

正解二者使用完全相同的缩放点积公式 Attention(Q,K,V)=softmax(QK^T/√d_k)V,区别只在输入来源。自注意力中 Q、K、V 都来自同一输入;交叉注意力中 Q 来自解码器、K 和 V 来自编码器。就像“读自己的笔记”和“带问题去借书”是同一个查书流程的两种用法。

为何常见:名字不同、在 Transformer 中的位置不同,容易让人误以为公式也有本质区别。

面试题

Q1. Q、K、V 三个矩阵是如何得到的?

单选题 · easy

  • A.输入序列直接切成三段
  • B.输入 X 与三个权重矩阵分别相乘← 正确答案
  • C.从网络输出随机采样
  • D.由 softmax 归一化获得

答案:B。Q、K、V 由输入 X 分别乘上可学习的 W_Q、W_K、W_V 得到,这是线性变换而非简单切片或采样。A 错在“直接切”,C、D 更是张冠李戴。

Q2. 注意力分数经过 softmax 后,结果具有什么性质?

单选题 · easy

  • A.每行元素之和为 1← 正确答案
  • B.每列元素之和为 1
  • C.所有元素之和为 1
  • D.元素全部变成 0

答案:A。softmax 是针对每一行独立做的归一化,因此每行和为 1,表示一个 token 对所有其他 token 的注意力权重分配。B、C 混淆了归一化方向,D 显然错误。

Q3. 在缩放点积注意力中,点积结果要除以哪个数?

单选题 · mid

  • A.嵌入维度 d_model
  • B.投影维度的平方根 √d_k← 正确答案
  • C.投影维度 d_k
  • D.值向量维度的平方根 √d_v

答案:B。标准公式中除以 √d_k。d_k 是 Q、K 投影后的维度,而不是整个 d_model。缩放是为了把点积方差压回 1 附近,保证 softmax 梯度健康。

Q4. 为什么要除以 √d_k?

单选题 · mid

  • A.减少矩阵乘法的计算量
  • B.防止点积方差过大导致 softmax 饱和← 正确答案
  • C.让 Q 和 K 的维度保持一致
  • D.增加模型的非线性表达能力

答案:B。点积是 d_k 项求和,方差近似等于 d_k,维度越大分数越分散,softmax 会进入饱和区、梯度消失。除以 √d_k 把方差压回 1 左右。它与计算量、维度对齐、非线性无关。

Q5. 下列关于自注意力的说法,正确的是?

单选题 · mid

  • A.Q 来自编码器,K、V 来自解码器
  • B.Q、K、V 都由同一个输入 X 线性变换而来← 正确答案
  • C.注意力分数矩阵一定是对称矩阵
  • D.Q 只与相邻 token 的 K 计算相似度

答案:B。自注意力最核心的特征是同源——Q、K、V 全部来自同一个输入。A 描述的是交叉注意力。C 错,softmax 按行归一化后矩阵不再对称。D 错,Q 要与所有位置的 K 计算相似度。

Q6. 在编码器-解码器的交叉注意力中,K 和 V 通常来自哪里?

单选题 · mid

  • A.解码器的自注意力输出
  • B.编码器的输出← 正确答案
  • C.输入词嵌入层
  • D.随机初始化的位置编码

答案:B。交叉注意力中 Q 来自解码器,K、V 来自编码器,这样解码器在生成每个 token 时都能参考源语言序列的全部信息。A 是解码器内部自注意力的输出,C、D 与 K、V 来源无关。

Q7. 关于注意力权重的计算,说法正确的有?

多选题 · mid

  • A.先计算 Q 和 K 的点积分数← 正确答案
  • B.除以 √d_k 后进行 softmax← 正确答案
  • C.softmax 后每一行和为 1← 正确答案
  • D.权重矩阵直接与 Q 相乘得到输出

答案:ABC。注意力流程是 QK^T → 缩放 → softmax → 加权 V。A、B、C 都在描述这条链路。D 错,权重矩阵是与 V 相乘而非 Q。

Q8. 关于自注意力和交叉注意力的区别,说法正确的有?

多选题 · hard

  • A.自注意力 Q、K、V 来自同一输入← 正确答案
  • B.交叉注意力 K、V 来自编码器,Q 来自解码器← 正确答案
  • C.交叉注意力与自注意力使用不同的计算公式
  • D.自注意力中任意两个位置都能直接交互← 正确答案

答案:ABD。两种注意力共用同一个缩放点积公式,差别只在输入源,C 错。A、B 是二者最本质的区别。D 正确,自注意力通过全局两两打分实现直接交互,这也是它建模长距离依赖的基础。

Q9. 若序列长度为 n、嵌入维度为 d,单层单头自注意力的计算复杂度约为?

单选题 · hard

  • A.O(d²n)
  • B.O(n²d)← 正确答案
  • C.O(n³)
  • D.O(nd)

答案:B。QK^T 是 n×d 与 d×n 相乘,复杂度 O(n²d);softmax 后与 V 相乘也是 O(n²d),因此整体 O(n²d)。这是注意力复杂度随序列长度平方增长的由来,也是研究者追求线性注意力的原因。

Q10. 若 Q 张量形状为 (B,H,L,D),K 张量形状为 (B,H,L,D),则 QK^T 的结果形状是?

单选题 · extreme

  • A.(B,H,L,L)← 正确答案
  • B.(B,L,H,L)
  • C.(B,H,D,D)
  • D.(B,L,L,H)

答案:A。批量矩阵乘法中,B、H 保持不变,Q 的 L×D 与 K 转置的 D×L 相乘得到 L×L,因此结果是 (B,H,L,L)。这个形状正是“每个 batch 的每个头有一张注意力分数矩阵”的数学表达。