想象你是一座百万册图书馆的管理员:读者的每一次点击、购买、观看,都像一本悄悄上架的书。几年下来,藏书已经多到不可能逐本翻看,但读者随时会问:“帮我找一本和我过去三年的阅读口味最像的新书。” 如果只看门口最近摆的 20 本,你会漏掉他长期沉淀的品味;如果把所有书都读一遍,找一本书就要花上一整天。推荐系统面对的长行为序列,正是这样一座图书馆。本篇文章要讲的“稀疏注意力”,就是一位聪明图书管理员的三件省力法宝:先查分类目录(哈希分桶)、只看固定几排书架(稀疏掩码)、用摘要卡快速比对(随机特征)——用最小的力气,找到最对的那本书。

岗位关联

掌握长序列建模与稀疏注意力,你就能在千万级用户行为上做出又快又准的推荐——这是高级推荐算法工程师区别于初级工程师的核心能力之一。

目录
  1. 可视化演示
  2. 长序列之困
  3. 注意力机制
  4. 稀疏注意力
  5. 哈希方法
  6. 随机特征法
  7. 搜索兴趣模型
  8. 评估与展望
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

长序列之困

一位老读者来找图书管理员:“帮我找一本新书,要像我过去三年借过的那几百本推理小说一样好看。” 管理员犯了难:只看门口新到的 20 本书吧,会漏掉读者三年的阅读品味;可要把借阅记录里的几百本书全翻一遍,找一本书就得花上一整天。图书馆越大,这个矛盾越尖锐——这正是推荐系统面对用户“长行为序列”时的真实处境。

在推荐系统里,用户每一次点击、购买、观看都会被编码成一个向量,也就是一串数字坐标,专业上叫 item embedding。按时间排列起来,就得到用户的行为序列。早期模型只取最近 20~50 条行为,因为“近因效应”强;但大量研究证明,长期兴趣同样重要——用户一个月前反复浏览的品类,往往预示着下一次大额购买。于是序列长度从几十条涨到几千、上万条。

当序列变长,标准自注意力要求任意两个位置之间都要计算关联:n 个位置两两打分,就是 n² 次运算,序列长度每翻一倍,算力需求翻四倍。同时,n 条行为的向量都得常驻内存,显存很快见底。更麻烦的是,三年里混杂着误点、他人代买、偶然浏览等噪声,还有“去年喜欢、今年不喜欢”的兴趣漂移。复杂度公式如下:

因此,图书管理员必须放弃“逐本翻看”,改用“先分类、再筛选、后精读”的策略。接下来要讲的注意力机制,是管理员翻目录的动作;而稀疏注意力、哈希方法和随机特征,则分别对应“只逛固定几排”“按色标圈定区域”“用摘要卡速读”这三件省力法宝。

FLOPs(SelfAttention)=O(n2×d)\displaystyle \text{FLOPs}(\text{SelfAttention}) = O(n^2 \times d)
这个公式说明:当用户行为序列长度 n 从 100 涨到 10000,自注意力的计算量会放大一万倍。
  1. 物品个数 n$n$ 代表用户行为序列里物品的个数,从几十到上万不等,它是复杂度的“主角”。
  2. 特征维度 d$d$ 代表每个物品向量的维度,也就是每件物品用多少个数字来描述。
  3. 两两打分 n²$n^2$ 表示序列里任意两个位置都要计算一次相关度,打分矩阵有 $n \times n$ 个格子。
  4. 乘上维度 d$\times d$ 表示每个格子的打分都要在 $d$ 维空间里完成一次点积运算,维度越高单次运算越贵。

注意力机制

想象管理员拿到读者的借阅请求单(记为 Q,Query)后,他并不真的去读书,而是先翻图书馆的总目录(记为 K,Key 集合)。目录里每一行写着书名和关键词,管理员把请求单和每一行比对,给每本书打个“相关分”;然后按分数高低,从候选书里摘取关键段落(记为 V,Value),拼成一份摘要。这套“请求匹配目录、按分取内容”的流程,就是注意力机制。

从概念上说,Q 代表“我正在找什么”,K 代表“每个候选物品是什么”,V 代表“候选物品的完整信息”。模型先计算 Q 与每个 K 的匹配分数,再用 softmax 把分数归一成非负且和为 1 的注意力权重,最后用权重对 V 做加权求和。一个位置得到的输出,是“以我为参照、从全局按相关度汇总出来的信息”。注意力的数学形式如下:

