想象一家创业公司的季度评审会。老式开法(RNN)是这样的:坐在第 1 位的同事只能把话传给第 2 位,第 2 位再传给第 3 位……如果公司有 100 人,传到第 100 位时,最初的构想可能已经面目全非。而 Self-Attention(自注意力)彻底改变了开会方式:它让每位同事都能直接看到所有人的工牌和报告,并凭借自己手头的需求清单,迅速锁定最该听谁说话、该听多少。这就是自注意力的本质——给序列中每个位置装上“全局视角”,让它与所有其他位置直接对话。 这套机制解决了 RNN 难以捕捉长距离依赖的痛点,并成为 Transformer、GPT、BERT 等大模型的基石。对 AI 从业者来说,理解自注意力是踏入现代深度学习世界的“第一张门票”。

岗位关联

自注意力是 Transformer 与全部大语言模型的核心引擎。掌握它,你就能理解 GPT、BERT 的底层逻辑,为后续学习预训练模型、多模态大模型打下最关键的根基。

目录
  1. 可视化演示
  2. 注意力机制:打破顺序的直连对话
  3. QKV三角色:需求、工牌与报告
  4. 点积与缩放:给匹配度打分
  5. Softmax归一化:发言权重的分配法则
  6. 多头注意力:专题小组并行讨论
  7. 位置编码:座次贴纸
  8. 实战应用:从会议到产业
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示QKV矩阵运算与注意力权重热力图、多头注意力并行计算与concat融合、Self-Attention与RNN路径长度对比,交互切换理解自注意力核心原理。

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

QKV矩阵运算与注意力热力图 Q=X·WQ, K=X·WK, V=X·WV同源线性变换 softmax(QK^T/√dk)·V缩放点积注意力 Attn(Q,K,V) = softmax(QK^T/√dk)V 缩放因子√dk防止高维点积饱和

注意力机制:打破顺序的直连对话

在旧式的“顺序传话会议”里,第 1 个同事要传递的信息必须依次经过第 2 个、第 3 个人……到了第 100 个人那里时,最初的表述可能已经严重失真。更糟糕的是,如果第 1 个人和第 90 个人之间存在重要共识,他们中间隔着长长的传话链,很难高效建联。这正是 RNN 在长序列任务中“忘事儿”的根本原因——信息每传递一步都会打一次折扣,链子越长,损耗越大。

Self-Attention 提供了一种全新的对话方式:在每一层计算中,序列里的每个位置(每个词)都直接与所有其他位置计算关联强度,而不是依赖相邻位置的逐步传递。以句子“苹果很好吃,我喜欢它”为例,“它”要关联“苹果”——两个词相距 4 个位置。RNN 需要沿序列绕 4 步才能把信息传过去,而 Self-Attention 一步直达。这种“任意两点直连”的拓扑结构,让长距离依赖不再是难题。

从数学上看,给定输入序列的向量表示 X = [x₁, x₂, ……, xₙ],Self-Attention 会为每个 xᵢ 计算一个输出 zᵢ,这个 zᵢ 是全部词向量的加权融合。权重的大小由“当前词与其他词的匹配程度”决定。词与词之间不再有远近亲疏的固定半径,而是根据语义相关性动态结网:相关就多听,不相关就少听。

回到会议上,这种机制就像是给每位同事发了一张“全员即时通讯录”——不必挨个传话,想找谁就直接联系谁,沟通效率因此大增。同时,所有人都是平等的对话节点,没有人会因为“座位太远”而错过关键信息,这正是注意力机制最优雅的地方。

QKV三角色:需求、工牌与报告

现在把镜头拉进那场全员评审会。每位同事面前摆着三样东西:一张“需求清单”(Query),上面写着他此刻最想了解什么;一块“工牌”(Key),标明他的专业领域;一份“报告”(Value),装着他实际掌握的业务数据。当产品经理(Query = “如何提升留存”)扫视全场的工牌,发现增长负责人(Key = “用户增长”)最匹配,于是他重点查阅增长负责人的报告(Value)——这就是一次完整的注意力动作。

在 Self-Attention 中,每个词同样拥有 Q、K、V 三个角色。它们不是另找三个不同的词,而是由同一个输入向量 X 分别乘以三组可学习的权重矩阵得到的。这种“一源三投影”的设计,让每个词在保留自身信息的同时,还能从不同视角参与匹配与融合。

