苹果机器学习团队在 ICML 2026 发表论文,推出两款小型神经网络 SupportNet 与 KeyNet,专门解决检索增强生成(RAG)与推荐系统底层的最大内积搜索(MIPS)效率瓶颈。在包含约 260 万个段落的 Natural Questions(NQ)基准测试中,将最大尺寸的 KeyNet 作为前置插件接入工业界常用的 FAISS IVF 索引后,达到 99% 召回率的总延迟从 1.8 ms 降至 0.23 ms,提速约 8 倍,所需扫描的数据库比例从 0.10% 缩减至 0.009%。但翻开论文背后的配置账本与开源代码就会发现,这套精巧的数学加速方案需要先吞下 30 亿至 100 亿次样本展示的离线训练成本,且一旦底层文档发生增删重排就会面临失效。
传统向量检索工具(如 FAISS IVF 或 ScaNN)主要依赖键向量的几何分布做聚类,查询时先比对各个簇的质心距离,再去最近的簇里搜寻。这种做法默认用户查询与数据库文档长得很像,但在真实 RAG 场景里,用户输入的是简短提问,知识库里存的是长篇结构化文档,双方在表征空间极不对称。结果往往是某个簇的质心离查询很远,簇边缘却藏着真正的最佳匹配文档,质心路由直接将其漏掉。苹果团队由 Theo X. Olausson 与 Marco Cuturi 等人操刀,首次把凸分析里的支撑函数(support function)引入该领域,利用支撑函数本身是凸函数、且其在任意查询处的梯度正好等于最佳匹配键向量这两条数学性质,把几何搜索转化成了神经网络回归问题。
凸优化撑起的双路线加速与未公开的回本账单
苹果沿着这条数学性质拆出了两条工程路线,分别替现有检索系统换掉路由器和加上前置导航仪。第一条路线是 SupportNet,它采用松散约束的输入凸神经网络(ICNN),直接学习每个数据簇的支撑函数,回答一个比质心距离更精准的问题,即这个簇里最好的键向量能和当前查询匹配到什么程度。在 NQ 数据集切分为 128 个簇的测试中,小型 SupportNet 达到 95% 路由召回率的延迟从质心路由的 3.36 ms 降至 1.74 ms;若固定只扫描 5% 的数据库,中型模型的召回率能从 87.5% 推高到 92.6%。
第二条路线 KeyNet 走得更激进,它利用欧拉齐次函数定理导出的几何一致性损失,跳过路由打分,拿到用户查询后直接预测最佳匹配键向量在表征空间里的坐标。把它架在标准 FAISS IVF 索引前面当查询改写器,相当于先把短问题翻译成目标长文档的近似向量,再让 IVF 去搜。哪怕只允许扫描 0.001% 的 NQ 数据库,最大号 KeyNet(L 模型)也能在 96.7% 的情况下抓回真值,而原始查询只有 86%。
但这种推理阶段的轻快,是用前期极其沉重的离线算力换来的,而苹果在论文里刻意略去了这笔经济账。为了训练这两个 16 层深的网络,系统必须先针对历史查询样本(含数据增强变体)跑一遍毫无折扣的全量暴力搜索,算出精确的 Top-1 匹配真值作为监督标签。紧接着是漫长的回归训练,论文披露训练通常需要消耗 10 亿到 100 亿次样本展示,其开源仓库的默认配置文件(train_amips.yaml)直接设在了 732,421 步乘以 4096 批次大小,折合约 30 亿次样本展示。
| 模型规格 | 参数预算(占数据库标量比) | SupportNet 5% 扫描召回率 | KeyNet 0.001% 扫描召回率 |
|---|---|---|---|
| 基线(无神经网络) | 0% | 87.5%(质心路由) | 86.0%(原始查询) |
| XS / S / M 档 | 1% / 5% / 10% | 90.0% - 92.6% | 89.0% - 95.0% |
| L 档(最大尺寸) | 20% | 约 93.0% | 96.7% |
更棘手的是,苹果把这套方法命名为摊销(Amortized)搜索,却在全文中未公布具体的 GPU 训练时长、硬件资金开销,更没有算出单次查询省下的 1.5 ms 究竟要跑多少亿次线上请求才能填平前期的训练深坑。
源码里的静态死锁与同源泄漏争议
如果说算力账本只是贵,那么开源代码库披露的工程实现细节,则直接划定了这项技术在真实业务中的禁区。支持向量检索的 RAG 知识库在企业生产环境里几乎每天都在增删文档,但苹果这套架构把模型权重与静态数据库的物理排布焊死在了一起。
审查其开源代码中的数据处理模块(src/amips/data.py)可以看到,系统在训练和评估时直接依赖缓存的整数行号文件(topk_indices.npy)去静态矩阵(keys.npy)里提取目标向量,既没有绑定文档唯一 ID,也没有设计数据库指纹校验或增量更新机制。一旦企业往知识库里插入一批新财报、删掉几篇过期文档,或者触发底层索引重新聚类,原有的行号映射和簇边界瞬间错位。哪怕只新插入一条比原来更匹配某类查询的文档,旧模型学到的支撑函数表面和梯度指向就会静默失效,唯一的修复手段是推倒重来,再跑一遍全量暴力搜索和数十亿次样本训练。
把动态知识库焊死在静态权重里,省下的毫秒延迟填不平重训的算力深坑。
除了工程上的静态死锁,这份代码在实验评估的严谨性上也留了把柄,同时还绕开了工业界最核心的对手。在预计算真值的脚本(scripts/precompute_top1.py)第 294 至 315 行中,代码先对原始查询样本施加高斯噪声(AddNoise)生成扩增变体并汇总,随后才调用随机切分函数划分训练集与测试集。这种先扩增后切分的操作违背了机器学习评测隔离的底线,导致同一个原始提问的加噪孪生变体极可能同时落入训练集和测试集,让论文里漂亮的泛化召回率染上了同源数据泄漏的嫌疑。
在横向对比上,苹果虽然在 FIQA、Quora、HotpotQA 以及 1500 万键规模的 BioASQ 上验证了方案,但全程只跟基于聚类的 IVF 和基于量化的 ScaNN 比拼,只字未提目前向量数据库领域最主流的分层近邻图算法(HNSW)。而且论文里自定义的 Recall@k 评估的仅仅是把精确 Top-1 答案捞进候选池的比例,既没有用原始查询对候选池做重排序,也没有测试下游大模型生成的最终问答准确率。
- 风险.依赖高频实时数据更新的 RAG 团队(如金融资讯、企业实时知识库、新闻检索)千万别急着往生产管线里搬这套代码,否则每一次文档入库都会变成算力灾难。
对于 Milvus、Pinecone、Qdrant 等向量数据库厂商而言,KeyNet 并不会构成替代威胁,它本质上只是一个帮底层索引缩小包围圈的前置查询转换器。真正能把这套昂贵玩具用出性价比的,只有手握超大规模静态归档库、或者固定商品库且日均查询量高达数亿次的巨头——比如苹果自己装在数亿台终端里、随系统大版本才更新一次的端侧静态知识库。接下来最值得盯紧的变量有两个,一是苹果团队是否会修补开源仓库里的训练测试集切分漏洞并重跑基准分数,二是学术界能否在此基础上接出一套不需要推倒重训的动态增量索引补丁。