但注意力再聪明,也架不住“全局”二字——每次都要和目录里的每一行比对。当目录有十万行时,这个动作本身就变成了瓶颈。于是管理员开始思考:能不能只和一部分目录行比对?这正是稀疏注意力的起点。

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
一句话:拿问题 Q 去匹配目录 K,把分数翻译成权重,再按权重从内容 V 里取信息。
  1. 查询 Q$Q$ 是查询向量,相当于管理员手里的“借阅请求单”,它的行数等于要查询的位置个数。
  2. 键值 K 与 V$K$ 是目录描述(键),$V$ 是内容本身(值),每个候选物品各有一套,一一对应。
  3. 点积打分$QK^\top$ 把查询与每个目录行做点积,得到一个相关度分数向量,分数越高代表越匹配。
  4. 缩放稳定$\frac{1}{\sqrt{d_k}}$ 把分数方差压回 1 附近,防止维度高时点积过大、softmax 进入饱和区导致梯度消失。
  5. softmax 归一$\text{softmax}(\cdot)$ 把分数转为非负且和为 1 的权重,放大“最相关的少数”,压制“无关的大多数”。
  6. 加权求和 V${}\,V$ 用权重对所有物品的内容做加权求和,得到当前查询最关心的“加权记忆”。

稀疏注意力

老读者借书的请求其实有很强的结构性:他今天的书,九成概率来自自己常逛的“推理小说区”(局部窗口),偶尔需要一两本镇馆之宝级别的经典(全局锚点),还可能因为最近迷上新题材,需要看看相邻的“悬疑区”。管理员据此给自己定下规矩:新书入库时,先画一张“可看地图”,只在地图内的书才值得翻目录。这张地图,就是掩码矩阵 M。

稀疏注意力的核心思想是:用掩码矩阵把注意力分数矩阵中“不该看”的位置直接遮掉,让模型在结构上就看不见无关位置。这样一来,计算量不再由序列总长度 n 决定,而由掩码里非零元素的数量决定。噪声和兴趣漂移带来的干扰,也在源头被过滤掉了一大半。

常见的稀疏模式有三种:局部窗口只允许每个位置看前后 w 个邻居,计算量随窗口线性增长;全局锚点让少数特殊 token 与所有位置相连,充当信息枢纽;分块组合把序列切成若干块,块内全连接、块间按需互联。把这些模式组合起来,可以在几乎不损失效果的前提下,把计算量降一个量级。掩码的数学表达如下:

不过,掩码矩阵是“手工设计”的——管理员凭经验决定哪几排书要读。能不能让数据自己说话:让“相似的书”自动聚在一起,然后再只读同组?这就是哈希方法要解决的问题。

SparseAttn(Q,K,V)=softmax((QK⊤)⊙Mdk)V\displaystyle \text{SparseAttn}(Q, K, V) = \text{softmax}\left( \frac{(QK^\top) \odot M}{\sqrt{d_k}} \right) V
M 是一个 0/1 矩阵:1 的位置允许计算注意力,0 的位置被强制变成负无穷,经过 softmax 后权重归零。
  1. 掩码矩阵 M$M$ 与分数矩阵同形,1 代表“允许看”,0 代表“不许看”,它由局部窗口、全局锚点等规则预先设计。
  2. 逐元素相乘$\odot$ 把两个矩阵对应位置相乘,被遮住的位置分数被压成 $-\infty$。
  3. softmax 归零$-\infty$ 经过 softmax 后权重为 0,模型在数值上彻底忽略被遮位置,不浪费注意力。
  4. 稀疏计算只对 $M$ 中为 1 的位置做存储与计算,实际开销由非零元素数量决定,而非 n²。

哈希方法

管理员想了个聪明的办法:给每本书盖颜色章——随机地把整个图书馆的空间切成若干区域,每本书根据自己坐标落入哪个区域就盖哪种章。关键是“随机”切法有个美妙性质:两本相似的书(坐标接近),落在同一区域的概率远高于不相似的书。这就是局部敏感哈希(Locality Sensitive Hashing,LSH)。

LSH 不追求“把相似的书永远分到一起”(那是精确聚类),它只要求“相似的书大概率同桶”。有了这个概率保证,当查询来了,管理员只需在查询所在的那个色区里找书,几乎不会漏掉真正相关的书,而无关的书被结构性地排除在外。代价从“比对全馆目录”降为“只看同色区域”。