通过三组不同的投影,同一个同事在会议中同时扮演“提问者”“被识别的对象”“信息提供者”三重身份。这种角色分离正是注意力机制能精准匹配信息的核心原因——没有分工,就无法在全局中找到“谁最该听谁的”。

Q=XWQ,K=XWK,V=XWV\displaystyle Q = XW_Q, \quad K = XW_K, \quad V = XW_V
一句话理解:Q、K、V 是同一个输入戴上三副不同的“眼镜”后看到的三个侧面。
  1. 输入矩阵 XX 的每一行是一个词的 Embedding 向量,形状为 (n, d_model),其中 n 是序列长度,d_model 是向量的维度。
    X∈Rn×dmodel\displaystyle X \in \mathbb{R}^{n \times d_{\text{model}}}
  2. 权重矩阵 W_Q一个可学习的投影矩阵,负责把 X 映射到“查询空间”,形状为 (d_model, d_k)。
    WQ∈Rdmodel×dk\displaystyle W_Q \in \mathbb{R}^{d_{\text{model}} \times d_k}
  3. 矩阵乘法得到 Q/K/VX 分别乘上 W_Q、W_K、W_V 后,每个词就同时获得了自己的“需求清单”“工牌”和“报告”。
    Q=XWQ,K=XWK,V=XWV\displaystyle Q = XW_Q, \quad K = XW_K, \quad V = XW_V

点积与缩放:给匹配度打分

需求清单(Q)和工牌(K)如何比对?最直接的方式是把两张“标签向量”逐项相乘再求和:数值越大,说明越契合。这就是点积运算。对于第 i 个词,拿它的 Qᵢ 去跟所有位置的 Kⱼ 做点积,就得到一组原始分数 eᵢⱼ,代表“i 对 j 的关注倾向”。

但直接使用点积有一个隐患:当维度 d_k 较大时,点积数值的方差也会变大(约等于 d_k)。想象评审会上打分机制被设计成“每项满分 1000 分”,大家的分差动不动就几百,评委很难理性分配注意力。为了调节打分尺度,原始论文在点积后除以 √d_k,得到缩放后的分数:

缩放就像在评审规则里加了一条“打分请以 5 分为梯度”的约束,避免因标准差过大导致少数极端分垄断全场。有了它,后续的权重分配才能更理性、更稳定,模型训练也由此规避了梯度消失的风险。

score(q,k)=q⋅kdk\displaystyle \text{score}(q, k) = \frac{q \cdot k}{\sqrt{d_k}}
缩放的本质是“温度调节”:让分数的离散程度回到单位量级,避免 Softmax 进入梯度饱和区。
  1. 点积 q·k将 q 与 k 的每个对应维度相乘后累加,得到一个标量,衡量两个向量的“吻合程度”。
    q⋅k=∑i=1dkqiki\displaystyle q \cdot k = \sum_{i=1}^{d_k} q_i k_i
  2. 缩放因子 √d_kd_k 是向量的维度(如 64),开根号后作为分母,把分数拉回一个温和的范围。
    1dk\displaystyle \frac{1}{\sqrt{d_k}}
  3. 最终得分缩放后的分数被称作 logits(原始逻辑分数),供下一步 Softmax 使用。
    score(q,k)=q⋅kdk\displaystyle \text{score}(q, k) = \frac{q \cdot k}{\sqrt{d_k}}

Softmax归一化:发言权重的分配法则

打分只是第一步。分数出来后,会议主持人还面临一个问题:如何把“关注度”合理地分配给各位同事,让大家集中精力听最关键的信息?Softmax 就是这位主持人——它把原始分转化成一串非负、且总和为 1 的权重。先对每一行的分数做指数运算,再除以该行所有指数的和,权重的含义就变得非常直观:谁的分数高,谁就获得更大的“发言占比”。

得到权重后,还需要把它真正用于信息提取:用权重对 Value 做加权求和,得到该词的新表示。这一步把“该听谁的”落实为“实际听到什么”。

这一步就像主持人按权重把各位同事的发言精华汇总成一份“会议总结”:谁的发言与当前议题最相关,谁的内容在总结中占比就越高。于是,每个词携带的已不再是孤立的自身信息,而是整个句子的语义浓缩。

