← 返回 PaperDaily 大模型与智能体

128簇路由更准:Apple这篇MIPS新方法有点狠

Apple Research这篇论文不玩“更大的索引”,而是直接让模型学会“怎么搜”。SupportNet学支持函数,KeyNet直接回归最优键,思路很狠,工程上也很实用。

128簇路由更准:Apple这篇MIPS新方法有点狠
🐉 龙哥读论文知识星球来了!
公众号每日8篇拆解不够看?星球无上限更AI领域论文、资讯、招聘、招博、开源代码,一站式干货,每日2分钟刷完即赚!
👇扫码加入「龙哥读论文」知识星球,前沿干货、实用资源一站式拿捏~ xingqiu_header

龙哥导读:
Apple Research这篇论文不玩“更大的索引”,而是直接让模型学会“怎么搜”。SupportNet学支持函数,KeyNet直接回归最优键,思路很狠,工程上也很实用。


原论文信息如下:
论文标题:
Amortized Maximum Inner Product Search with Learned Support Functions
发表日期:
2026年03月
发表单位:
Apple
原文链接:
https://arxiv.org/pdf/2603.08001
开源代码链接:
https://github.com/apple/ml-amips

MIPS:搜索界的“卷王”,计算代价飙升?

如果把检索系统比作“找人”,那 最大内积搜索(Maximum Inner Product Search, MIPS)就是那个最挑剔的面试官:它不问“谁离我最近”,只问“谁和我最投缘”。一句话理解,就是给定查询向量 x,要在数据库 Y 里找出和它点积最大的那个向量。
这个问题听起来朴素,代价却一点都不朴素。因为在大规模场景里,数据库动辄百万、千万级,直接暴力算一遍相似度,时间开销会像电费账单一样越看越心虚。推荐系统、信息检索、检索增强生成、分类加速,这些地方都离不开它;MIPS 要是慢,整条链路都会跟着慢。
封面
图1:KeyNet 直接把查询改写成“更像目标键”的向量,再喂给现成索引;这是本文最直观的核心思路之一。
传统近似搜索当然也不是吃素的。哈希、量化、图索引、倒排文件这些方法,都是在“少算一点、快一点、别太离谱”之间找平衡。但它们有个共同毛病:推理时才临时想办法,对查询分布本身利用得不够狠。Apple 这篇论文干脆换了个脑回路:既然查询分布是已知的,为什么不直接把“怎么搜”学进模型里?

破解之道:用“学习”替代“搜索”,将开销摊销!

本文的关键词是 amortized MIPS,中文可以理解成“摊销式最大内积搜索”。别被术语吓到,本质上就是:不是每次查询都重新从零开始算,而是先花一笔训练成本,把大量查询里重复出现的搜索模式学出来,之后每次来一个新查询,就直接用模型给答案或者给近似答案。
这招之所以成立,前提很现实:查询分布是已知的。也就是说,训练时能拿到一批代表真实业务的查询样本,并且能提前用精确 MIPS 计算出它们的最优匹配键。这样一来,模型学的不是抽象的“相似性”,而是“这个分布下到底该把谁配给谁”。
图1
图2:三种思路的对比。左边是倒排文件常见的“按质心路由”,中间是 SupportNet 学支持函数,右边是 KeyNet 直接预测最优键。论文的意思很明确:别只看离哪个中心近,要看哪个簇里真正能找到更高的内积。
更妙的是,MIPS 的值函数本身有漂亮的几何结构。它其实是数据库集合的 支持函数(support function):对任意查询 x,支持函数 σY(x) 就是 x 和数据库里所有向量点积的最大值。这个函数有两个关键性质:它是凸的,而且是正 1 次齐次的。更狠的是,按照包络定理,支持函数的梯度正好就是最优键 y⋆(x)。
图2
图3:支持函数和最优键的关系。左图是一个分段线性的凸函数,右图是对应的“梯度地图”。SupportNet 学的是左边,KeyNet 学的是右边;一个学标量函数,一个学向量输出。
这就把问题拆成了两条路:其一,学支持函数本身,再通过自动微分拿梯度;其二,直接回归最优键,连求导都省了。前者更“数学味”,后者更“工程味”。Apple 这篇论文没有站队,而是两条都做了,然后看谁更能打。

核心“武器”:支持函数与它的凸属性

