原始题目:LeetGPU - Linear Self-Attention
实现论文 "Transformers are RNNs" 中提出的线性注意力。给定 Q、K、V(均为 M×d),计算:
LinearAttention(Q,K,V)=ϕ(Q)(∑jϕ(Kj))ϕ(Q)(ϕ(K)TV)
其中 ϕ(⋅)=elu(⋅)+1(elu 加 1 确保非负)。与标准 softmax attention(O(M2))不同,线性注意力利用 ϕ(Q)(ϕ(K)TV) 的计算顺序,将复杂度降为 O(M⋅d2)。
- 不允许使用外部库。
solve 函数签名必须保持不变。
- 1≤M≤10,000,1≤d≤128。
- 性能测试在 M=5,000 下进行。
线性注意力的核心技巧是改变计算顺序:先算 ϕ(K)TV(d×d),再与 ϕ(Q) 相乘——当 d≪M 时,这比 O(M2) 的 standard attention 快得多。ϕ 函数(elu+1)保证输出非负。但线性注意力缺少 softmax 的归一化效应,在建模长程依赖方面不如标准注意力。欢迎在 GitHub Discussions 分享你的解法。