αij=exp⁡(eij)∑k=1nexp⁡(eik)\displaystyle \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{n}\exp(e_{ik})}
这一公式把任意实数分数映射成概率,保证注意力权重永远为正、且每行求和为 1。
zi=∑j=1nαijvj\displaystyle z_i = \sum_{j=1}^{n} \alpha_{ij} v_j
输出 zᵢ 是融合了全局上下文的新向量,这就是 Self-Attention 每一层的最终产物。
  1. 指数运算对第 i 行第 j 个分数取自然指数,确保结果大于 0,同时放大分数的差距。
    exp⁡(eij)\displaystyle \exp(e_{ij})
  2. 分母归一化对该行所有词的指数结果求和,作为统一的总和基准。
    ∑k=1nexp⁡(eik)\displaystyle \sum_{k=1}^{n}\exp(e_{ik})
  3. 权重 α_ij两者相除得到 0 到 1 之间的权重,表示“词 i 应该分配给词 j 多少注意力”。
    αij=exp⁡(eij)∑k=1nexp⁡(eik)\displaystyle \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{n}\exp(e_{ik})}
  4. 加权项每个 v_j 乘上它对应的注意力权重,实现“按需提取”。
    αijvj\displaystyle \alpha_{ij} v_j
  5. 累加求和把所有加权后的向量相加,得到融合了全局信息的新向量。
    zi=∑j=1nαijvj\displaystyle z_i = \sum_{j=1}^{n} \alpha_{ij} v_j

多头注意力:专题小组并行讨论

一场全员大会如果议题太多,讨论难免过于粗放。聪明的组织者会把参会者分成几个专题小组:一组讨论用户增长,一组讨论产品体验,一组讨论技术架构——每个小组从自己的角度审视全局,最后再合并各组结论。多头注意力(Multi-Head Attention)正是这个“专题小组”机制。

技术实现上,多头注意力将 Q、K、V 分别投影到 h 个不同的子空间(每个子空间维度约为 d_k/h),在每个子空间独立执行缩放点积注意力,得到 h 个“头”,再把所有头的输出拼接起来,经一个输出矩阵融合。

每个小组虽然面对同一场会议,但因专业视角不同,提炼出的“会议纪要”各有侧重;最终合并出的总结,比任何单一大组的结论都要全面、立体。这也是为什么主流大模型普遍选择 8 或 16 个头,而非只做一次标准注意力。

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, \ldots, \text{head}_h)W^O
多头机制让模型同时从多个语义子空间捕捉关系:有的头关注语法结构,有的头关注指代关系,有的头关注情感色彩。
  1. 第 i 组的投影用第 i 组独立权重矩阵将 Q、K、V 投影到子空间,然后在该子空间执行注意力计算。
    headi=Attention(QWiQ,KWiK,VWiV)\displaystyle \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
  2. 拼接所有头把 h 个头的输出按特征维度拼接起来,形成更宽的特征表示。
    Concat(head1,…,headh)\displaystyle \text{Concat}(\text{head}_1, \ldots, \text{head}_h)
  3. 输出投影融合乘上输出权重矩阵 W^O,完成多视角信息的深度融合。
    MultiHead(Q,K,V)=Concat(head1,…,headh)WO\displaystyle \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O

位置编码:座次贴纸

Self-Attention 有一个“性格特点”:它天生不看座位顺序——所有词被放在同一张桌子上平等对话,彼此不分先后。但语言中顺序至关重要:“我打你”与“你打我”语义截然相反。于是,会议组织者想了一个巧妙办法:给每位同事发一张“座位号贴纸”,把顺序信息随身携带,让模型在平等对话的同时仍能感知先后关系。

Transformer 的做法是在输入词向量上叠加一组位置向量(Positional Encoding)。原始论文使用正弦和余弦函数生成固定编码:不同位置、不同维度得到不同的数值,从而让模型既能区分每个词的绝对位置,也能推断两个词之间的相对距离。

座位号贴纸不会改变同事所讲的内容,却让每个人的发言带上了明确的位置语境。模型既能知道谁先谁后,也能推断两个词之间的相对远近——这正是 RNN 天然拥有、而 Self-Attention 必须主动补上的能力。