先把概念掰开揉碎。给定数据库 Y={y1,…,yn},支持函数可以写成 σY(x)=maxy∈Y⟨x,y⟩。它像一个“最高分记录器”:输入一个查询方向 x,输出数据库里能拿到的最高点积。
为什么凸性重要?因为凸函数好学、好约束、好优化。更关键的是,支持函数不是随便来的,它天然就是“线性函数的上包络”,因此必然凸。再加上正 1 次齐次,意味着把查询放大一倍,输出也放大一倍——这和点积搜索的结构完全对得上。
论文把这个结构和最优传输联系起来也很有意思。支持函数的梯度映射 x↦∇σY(x) 本质上就是一个 Brenier map:它是某个凸函数的梯度。平时做最优传输,研究者常常得先猜潜在函数长什么样;这里更爽,训练数据里直接有“真值梯度”——也就是精确 MIPS 算出来的最优键。等于老师把标准答案和草稿纸都摆桌上了,学生只需要学会抄对。
为了让模型真的学到这个结构,SupportNet 不是普通 MLP,而是基于 输入凸神经网络(Input Convex Neural Network, ICNN)。ICNN 的关键约束是:某些隐藏层权重必须非负,这样从输入到输出的映射才保持凸性。论文还加了一个 homogenize 包装器,专门把输出强行拉回正齐次的结构里。这个设计不花哨,但很对路:既保住数学性质,又不至于把网络搞得太死板。
KeyNet 则更直接,干脆输出一个向量,直接拟合最优键。它不需要反向求导,推理时省掉一层梯度计算,工程上更轻。论文还顺手把 Euler 定理用进来:如果函数是正 1 次齐次,那么梯度和函数值之间满足 ⟨∇f(x),x⟩=f(x)。KeyNet 虽然不是显式梯度模型,但可以加一个 score consistency 约束,让它的输出更像“真的在学支持函数的梯度”。
表格1
表1:论文方法的核心设定与训练目标。SupportNet 负责学标量支持函数并通过梯度恢复键,KeyNet 负责直接回归最优键;两者都利用了查询分布的先验信息。

两种模型,两种打法:SupportNet vs. KeyNet

SupportNet 和 KeyNet 看上去像一对双胞胎,实际上分工很清楚。SupportNet 更像“路由器”,适合多簇场景;KeyNet 更像“替身演员”,直接拿预测键去喂现有索引,几乎不用改底层系统。
论文对它们都做了多任务扩展:如果数据库可以先聚成若干簇,那么模型可以同时学习每个簇的支持函数。这样一来,先用模型判断“该去哪个簇”,再在少数簇里做精搜,就能把大规模搜索拆成更便宜的两段式流程。这个思路非常工程化,尤其适合倒排文件一类架构。
训练时,论文不是直接拿原始查询硬怼网络,而是先对查询做了轻微高斯扰动,再重新计算目标键。这个动作很朴素,却很关键:它相当于给模型看更多“略微变形”的查询,避免只会背题不会做题。损失函数也很讲究:SupportNet 同时学分数回归和梯度匹配,KeyNet 同时学键回归和分数一致性。说白了,一个管“像不像分数”,一个管“像不像键”,双保险。
图3
图4:在 Quora 和 NQ 上的路由实验结果。SupportNet 与 KeyNet 在不同深度、规模和学习率下,整体都比质心路由更稳,说明它们不是“碰巧某个超参好用”,而是有比较稳定的泛化趋势。
从结构成本看,SupportNet 的代价在于推理时要做梯度计算;KeyNet 的代价在于输出维度更大,尤其在多簇设置里,最后一层会更重。所以论文没有简单粗暴地下结论“谁更强”,而是按场景分工:路由优先 SupportNet,直接替换查询优先 KeyNet。这才像真正做系统的人写出来的东西。

实验结果:效率与效果的双重胜利

实验覆盖了 BEIR 上的四个数据集:FIQA、Quora、NQ、HotpotQA,规模从约 5 万到 520 万键不等。这个选择很聪明,因为它既能看小规模场景,也能看百万级、千万级检索场景;而且这些数据集的查询风格差异很大,能检验方法是不是只会在单一任务上“表演”。
先看路由实验。论文把 Quora 和 NQ 切成 10 个簇,再比较“质心路由”和“学习型路由”。结果很直接:在 NQ 上,SupportNet 和 KeyNet 在几乎所有预算点都优于基线,低预算下提升尤其明显;在 Quora 上,基线在极低成本时并不差,但随着计算预算增加,学习型路由更稳、更能涨。这个现象很符合直觉:如果簇内结构复杂,靠质心判断就容易看走眼,学出来的支持函数会更会“看局部上限”。
图4
图5:NQ 上 128 簇的路由结果。SupportNet 在低 FLOPs 区间明显压过质心基线,说明簇数变大后,学到的支持函数比“看中心点”更靠谱。
更有说服力的是 128 簇实验。簇数拉高后,质心路由更容易失灵,而 SupportNet 仍然稳。论文报告里,SupportNet 在 k=1 时路由正确率明显高于基线,扩大到 k=4 后几乎追到很高水平,而且只用了更少的计算。这说明它不是简单“拟合中心”,而是在学习每个簇的真实可达上界。
然后是 KeyNet 接 FAISS-IVF 的实验,这才是最像产品落地的部分。做法很简单粗暴:把 KeyNet 预测出的向量 y(x) 直接当作查询,塞给现成索引,不改索引结构本身。结果在 HotpotQA、NQ、Quora 上都能看到收益,尤其在低成本预算下更明显。换句话说,模型不是替代索引,而是给索引“喂了一个更会找路的查询”。
图5
图6:HotpotQA 上 KeyNet 接入 FAISS-IVF 的效果。横轴分别从延迟、nprobe 和 FLOPs 三个角度看成本,纵轴看 Recall@0.1%。KeyNet 在多个预算区间都优于原始查询。
论文还专门测了分布偏移。给测试查询加高斯噪声后,KeyNet 仍然能在不少预算点上保持优势,甚至在某些成本区间里,映射后的查询比原始查询更适合索引。这个结果很重要,因为现实系统里查询分布经常会漂:用户表达会变、业务会变、热词会变。一个只在“干净测试集”里好看的方法,落地价值会迅速打折;而这篇论文至少证明了它对轻度偏移不是纸糊的。
图6
图7:NQ 上分布偏移鲁棒性对比。左边是原始查询,中间是 KeyNet 映射后的查询,右边是两者差值。差值为负,说明 KeyNet 让索引更好用了。
从训练曲线看,KeyNet 的相对传输误差会随着样本数下降,但到大约 3B 样本后,后续收益开始变平。这给了一个很现实的信号:这类方法不是“数据越多越无限涨”,而是有明显的边际收益递减。对工程团队来说,这种信息比空泛的“继续加数据可能更好”有用得多。
图9
图8:训练过程中相对传输误差的变化。模型越大,最终误差越低,但收益不是无限线性的,后期会进入平台期。