具体做法:随机生成 m 个方向向量,把每个向量往这些方向上投影,取投影最大的方向作为哈希桶编号。查询与历史物品用同一个哈希函数分桶,然后只计算同桶物品的注意力。Reformer 正是把这个思路搬进了 Transformer:先用 LSH 给序列分桶、桶内做注意力,再配合分块技巧,把标准注意力的 O(n²) 降到 O(n log n)。形式化如下:

色标虽好,但管理员发现盖章本身也要成本,而且颜色分区是“硬边界”——两本书明明只差一毫米,却被分到两个区。有没有更平滑、更便宜的办法?他想到:与其判断两本书是否同区,不如给每本书做一张摘要卡,直接算摘要卡之间的相似度。这就是随机特征法。

h(x)=arg⁡max⁡j[x⊤rj],Bucket(q)={i∣h(ki)=h(q)}\displaystyle h(x) = \arg\max_{j}\left[ x^\top r_j \right], \qquad \text{Bucket}(q) = \{ i \mid h(k_i) = h(q) \}
这个公式就是“盖颜色章”的数学版:x 属于哪个桶,取决于它离哪个随机方向最近。
  1. 随机方向 r_j$r_j$ 是随机生成的 $m$ 个方向向量,相当于在向量空间里切出 $m$ 个扇形区域。
  2. 投影打分$x^\top r_j$ 把向量 $x$ 往方向 $r_j$ 上投影,数值越大说明 $x$ 离这个方向越近。
  3. 取最强者$\arg\max_j$ 选出投影最大的方向,把 $x$ 分到那个方向对应的桶里,完成“盖章”。
  4. 同桶即邻居$\text{Bucket}(q)$ 表示查询只与同桶的键计算注意力,参与打分的位置从 $n$ 降到期望约 $n/m$。

随机特征法

摘要卡的思路是这样的:图书馆的每本书都配一张正方形小卡片,上面用几种固定的图案(正弦波、余弦波)记录这本书内容的关键频率。管理员判断两本书相不相似,不再翻目录、比全文,而是把两张摘要卡叠在一起快速扫描——卡片的数学语言就是“特征内积”。

原来,softmax 注意力本质上是在算一个核函数:两个位置的重要性 = softmax(q·k),这是一个恒正、非线性的相似度。随机特征法想用一个近似等式替换它:softmax(q·k) ≈ φ(q)ᵀφ(k),其中 φ 把向量映射到一组随机三角函数特征上。只要特征数量 m 足够大,近似就足够准,这就是核函数近似的思想。

这个替换带来一个“惊天大礼”——矩阵乘法结合律。原式 softmax(QKᵀ)V 需要先算 n×n 的分数矩阵;替换后变成 Φ(Q)(Φ(K)ᵀV):先计算 Φ(K)ᵀV(对每个特征做一次加权求和,复杂度 O(n)),再乘 Φ(Q)。整个注意力的复杂度从 O(n²) 降到 O(n)。这正是 Performer、线性注意力一类方法的灵魂。需要注意:为了近似恒正的 softmax,随机特征必须保证非负(例如使用正交随机特征),否则近似会严重失真。数学表达如下:

摘要卡让“速读”成为可能,但管理员依然要给所有书都做摘要卡——当藏书百万册时,这也是一笔开销。于是他想:能不能先花一秒钟用最便宜的方式圈定一小批候选书,只给这批书做详细摘要?这就是两阶段的“检索 + 精算”思想,也是接下来 SIM 模型的精髓。

softmax(q⊤k)≈ϕ(q)⊤ϕ(k),ϕ(x)=1m[sin⁡(ω1⊤x), cos⁡(ω1⊤x), …, sin⁡(ωm⊤x), cos⁡(ωm⊤x)]\displaystyle \text{softmax}(q^\top k) \approx \phi(q)^\top \phi(k), \qquad \phi(x) = \frac{1}{\sqrt{m}} \left[ \sin(\omega_1^\top x),\, \cos(\omega_1^\top x),\, \ldots,\, \sin(\omega_m^\top x),\, \cos(\omega_m^\top x) \right]
把“逐本比对全文”换成“叠摘要卡”,再用结合律调换计算顺序,是线性注意力又快又省的关键。
  1. 核函数近似$\text{softmax}(q^\top k) \approx \phi(q)^\top \phi(k)$ 表示用“摘要卡内积”代替“精确相关度”,越相似内积越大。
  2. 正弦特征$\sin(\omega^\top x), \cos(\omega^\top x)$ 把原始向量映射到随机频率空间,$m$ 组频率组成 $2m$ 维特征。
  3. 归一化系数$\frac{1}{\sqrt{m}}$ 让特征内积的方差保持稳定,近似误差不随 $m$ 的增长而失控。
  4. 结合律换序矩阵形式中先算 $\Phi(K)^\top V$ 得到小矩阵,再乘 $\Phi(Q)$,避开 $n\times n$ 大矩阵,复杂度从 $O(n^2)$ 降到 $O(n)$。