PE(pos,2i)=sin⁡(pos100002i/d),PE(pos,2i+1)=cos⁡(pos100002i/d)\displaystyle PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
位置编码以“空间换时间”:它不改变注意力机制本身,却为无序的集合运算注入了语序信息。
  1. 偶数维度的正弦pos 是词在句子中的位置,2i 表示向量连续维度中的偶数下标,用 sin 函数填充。
    PE(pos,2i)=sin⁡(pos100002i/d)\displaystyle PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)
  2. 奇数维度的余弦奇数下标用 cos 函数填充,与 sin 交替形成独特的“位置指纹”。
    PE(pos,2i+1)=cos⁡(pos100002i/d)\displaystyle PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
  3. 频率下降规律i 越大,分母指数越大,三角函数的频率越低,不同维度承担不同“分辨率”的位置刻画。
    ω=1100002i/d\displaystyle \omega = \frac{1}{10000^{2i/d}}

实战应用:从会议到产业

这种“全员直连、按话题聚焦”的高效会议机制,很快被各大“公司”(模型架构)采纳,成为业界通用的标准流程。从语言翻译、文本写作到图像理解,处处都能看到它的身影。Self-Attention 是 Transformer 的核心组件,而由 Transformer 衍生出的 BERT、GPT 系列,几乎重塑了整个自然语言处理领域。

  • 长程依赖:Self-Attention 的计算复杂度为 O(n²),但每一步都直接可达任意位置,彻底摆脱 RNN 沿时间步递推的顺序瓶颈;
  • 并行计算:所有位置的注意力分数可以矩阵化同时计算,训练效率远高于逐步递推的 RNN,这是大模型得以在海量数据上训练的前提;
  • 可解释性:注意力矩阵直观展示了模型“看哪里”,为模型分析与调试提供了可视化入口。

此外,Vision Transformer(ViT)把图像切成 Patch 后同样用 Self-Attention 建模,证明该机制在非序列数据上也能发挥威力。从搜索引擎到智能助手,背后几乎都有一场又一场“高效会议”在同步举行。掌握 Self-Attention,就等于拿到了读懂这场 AI 变革的入场券。

AI 应用场景

机器翻译中的全局对齐

阶段:模型训练与推理

解决的问题:传统 Seq2Seq 模型翻译长句时,Encoder 的信息需要先压缩进一个固定长度的向量,再传给 Decoder,句子一长就丢失细节。Self-Attention 让源语言每个词与目标语言每个词建立直接对齐,长句翻译质量因此大幅提升。

具体案例:Google 的 Transformer 机器翻译系统,面对“一位来自西班牙的游客在大雨中寻找丢失的蓝色行李箱”这类长句时,能准确将“蓝色行李箱”与“蓝色”“行李箱”建立注意力链接,避免漏译与错译。

大语言模型的文本生成

阶段:预训练与推理

解决的问题:GPT 等大模型需要从海量文本中学习词与词的共现规律。Self-Attention 让每个 token 在生成前“回顾”整个上下文窗口中的所有关键词,从而生成衔接自然的长文本,而不是机械地逐词拼接。

具体案例:ChatGPT 在回答“请解释一下相对论”时,会同时关注问题中的“解释”“相对论”等词,并从训练中携带的相关知识中聚合信息,生成结构完整、逻辑连贯的答案。

视觉 Transformer 的图像理解

阶段:模型设计与训练

解决的问题:传统 CNN 依赖局部感受野,难以捕捉图像中相距很远的像素关系(如人物的手和脸)。ViT 将图像切块后送入 Self-Attention,让每个图像块都能直接与其他图像块交互,实现全局建模。

具体案例:ViT 在 ImageNet 分类任务中,能通过注意力矩阵清晰呈现“狗的头部”与“狗的身体”之间的长距离关联,从而做出更准确的分类判断。

Python 演示