局限与展望:如何应对“未知”查询?

这篇工作的边界也很清楚。第一,它依赖“已知的查询分布”。如果线上查询和训练时差得太远,模型就可能学偏。第二,训练前需要先跑一遍精确 MIPS 生成监督信号,这在超大规模场景里本身就有成本。第三,SupportNet 需要反向求导,KeyNet 虽然更轻,但在多簇高维输出时也会把最后一层做重。
不过这并不妨碍它很有价值。因为它给检索系统提供了一个新方向:不是只优化索引结构,而是把“查询本身”也当成可学习对象。这个想法一旦和更强的编码器、更复杂的索引后端结合,可能会在召回、延迟、成本三者之间开出新的折中点。
如果把它放到真实业务里,最可能先落地的,不是“完全替代搜索”,而是给现有索引做一个学习型前置器:先用 KeyNet 让查询更像数据库里真正容易命中的方向,再交给 FAISS、ScaNN 这类成熟后端。这样既保留系统稳定性,又能吃到一部分学习带来的收益,属于比较务实的路线。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

这篇论文到底解决什么问题?它解决的是“大规模 MIPS 太贵”这个老问题。核心不是发明新索引,而是把已知查询分布下的搜索过程学成一个模型,让模型直接预测最优键,或者先判断该去哪个簇。

SupportNet 和 KeyNet 有什么区别?SupportNet 学的是支持函数 σY(x),需要再对输入求梯度拿到最优键;KeyNet 直接输出最优键 y⋆(x),推理更轻,适合直接接入现成索引。

为什么论文老提支持函数、凸性和正齐次?因为 MIPS 的值函数本来就等于支持函数,而支持函数天然是凸的、正 1 次齐次的,梯度就是最优键。把这些结构学进去,模型就不是瞎猜,而是在顺着问题本身的几何规律做近似。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆。把 MIPS 明确写成“支持函数学习”并拆成 SupportNet / KeyNet 两条线,思路不算玄学,胜在抓住了问题结构,而且和索引系统衔接得很自然。

实验合理度:★★★★☆。数据集跨度大,成本维度也看得比较全,路由、索引接入、分布偏移都测了,算是比较像样的系统实验。

学术研究价值:★★★★☆。它把检索问题和凸分析、最优传输连起来,给后续“学习型检索”提供了一个很清晰的数学入口。

稳定性:★★★☆☆。在 BEIR 上表现不错,但前提是查询分布可学、可预估;一旦线上分布漂得太厉害,效果仍然要打问号。

适应性以及泛化能力:★★★☆☆。对多种数据集和编码器都做了验证,泛化不算差,但本质上还是面向“固定数据库 + 已知查询分布”的场景。

硬件需求及成本:★★★☆☆。KeyNet 推理比 SupportNet 轻,但训练前的监督构建和大规模训练成本不低;适合有一定算力预算的团队。

复现难度:★★★☆☆。代码开源是加分项,但要完整复现大规模检索实验,数据准备、索引后端和训练配置都不算轻松。

产品化成熟度:★★★☆☆。更像“可嵌入现有系统的学习型前置模块”,不是一把梭的替代方案;在召回—延迟折中明确的检索场景里有落地潜力。

可能的问题:依赖查询分布先验,训练监督构建成本高;分布漂移和超大规模部署时,收益与复杂度还要继续权衡。


主要参考文献

Theo X. Olausson, João Monteiro, Michal Klein, Marco Cuturi. Amortized Maximum Inner Product Search with Learned Support Functions. arXiv:2603.08001, 2026.
Apple Research 开源代码:https://github.com/apple/ml-amips

想把“检索为什么慢、为什么不准、怎么省算力”一次看透?来龙哥读论文星球,按领域拆解前沿论文、代码和招聘信息,少走弯路,多看硬货。

end
欢迎加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称,一起聊检索、RAG、索引和大模型落地。
wechat_helperdianzan
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。