搜索兴趣模型

真正成熟的管理员流程是这样的:第一步,读者报出请求后,管理员不翻任何书,只用一套极快的目录检索系统(General Search Unit,GSU)在全馆范围扫一遍,瞬间挑出 100 本最可能相关的候选;第二步,管理员把候选书搬到桌上,用最细致的注意力方法(Exact Search Unit,ESU)精读这 100 本,最后给出推荐。先粗后精,两全其美。

SIM(Search-based Interest Model,搜索兴趣模型)正是这个流程的工程化。GSU 的任务是从用户上万条历史行为里快速挑出与目标物品最相关的 K 条。它有两种做法:简单版直接用内积相似度取 TopK(命中率高但需要扫全量);进阶版用前面讲的哈希分桶,先落桶再检索(更快但略有近似)。ESU 则只对 K 条候选做标准多头注意力,输出一个“用户当前兴趣向量”。

这个兴趣向量可以作为共享特征接入多任务框架:同时预测点击率(CTR)、转化率(CVR)、停留时长等目标,让多个任务共享一套长期兴趣表达,互相促进。SIM 在阿里的工业场景中,把用户行为序列从几十条扩展到上万条,同时在线延迟控制在毫秒级,是长序列建模落地最成功的案例之一。两阶段结构的形式化如下:

回到图书馆:GSU 是“先查目录筛出 100 本”,ESU 是“坐上书桌精读这 100 本”。如果没有第一步,管理员就得对百万册书逐一精读——那不是智慧,是蛮力。

Can=TopKGSU(et,E)={ei1,ei2,…,eiK},Interest=AttentionESU(et, ei1:K, ei1:K)\displaystyle \text{Can} = \text{TopK}_{\text{GSU}}\left(e_t, E\right) = \{ e_{i_1}, e_{i_2}, \ldots, e_{i_K} \}, \qquad \text{Interest} = \text{Attention}_{\text{ESU}}\left(e_t,\, e_{i_1:K},\, e_{i_1:K}\right)
GSU 负责“快速圈定候选”,ESU 负责“精细计算兴趣”,两步配合实现又快又准。
  1. 目标向量 e_t$e_t$ 是当前候选物品的向量,代表“读者此刻的请求”,是检索的出发点。
  2. 历史向量库 E$E$ 是用户全部历史行为的向量集合,可能长达上万条,是“百万册藏书”。
  3. TopK 检索$\text{TopK}_{\text{GSU}}$ 用内积或哈希从 $E$ 中取出最相关的 $K$ 条(如 100 条),这一步很快。
  4. 候选集合$e_{i_1:K}$ 是检索出的 $K$ 个候选向量,数量远小于原序列,精算成本可控。
  5. 精确注意力$\text{Attention}_{\text{ESU}}$ 以目标向量为查询、候选为键值,做标准注意力,输出用户当前兴趣向量。

评估与展望

图书馆好不好,不能只看管理员累不累,更要看读者满不满意。推荐系统的评估也分线上线下:离线阶段,用 AUC 衡量“模型把正样本排在负样本前面的概率”;但整体 AUC 会被活跃用户淹没——更公平的做法是 GAUC:先按用户分组算各自的 AUC,再用曝光量加权平均,避免头部用户主导全局指标。

除了效果指标,工程上还要盯住系统开销:单次推理延迟(读者等待时间)、内存占用(书架空间)、召回率与精度的平衡。稀疏注意力的价值,正是在“效果几乎不掉”的前提下,大幅压缩延迟与内存,让长序列建模从“实验室玩具”变成“线上服务”。