python37 行
import numpy as np def softmax(x):    """对输入矩阵的每一行做softmax,防止数值溢出"""    x_shift = x - np.max(x, axis=-1, keepdims=True)    exp_x = np.exp(x_shift)    return exp_x / np.sum(exp_x, axis=-1, keepdims=True)  class SelfAttention:    """一个极简的可学习自注意力层(单头)"""     def __init__(self, d_in, d_k):        self.d_k = d_k        self.W_Q = np.random.randn(d_in, d_k) * 0.1        self.W_K = np.random.randn(d_in, d_k) * 0.1        self.W_V = np.random.randn(d_in, d_k) * 0.1     def forward(self, X):        """X: (seq_len, d_in) -> (seq_len, d_k)"""        Q = X @ self.W_Q        K = X @ self.W_K        V = X @ self.W_V        scores = (Q @ K.T) / np.sqrt(self.d_k)        weights = softmax(scores)        output = weights @ V        return output, weights  if __name__ == "__main__":    # 模拟 4 个词的输入,每个词 8 维向量    X = np.random.randn(4, 8)    attn_layer = SelfAttention(d_in=8, d_k=16)    out, attn_w = attn_layer.forward(X)    print("输出形状:", out.shape)    print("注意力矩阵:\n", np.round(attn_w, 3))    print("每行权重和:", np.round(attn_w.sum(axis=1), 3))
目的:演示 Self-Attention 的完整数学流程,输出注意力矩阵并验证每行权重之和为 1。
  1. x_shift = x - np.max(x, axis=-1, keepdims=True)Softmax 前减去每行最大值,防止指数运算溢出。
  2. self.W_Q = np.random.randn(d_in, d_k) * 0.1用小方差随机初始化,避免初始分数过大。
  3. Q = X @ self.W_Q输入矩阵与权重矩阵相乘,得到 Query 向量集合。
  4. scores = (Q @ K.T) / np.sqrt(self.d_k)缩放点积:先算 Q 与所有 K 的相似度,再除以 √d_k。
  5. weights = softmax(scores)把原始分数归一化成注意力权重,每行和为 1。
  6. output = weights @ V用权重对 Value 做加权求和,得到融合上下文的新表示。

常见误区

误区我觉得 Self-Attention 需要三个不同的输入,就像三个人分别提供 Query、Key、Value。

正解实际上 Q、K、V 都由同一个输入 X 通过三组不同的权重矩阵线性变换而来。如果把输入比作“同一位同事”,那么 W_Q、W_K、W_V 就是三副不同的“眼镜”:戴上 Q 眼镜看到的是他的需求,戴上 K 眼镜看到的是他的工牌,戴上 V 眼镜看到的是他的报告。内容来源相同,观察视角不同。

为何常见:注意力机制的图示经常把 Q、K、V 画成三个独立方块,初学者容易误以为是三个输入;实际上它们共享同一个来源 X。

误区“注意力权重不就是 Q 和 K 算出来的相似度分数吗?直接用这个分数加权不就行了吗?”

正解点积分数只是原始打分(logits),它们可能是负数、可以大于 1,总和也不等于 1。要成为真正的“权重”,必须经过 Softmax 归一化,让所有分数变为正数且和为 1。可以理解为:评分表要经过主持人的统一换算,才能决定各自的发言时间占比。

为何常见:很多教程把注意力分数与注意力权重混着说,导致概念边界模糊。

误区“多头注意力就是把 Self-Attention 重复做几次再平均,只是增加计算量而已。”

正解多头注意力是在不同的子空间执行注意力,每一组有自己独立的 W_Q、W_K、W_V 投影,能够捕捉不同维度的语义关系(如语法关系、指代关系、情感关联),最后拼接并融合。它不是简单重复,而是“多个专题小组从不同角度讨论再汇总”。

为何常见:图示中的多头常常画成并列的相同结构,让人误以为只是多次计算的平均。

误区“Self-Attention 已经能全局建模了,位置编码应该只是锦上添花,去掉也无妨。”

正解完全没有位置编码的 Self-Attention 是一个“词袋模型”——它无法区分“我打你”和“你打我”,因为这两个句子的词集合完全相同。位置编码是 Transformer 感知语序的唯一来源,是必要条件而非可选优化。

为何常见:直观上觉得“全局注意力”已经很强大,容易忽略序列自带的顺序约束。

误区“既然 Self-Attention 这么强,RNN 应该被彻底淘汰,没有任何用处了。”

正解Self-Attention 在长距离依赖和并行计算上确实优于 RNN,但 RNN(尤其是 LSTM/GRU)在短序列、在线增量预测、低资源设备等场景中仍有应用价值。更准确的说法是:Self-Attention 在主流大模型中取代了 RNN 的主干地位,但 RNN 变体在时序预测等领域依然活跃。

为何常见:技术文章常用“取代 RNN”的标题式表述,让人形成非黑即白的理解。

面试题

Q1. Self-Attention 的核心能力是什么?

单选题 · easy

  • A.只关注相邻词的关系
  • B.直接关注序列所有位置← 正确答案
  • C.只能处理固定长度输入
  • D.依赖循环结构传递信息

