题目内容
在大语言模型推理过程中,随着上下文长度增加,标准 Attention 的计算开销以 O(n2) 增长,成为性能瓶颈。为提升长序列处理效率,提出一种基于空间连续块的稀疏注意力机制。
具体流程如下:
-
一个长度为 n 的历史 token 序列,每个 token 表示为 1 个 d 维特征向量 xj∈Rd
。按固定块大小b,将序列划分为 m=ceil(n/b)个空间连续块(最后一个块可不满)
B1,B2,...,Bm,其中:Bk=[x(k−1)b,...,xmin(kn)−1]
-
对每个块 Bk:
(1) 计算平均池化向量:hk=Bk1∑x∈Bkx
(2) 使用一个两层多层感知机(MLP)进行非线性压缩(隐藏维度dl=1):ck=W2⋅σ(W1⋅hk+b1)+b2
其中:
① W1∈R1×d,W2∈Rd×1,输出 ck∈Rd
②b1=2,b2=1
③σ(x)=max(0,x)(即 ReLU 激活函数)
-
给定查询向量q∈Rd(题目中固定为全 1 向量:qi=1),计算每个压缩块的注意力得分:
ak=dq⋅ck
得到压缩块注意力得分序列 A=(a1,a2,...,am)
-
将序列 A 划分为恰好 2 个连续非空子数组,目标是最大化这两个子数组和中的最小值 S 。
-
最终输出该最大化的最小值 S 的整数化得分,该子数组对应的 token 块将跳过细粒度 attention 计算,实现稀疏推理。
其中,整数化得分即 S 乘以 100 后四舍五入得到的整数,以实现保留两位小数精度的整数化表示:
round(100⋅S)
输入描述
第 1 行:n d b,以空格分隔,分别为序列长度、token 向量维度、块大小
接下来 n 行:每行 d 个数,以空格分隔,表示 xi
倒数第 2 行:d 个数,以空格分隔,表示 W1
最后 1 行:d 个数,以空格分隔,表示 W2
约束条件:
1≤n≤1000
1≤b≤n
1≤d≤100
所有向量非零
输出描述
返回一个整数,即上述步骤 5 的整数化得分
样例1
输入
3 1 1
2.0
4.0
6.0
1.0
2.0
输出
1700
说明
①分块:B1=[2.0],B2=[4.0],B3=[6.0]
②平均池化:h1=[2.0],h2=[4.0],h3=[6.0]
③MLP 压缩:c1=[9.0],c2=[13.0],c3=[17.0]
④注意力得分:A=[9,13,17]
⑤划分为 2 个连续非空子数组,最大化min(sum):
[9]∣[13,17] → 和:9,30→min=9
[9,13]∣[17] → 和:22,17→min=17→S=17,输出 1700
样例2
输入
3 2 1
2.0 1.0
3.0 2.0
4.0 3.0
1.0 0.5
2.0 1.0
输出
1732
说明
①分块:B1=[2.0,1.0],B2=[3.0,2.0],B3=[4.0,3.0]
②平均池化:h1=[2.0,1.0],h2=[3.0,2.0],h3=[4.0,3.0]
③MLP 压缩:c1=[10.0,5.5],c2=[13.0,7.0],c3=[16.0,8.5]
④注意力得分:A=[215.5,220.0,224.5]
⑤划分为 2 个连续非空子数组,最大化(min(sum)):
[215.5],[220.0,224.5]→和:215.5,244.5 →min= 215.5
[215.5,220.0],[224.5]→ 和:235.5,224.5 →min=224.5→S=224.5,输出 1732