展望未来:哈希分桶与随机特征并不是互斥的,研究者正把它们与路由机制融合,让模型自适应选择“用哪套省力策略”;长上下文大模型(如百万 token 的 Transformer)里发展出的稀疏注意力技巧,也在持续反哺推荐领域。可以预见,长序列建模会从“怎么算得快”走向“怎么想得准”。评估指标如下:

图书管理员的终极理想,是在一本都不放过的前提下,用最少的翻书动作服务好每一位读者。稀疏注意力、哈希、随机特征、两阶段检索——这些工具的目标从来不是“偷懒”,而是把有限的算力花在刀刃上,让千万级读者都能在毫秒之间,找到自己想要的那本书。

GAUC=∑uwu⋅AUCu∑uwu\displaystyle \text{GAUC} = \frac{\sum_{u} w_u \cdot \text{AUC}_u}{\sum_{u} w_u}
GAUC 是按用户分组的 AUC 加权平均,比整体 AUC 更能公平反映每个用户的真实体验。
  1. 单用户 AUC$\text{AUC}_u$ 是第 $u$ 个用户在推荐列表上的排序质量,衡量该用户的正样本排在负样本前面的概率。
  2. 用户权重$w_u$ 常用曝光量或点击量,活跃用户占比大,指标更贴近线上真实的流量分布。
  3. 加权平均$\frac{\sum_u w_u \cdot \text{AUC}_u}{\sum_u w_u}$ 把所有用户的 AUC 按权重汇总,避免整体指标被少数头部用户淹没。

AI 应用场景

电商平台超长行为序列建模(SIM 落地)

阶段:召回与精排阶段的序列建模

解决的问题:传统模型只取最近 20~50 条行为,无法捕捉“三个月前反复浏览的品类”这类长期兴趣;若对全部上万条行为做全量注意力,单次推理延迟会超过百毫秒。SIM 用 GSU 先检索 TopK 候选、ESU 再精算,兼顾长期信息与实时性。

具体案例:双 11 大促场景,某用户的点击序列长达 3 万条。GSU 用当前候选商品的向量与 3 万条历史做快速检索,捞出 500 条相关行为;ESU 对这 500 条做多头注意力,输出兴趣向量用于 CTR/CVR 多任务预测。线上 AUC 稳定提升,延迟控制在 10ms 以内。

短视频推荐实时序列处理

阶段:在线推理与特征工程

解决的问题:短视频场景用户每秒都在产生新行为,序列不断变长,且兴趣切换极快(早晨健身、晚上喜剧)。全量注意力跟不上实时需求,还容易把互相无关的兴趣混在一起,互相干扰。

具体案例:采用 LSH 分桶将“健身”“喜剧”等兴趣自动分散到不同桶,推理时只计算目标视频所在桶的行为,既能保留跨天的长期健身兴趣,又不会被一周前的喜剧噪声干扰。实测单次推理时间从 30ms 降到 6ms,人均时长指标正向。

Python 演示

python53 行
import numpy as np np.random.seed(42)N = 1000      # 用户历史行为序列长度D = 16        # 物品向量维度B = 8         # 哈希桶数量 (颜色章的种类数) # 构造用户行为序列: 每个行为是一个物品向量history = np.random.randn(N, D)history /= np.linalg.norm(history, axis=1, keepdims=True) # 目标物品 (读者此刻的借阅请求)query = np.random.randn(D)query /= np.linalg.norm(query) # 1. 随机投影矩阵: 给向量空间切 B*2 刀R = np.random.randn(D, B * 2)proj = history @ Rbits = (proj > 0).astype(np.int32)buckets = np.zeros(N, dtype=np.int32)for i in range(N):    code = 0    for c in bits[i]:        code = (code << 1) | int(c)    buckets[i] = code % B # 2. 查询也盖同一个章qb = 0for c in ((query @ R) > 0).astype(np.int32):    qb = (qb << 1) | int(c)q_bucket = qb % B # 3. GSU: 只保留与查询同色的书cand_idx = np.where(buckets == q_bucket)[0] def softmax(x):    e = np.exp(x - x.max())    return e / e.sum() def attention(q, K, V):    w = softmax(q @ K.T)    return w @ V # 4. ESU: 对同色候选做精确注意力out_sparse = attention(query, history[cand_idx], history[cand_idx]) # 5. 全量注意力作为基准out_full = attention(query, history, history) err = np.linalg.norm(out_sparse - out_full) / np.linalg.norm(out_full)print("查询桶:", q_bucket, " 同桶候选数:", len(cand_idx))print("稀疏估计误差:", round(err, 4))print("计算量对比: 全量=%d, 稀疏=%d, 加速=%.1fx" % (N, len(cand_idx), N / len(cand_idx)))
目的:用 20 行核心逻辑演示“LSH 哈希分桶 + 稀疏注意力”如何用少量同桶候选近似全量注意力,并量化加速比与近似误差。
  1. R = np.random.randn(D, B * 2)随机投影矩阵:给向量空间“切刀”,每一刀都可能成为分桶边界。
  2. bits = (proj > 0).astype(np.int32)把连续投影值转成 0/1 二值哈希码,同一桶的物品码尾缀相似。
  3. buckets[i] = code % B哈希码取模映射到 B 个桶,这一步就是“给书盖颜色章”。
  4. cand_idx = np.where(buckets == q_bucket)[0]GSU 检索:只保留与查询同桶的物品索引。
  5. out_sparse = attention(query, history[cand_idx], history[cand_idx])ESU 精算:只对同桶候选做精确注意力。
  6. err = np.linalg.norm(out_sparse - out_full) / np.linalg.norm(out_full)计算稀疏与全量输出的相对误差,验证近似质量。