答案:B。Self-Attention 让序列中每个位置直接与所有位置计算关联,实现全局建模。A 是 CNN 局部感受野的特征,C 与位置编码有关但并非核心能力,D 是 RNN 的特点。

Q2. 在 Self-Attention 中,Q、K、V 是如何得到的?

单选题 · mid

  • A.由三个不同输入序列分别给出
  • B.对输入 X 做三次相同的线性变换
  • C.由同一输入 X 乘三组不同权重矩阵← 正确答案
  • D.由注意力权重加权求和得到

答案:C。Q、K、V 都来自同一个输入 X,分别乘以 W_Q、W_K、W_V 得到。A 是常见误解,B 中“相同”不对,D 是输出 z 的计算方式而非 Q/K/V 的来源。

Q3. 缩放点积注意力中,除以 √d_k 的主要原因是?

单选题 · mid

  • A.让点积方差保持稳定量级← 正确答案
  • B.减少模型训练参数量
  • C.让 Q 和 K 的维度保持一致
  • D.降低整体计算复杂度

答案:A。点积数值随维度 d_k 增大而增大,进入 Softmax 后指数函数梯度极小,学习困难。除以 √d_k 将方差拉回单位量级以稳定训练。B、C、D 都不是缩放的真实目的。

Q4. Softmax 在注意力机制中的作用是?

单选题 · easy

  • A.增大所有分数的数值
  • B.将分数转换成非负且和为 1 的权重← 正确答案
  • C.让矩阵维度快速对齐
  • D.代替点积计算相似度

答案:B。Softmax 对原始分数做指数归一化,输出 0~1 且总和为 1 的概率式权重,决定各位置信息被提取的比例。A 不准确,C 是投影矩阵的职责,D 混淆运算顺序。

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

多选题 · mid

  • A.多个头在不同子空间并行建模← 正确答案
  • B.每个头有独立的权重矩阵← 正确答案
  • C.头数越多模型效果一定越好
  • D.多头输出需要拼接并融合← 正确答案

答案:ABD。多头注意力用不同投影将 Q/K/V 映射到多个子空间,每个头独立计算,最后拼接融合。C 错误:头数过多会增加计算开销甚至带来冗余,并非越多越好。

Q6. Transformer 为什么需要位置编码?

单选题 · mid

  • A.Self-Attention 本身无法感知词序← 正确答案
  • B.为了让词向量维度更高
  • C.为了加快 Softmax 计算
  • D.为了减少注意力头数量

答案:A。Self-Attention 是对集合的运算,交换词序后输出不变。位置编码将顺序信息注入输入,让模型能区分“我打你”和“你打我”。B、C、D 都与位置编码的功能无关。

Q7. 与 RNN 相比,Self-Attention 的优势包括?

多选题 · hard

  • A.任意两位置间信息直达← 正确答案
  • B.序列位置可并行计算← 正确答案
  • C.计算复杂度恒为 O(n)
  • D.长距离依赖建模更强← 正确答案

答案:ABD。A 是消除长程依赖瓶颈的关键,B 是训练效率优势,D 是实践中的普遍结论。C 错误:标准 Self-Attention 的复杂度为 O(n²),并非 O(n)。

Q8. 注意力权重 α_ij 表示什么?

单选题 · easy

  • A.i 对 j 的注意力占比← 正确答案
  • B.j 对 i 的注意力占比
  • C.i 与 j 的向量夹角
  • D.i 在句中的词频统计

答案:A。α_ij 是第 i 个词(Query 来自 i)分配给第 j 个词(Value 来自 j)的权重比例,反映 i 在做表示时对 j 的关注程度。B 是下标顺序颠倒,C、D 与注意力权重的含义无关。

Q9. 当 d_k=64 时,未缩放的点积分数方差约为?

单选题 · hard

  • A.1
  • B.8
  • C.64← 正确答案
  • D.4096

答案:C。若 Q、K 各维度独立且方差为 1,点积是 64 个乘积之和,方差为 64,标准差为 8。除以 √64=8 后标准差回到 1,这正是缩放因子的作用。

Q10. 下列哪些模型架构使用了 Self-Attention?

多选题 · mid

  • A.Transformer← 正确答案
  • B.GPT← 正确答案
  • C.BERT← 正确答案
  • D.传统 RNN

答案:ABC。Transformer 及其衍生模型 GPT、BERT 都以 Self-Attention 为核心组件。传统 RNN 依赖循环结构,不使用 Self-Attention。