[控场AI]
· 4 分钟阅读· 2,358 字

Meta FAIR发布e-means:k-means新替代,收敛快十倍

Meta FAIR发布e-means:k-means新替代,收敛快十倍

Meta FAIR 在 FAISS 1.16.0 中用 e-means 替代 mini-batch k-means,迭代轮数减少约一个数量级、GPU 加速 10 到 45 倍且不增超参数。

Meta FAIR 在 FAISS 1.16.0 中引入 e-means 算法,作为 mini-batch k-means 的直接替代品,用于向量检索与聚类预处理中的 k-means 计算。官方数据显示,达到 Lloyd 算法 25 个 epoch 同等损失水平,e-means 仅需 1.4 到 2.6 个 epoch,迭代轮数减少约一个数量级,在 GPU 上带来 10 到 45 倍加速,且不引入任何新超参数,已有管线可零配置切换。文章指出,该对比衡量的是达到同等聚类质量的代价而非单步速度;10 到 45 倍的区间说明收益与数据分布、簇数、批大小相关。由于 FAISS 是向量检索基础设施,此次改动随版本升级直达现有用户,对索引构建等场景的吞吐影响直接,但上线前仍应自行基准测试并验证初始化稳定性。

Meta FAIR 在 FAISS 1.16.0 中引入了一个名为 e-means 的新算法,用来替代传统的 mini-batch k-means。按照官方描述,它达到 Lloyd 算法 25 个 epoch 同等损失水平只需要 1.4 到 2.6 个 epoch,在 GPU 上带来 10 到 45 倍的加速,而且不需要引入任何新的超参数。对于一个在向量检索、聚类预处理中被反复调用的基础算子来说,这类改动的影响面往往比表面数字更广。

Meta FAIR 发布 e-means

e-means 到底改了什么

k-means 是机器学习里最古老的算法之一,Lloyd 迭代至今仍是绝大多数聚类流程的默认选择。它的瓶颈很明确:每轮迭代都要把所有样本分配给最近的簇中心,再重新计算中心,样本量大、簇数多时开销急剧上升。mini-batch k-means 通过每次只用一小批样本估计梯度来缓解这个问题,但收敛速度依然受限于批大小和迭代轮数。

e-means 的定位是直接替换 FAISS 中的 mini-batch k-means 实现。从公开信息看,它没有引入需要调参的新超参数,这意味着已有管线可以在不改动配置的情况下切换。对工程团队来说,这比单纯的加速更有吸引力——调参成本往往才是隐性的大头。

Lloyd 算法即经典的 k-means 迭代流程,由两个交替步骤构成:E 步将每个样本分配给欧氏距离最近的簇中心,M 步把每个簇的中心更新为该簇所有样本的均值。该算法保证每轮迭代后目标函数(簇内平方误差和,inertia)单调不增,因而必然收敛到局部最优。其代价是每轮都要遍历全部 N 个样本并计算与 K 个中心的距离,复杂度为 O(NKd),d 为向量维度;当 N 达到千万级以上、K 上千时,单轮开销和所需轮数都会成为瓶颈。Lloyd 对初始化敏感,通常配合 k-means++ 初始化来改善结果,这也是后文提到“聚类结果对初始化敏感”这一共性问题的来源。

收敛速度的量级差异

官方给出的对比基准是 Lloyd 算法跑到 25 个 epoch 时的损失值。e-means 在 1.4 到 2.6 个 epoch 内就能达到同一损失水平。换句话说,同样的聚类质量,迭代轮数减少了一个数量级左右。

这个对比的意义在于它衡量的是"达到同等质量所需的代价",而不是某一轮的绝对速度。聚类算法的实际使用中,用户关心的往往不是单步耗时,而是跑完整个流程需要多久、结果够不够好。以这个口径衡量,10 到 45 倍的 GPU 加速才有参考价值。

需要说明的是,这个加速区间跨度不小,说明实际收益与数据分布、簇数量、批大小等条件相关,并非所有场景都能拿到上限。

mini-batch k-means 由 Sculley 于 2010 年提出,核心是用小批量样本对簇中心做随机梯度式更新:每轮只抽取 batch 个样本,将其分配到最近中心并按照学习率(通常取该中心已累计样本数的倒数)把中心向批内均值移动。相比 Lloyd 每轮全量扫描,它显著降低了单轮计算量,但收敛速度受批大小和学习率调度影响,且结果带有随机性。所谓 epoch,在这里指完整遍历一遍训练集所对应的计算量;把“达到某损失所需的 epoch 数”作为比较口径,可以消除单步耗时差异,较公平地衡量算法在同等计算预算下的收敛效率。

为什么这件事值得关注

k-means 在工业界的出场频率极高:向量数据库的索引构建、图像检索的特征量化、推荐系统的用户分群、甚至大模型训练数据去重,背后都可能有它在跑。FAISS 本身是 Meta 开源的高性能相似性搜索库,被大量向量检索系统当作基础设施使用。把 e-means 直接放进 FAISS 1.16.0,等于把这个优化送到了现有用户的升级路径上,而不是停留在论文里。

从算法演进的角度看,这属于"在老问题上做工程级改进"的典型:没有更换问题框架,而是在收敛效率上做文章。这类工作不容易成为热点,但对实际系统的吞吐影响直接。

FAISS(Facebook AI Similarity Search)是 Meta 开源的高性能向量相似性检索库,提供 Flat、IVF、HNSW、PQ 等多种索引结构,广泛用于十亿级向量的近邻搜索。其中 IVF 类索引在构建时需要先对底库向量做 k-means 聚类,把向量划分到若干倒排桶(Voronoi 单元),聚类质量与速度直接影响索引构建时间和检索召回率。正因如此,k-means 在 FAISS 中是构建阶段的高频热点算子,替换其实现能直接缩短索引构建的墙钟时间,这也是该改动对现有用户影响面较大的原因。

使用时的几个判断点

e-means 不增加超参数,降低了迁移门槛,但仍需注意几点。第一,加速比是区间值而非固定值,上线前应针对自己的数据规模做基准测试,而不是直接套用宣传数字。第二,替代的是 mini-batch 实现,如果你的场景本来就用全量 Lloyd 且数据量不大,收益可能有限。第三,聚类结果对初始化敏感这一 k-means 家族的共性问题,公开信息中没有说明 e-means 是否做了针对性处理,需要在实际使用中验证稳定性。

总体来看,e-means 是一个低迁移成本、高潜在收益的替换选项。对于已经把 FAISS 作为基础设施的团队,升级到 1.16.0 后做一次 A/B 对比是合理的下一步。对于还在用其他 k-means 实现的团队,这个信号也值得留意:基础算子的效率改进正在持续发生,定期重新评估默认选择是有回报的。

#e-means#Meta FAIR#FAISS 1.16.0#k-means 替代#聚类算法加速#mini-batch k-means#向量检索
分享:

相关推荐