常见误区

误区稀疏注意力就是把一部分输入随机扔掉,跟 Dropout 差不多,靠运气省算力。看到注意力矩阵里大量的 0,就觉得模型是在“碰运气”。

正解注意力的“稀疏”是结构性的、确定性的:掩码矩阵、哈希分桶、局部窗口都是依据任务结构或数据相似度预先决定“哪些位置值得看”,而不是随机丢。随机丢弃(Dropout)是训练期的正则化手段,稀疏注意力是让计算图本身变稀疏,两者目的完全不同。

为何常见:深度学习中“稀疏”常与 Dropout、稀疏激活绑定出现,学习者容易把“注意力矩阵里的 0”误解为“采样出来的 0”。

误区模型接口支持任意长度,直接把序列从 50 拉到 10000 不就行了?多买几块 GPU 的事。结果真跑起来,要么显存炸掉,要么效果反而暴跌。

正解长序列不只是“更长”,还带来三重质变:O(n²) 的算力与显存让全量注意力在工业硬件上直接爆炸;序列中的噪声与兴趣漂移让“多即好”失效;训练的稳定性、采样策略都需要重新设计。稀疏注意力、哈希检索与分桶正是为应对这些质变而生。

为何常见:主流框架的 API 确实“没有长度限制”,让人误以为模型本身没有限制;但复杂度是硬约束,跟 API 长什么样无关。

误区LSH 和随机特征都是近似方法,等于拿推荐效果换速度,线上 AUC 肯定会掉,能不用就不用。

正解全量注意力经过 softmax 后,绝大多数权重本就趋近于 0——真正起作用的只有极少数高相关位置。稀疏化只是提前把“注定接近 0”的位置排除掉,这是利用 softmax 的固有稀疏性,而非盲目丢信息。实践中 SIM 等方案在 AUC 几乎持平的情况下,把延迟降低一个量级。

为何常见:“近似”一词自带“不精确”的心理暗示,再加上不了解 softmax 输出尾部趋近于零的特性,就高估了近似方法的损失。

面试题

Q1. 标准自注意力对长度为 n 的序列两两建模,其计算复杂度为?

单选题 · easy

  • A.常数级 O(1)
  • B.线性级 O(n)
  • C.平方级 O(n²)← 正确答案
  • D.立方级 O(n³)

答案:C。自注意力需要计算 n×n 的相关度矩阵,因此复杂度为 O(n²),这正是长序列建模困难的根源,也是稀疏注意力要解决的核心矛盾。

Q2. 注意力公式中把点积除以 √d_k 的主要原因是?

单选题 · mid

  • A.让注意力分数整体变小便于优化
  • B.防止点积过大导致梯度消失← 正确答案
  • C.为了保持参数量的一致性
  • D.让所有特征的数值统一归一

答案:B。维度 d_k 较大时,点积的方差随维度线性增长,softmax 会进入饱和区导致梯度接近 0。除以 √d_k 把方差压回 1 量级,训练更稳定。这就像管理员翻目录时先把分数统一到同一把尺子上,避免个别超大分数淹没其他候选。

Q3. 局部敏感哈希(LSH)保证的核心性质是?

单选题 · easy

  • A.任意两个向量都落入同一桶
  • B.相似向量以高概率落入同一桶← 正确答案
  • C.不同向量一定落入不同桶
  • D.哈希结果与向量内容无关

答案:B。LSH 的核心是“相似 → 同桶高概率、不相似 → 同桶低概率”。它允许不相似向量偶尔同桶,但绝不能把相似向量大量拆散。正是这个性质,让“只看同桶”成为近似全量注意力的可靠依据。

Q4. 下列哪些属于常见的稀疏注意力模式?

多选题 · mid

  • A.局部窗口注意力← 正确答案
  • B.全局锚点注意力← 正确答案
  • C.全连接自注意力
  • D.分块组合注意力← 正确答案

答案:ABD。局部窗口让每个位置只看前后 w 个邻居,全局锚点让少数特殊 token 与所有位置相连,分块组合把序列切成块处理,三者都是典型的稀疏模式。全连接自注意力是标准模式,不属于稀疏注意力。

Q5. Reformer 模型通过什么手段将注意力复杂度降到 O(n log n)?

单选题 · mid

  • A.随机特征映射
  • B.局部敏感哈希分桶← 正确答案
  • C.卷积替换注意力
  • D.剪枝神经网络

答案:B。Reformer 用 LSH 先把序列中相似的 token 分到同桶,再在每个桶内做注意力,参与计算的位置从全部 n 个变成同桶的少数几个,配合分块技巧后复杂度降到 O(n log n)。

Q6. 阿里 SIM 模型的两阶段核心结构是?

单选题 · mid

  • A.编码器与解码器架构
  • B.检索与精算两级单元← 正确答案
  • C.粗排与重排两阶段
  • D.蒸馏与量化两步走

答案:B。SIM 先由 GSU(General Search Unit)用内积或哈希从上万条历史中检索 TopK 相关物品,再由 ESU(Exact Search Unit)对检索结果做精确注意力,得到用户兴趣向量。先粗后精,与图书管理员“先查目录、再精读”的思路一致。

Q7. 随机特征法(线性注意力)速度提升的关键是?

单选题 · mid

  • A.减少了向量的特征维度
  • B.利用矩阵结合律重排运算← 正确答案
  • C.使用了低精度的浮点计算
  • D.只对序列的前半段建模

答案:B。把 softmax 核近似成特征内积后,原式变成 Φ(Q)(Φ(K)ᵀV),先算 Φ(K)ᵀV 只需要 O(n),再与 Φ(Q) 相乘,避免了 n×n 的中间矩阵,复杂度从 O(n²) 降到 O(n)。

Q8. 长序列建模中面临的典型挑战有哪些?

多选题 · easy

  • A.计算复杂度随长度平方增长← 正确答案
  • B.缓存大量行为向量占用内存← 正确答案
  • C.长序列中存在噪声与兴趣漂移← 正确答案
  • D.序列越长模型精度必然越高

答案:ABC。A、B、C 分别是算力、存储、数据三个层面的真实挑战。D 是错觉:序列越长,噪声和过时信息越多,若不加以处理,精度未必提升,甚至可能下降。

Q9. 用随机特征近似 softmax 时,特征映射必须满足的关键条件是?

单选题 · single

  • A.特征必须全部为非负← 正确答案
  • B.特征必须是正交向量
  • C.特征维度需大于序列长度
  • D.特征必须使用复数表示

答案:A。softmax 核的输出恒为正值,若随机特征可取负值(如直接使用正负交替的 sin/cos),内积可能出现负数,近似误差会很大。Performer 使用正交随机特征并保证正性,才让线性注意力切实可行。

Q10. 关于长序列稀疏注意力在工业推荐系统的落地,正确的有?

多选题 · extreme

  • A.检索阶段追求低延迟,常用哈希← 正确答案
  • B.精算阶段只对检索出物品注意← 正确答案
  • C.在线评估只看 AUC 忽略延迟
  • D.用 GAUC 评估不同用户组效果← 正确答案

答案:ABD。工业落地遵循“先检索后精算”的两阶段设计,检索阶段用哈希或内积追求低延迟,精算阶段只对少量候选做注意力。延迟是线上硬指标,C 说“忽略延迟”显然错误。GAUC 按用户分组计算 AUC 再加权平均,能公平评估不同活跃度用户的推荐质量。