Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索

news2025/1/12 10:39:11

作者:来自 Elastic Tommaso Teofili

了解如何使用智能提前终止策略让 HNSW 加快 KNN 搜索速度。

在高维空间中高效地找到最近邻的挑战是向量搜索中最重要的挑战之一,特别是当数据集规模增长时。正如我们之前的博客文章中所讨论的,当数据集规模有限时,强力(brute force)最近邻搜索可能是最佳选择。另一方面,随着向量数据集规模的增加,切换到近似最近邻搜索有助于在不牺牲准确性的情况下保持查询速度。

Elasticsearch 通过分层可导航小世界算法(Hierarchical Navigable Small World algorithm)实现近似最近邻搜索。HNSW 提供了一种有效的向量空间导航方法,降低了计算成本,同时仍保持了较高的搜索准确性。特别是,它的分层结构使得能够访问候选邻居并决定是否将它们包含在最终结果集中,同时减少向量距离计算。

然而,尽管 HNSW 算法有其优势,但它可以进一步优化以适应大规模向量搜索。提高 HNSW 性能的一种有效方法是找到在特定情况下停止访问图的方法,这称为提前终止。这篇博文探讨了 HNSW 的提前终止概念以及它们如何优化查询执行。

HNSW 中的冗余

HNSW 是一种近似最近邻算法,它构建一个分层图,其中节点表示向量,边表示向量空间中向量之间的接近度。每层都包含越来越多的图节点。查询时,搜索会遍历此图,从随机入口点开始,然后通过各层导航到最近的邻居。

搜索过程是迭代的,随着检查更多节点和向量而扩展。速度和准确性之间的平衡是 HNSW 的核心,但它仍然会导致冗余计算,尤其是在涉及大型数据集时。

在 HNSW 中,冗余计算主要发生在算法继续评估新节点或候选节点时,这些节点或候选节点在查找查询的实际邻居方面几乎没有任何改进。发生这种情况的原因是,在标准 HNSW 遍历中,算法逐层进行,探索和扩展候选节点,直到所有可能的路径都用尽。

具体来说,当数据集包含高度相似或重复的向量、具有密集簇内连接的簇或具有很少内在结构的高维空间中的向量时,可能会出现这种冗余。这种冗余会导致访问不必要的边,增加内存使用量,并可能降低搜索性能而不会提高准确性。在相似度得分快速衰减的高维空间中,一些边(edges)通常无法在图中提供有意义的捷径,从而导致导航路径效率低下。

因此,如果在遍历图时可以执行大量不必要的计算,则可以尝试改进 HNSW 算法以缓解此问题。

提前终止 FTW

导航解决方案空间是优化和搜索算法中的一个基本概念,其目标是在一组可能的解决方案中找到最佳解决方案。解决方案空间代表给定问题的所有潜在解决方案,导航它涉及系统地探索这些可能性。这个过程可以可视化为通过一个图移动,其中每个节点代表一个不同的解决方案,目标是确定最符合问题标准的节点。了解如何有效地导航解决方案空间对于解决具有大量解决方案的复杂问题至关重要。提前终止是一种通用的优化策略,可以应用于任何此类算法,以在特定情况下做出何时停止搜索解决方案的明智决定。

如果任何解决方案被认为 “足够好” 以满足期望的标准,则可以停止搜索,并且该解决方案可以被视为良好候选或最佳解决方案。这意味着一些潜在的更好的解决方案可能仍未被探索,因此很难在最终解决方案的效率和质量之间找到完美的折衷方案。

HNSW 中的提前终止

在 HNSW 中,提前终止可用于在完全评估所有潜在候选节点(向量)之前停止搜索过程。评估候选节点意味着计算查询向量与正在处理的图中节点对应的向量之间的实际相似度;因此,在遍历每一层时跳过一堆这样的操作,可以大大降低查询的计算成本。

另一方面,跳过原本会产生真正最近邻居的候选节点肯定会影响搜索结果的质量,可能会遗漏一些接近查询向量的候选向量。

因此,效率收益和准确度损失之间的权衡需要谨慎处理。提前终止在以下情况下很有用:

  • 次线性效率(Sublinear Efficiency):你希望优化性能以换取略低的召回率。
  • 高吞吐量系统(High-Throughput Systems):更快的响应时间比最高的准确度更有价值。
  • 资源限制(Resource Constraints):计算或内存限制使得无法完全遍历 HNSW 图。

在 HNSW 的上下文中,有多种选项可用于实施提前终止策略。

  1. 固定候选池大小:最简单的提前终止策略之一是限制候选池的大小(例如,搜索期间评估的节点数)。在 HNSW 中,搜索过程是迭代的,随着搜索的进行,会扩展到更多节点。通过设置考虑的候选数限制,我们可以提前终止搜索并仅根据整个图的子集返回结果。当然,这可以以分层方式实现,也可以考虑整个图中的所有节点。
  2. 基于距离阈值的终止:另一种可能有效的提前终止策略是根据查询向量与对应于 HNSW 节点的向量之间的距离计算做出明智的决策。可以根据查询向量与当前最近向量之间的距离设置阈值。如果发现距离低于指定阈值的向量,则可以提前停止搜索,假设进一步探索不太可能产生更好的结果。这与对节点以智能顺序访问的事实的限制相辅相成,以避免遗漏可能相关的邻居。
  3. 基于质量估计的动态提前终止:一种更复杂的方法是根据每次搜索查询期间发现的结果的 “质量” 动态调整终止标准。如果搜索过程快速收敛到高质量邻居(例如,距离非常近的邻居),算法可以提前终止,即使没有达到预定义的阈值。

前两种策略属于 “固定配置” 提前终止策略类别,即搜索根据固定约束条件终止,而不考虑特定查询的复杂性。实际上,并非所有查询的难度都是相同的。例如,当向量分布不均衡时,一些查询需要访问更多候选项。一些查询向量可能落入向量空间中的密集区域,因此它们拥有更多的候选最近邻;而另一些查询可能落入“稀疏区域”,这使得找到其真正的最近邻更加困难。

由于这种情况,能够适应向量空间密度(从而适应 HNSW 图的连通性)的提前终止策略似乎更适合实际场景。因此,确定停止搜索每个查询的最佳点更有可能在不影响准确性的情况下大幅减少延迟。这种类型的提前终止策略被称为自适应策略,因为它们会适应每个查询实例来决定何时终止搜索过程。

例如,自适应提前终止策略可以利用机器学习模型来预测给定查询需要多少搜索工作才能达到所需的准确性。这样的模型会根据单个查询的特征和中间搜索结果动态调整要探索的图的范围。

说到中间搜索结果,它们通常是进一步搜索的有力预测因素。如果初始结果已经接近查询,则可能很快就会找到最近的邻居,从而允许提前终止。相反,较差的初始结果表明需要进行更广泛的探索(参见本文)。

Lucene 可以通过 KnnCollector 接口实现 HNSW 的提前终止,该接口公开了 earlyTerminated() 方法,但它还为 HNSW 提供了几个固定配置的提前终止策略:

  1. TimeLimitingKnnCollector 可以在达到特定时间阈值时停止 HNSW 图遍历。
  2. AbstractKnnCollector 是一个基本的 KnnCollector 实现,一旦访问了固定数量的图节点,它就会停止图遍历。

作为另一个示例,为了实现基于距离阈值的终止,我们可以依赖 Lucene 在 HNSW 遍历期间记录的最小竞争相似性(用于确保只探索竞争节点),并在其低于给定阈值时提前退出。

public class MCSEarlyExitCollector implements KnnCollector {

  private final KnnCollector delegate;
  private final double mcsThreshold;

  public MCSEarlyExitCollector(KnnCollector delegate, double mcsThreshold) {
    this.delegate = delegate;
    this.mcsThreshold = mcsThreshold;
  }

  @Override
  public boolean earlyTerminated() {
    return delegate.earlyTerminated() || minCompetitiveSimilarity() < mcsThreshold;
  }

  ...
}

结论

如果正确实施,近似 KNN 的提前终止策略可以显著提高速度,同时保持良好的准确性。固定策略更容易实施,但它们可能需要更多调整,并且在不同的查询中效果不佳。另一方面,动态/自适应策略更难实施,但具有能够更好地适应不同搜索查询的优势。

Elasticsearch 包含新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。

原文:Early termination in HNSW for faster approximate KNN search - Elasticsearch Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时空笔记:CBEngine(微观交通模拟引擎)

CBEngine 是一个微观交通模拟引擎&#xff0c;可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…

Notepad++上NppFTP插件的安装和使用教程

一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP&#xff0c;一般情况下&#xff0c;自带的下载地址容易下载失败。这里准备了一个下载连接&#xff1a;Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…

基于华为ENSP的OSPF不规则区域划分深入浅出(5)

本篇技术博文摘要 &#x1f31f; OSPF不规则区域划分及其问题解决方案涉及多个技术手段&#xff0c;包括隧道、虚链路和路由重发布等。合理的网络设计和配置对于避免网络中出现的环路问题至关重要。通过多进程双向重发布等方式&#xff0c;能够有效地优化路由协议的互通性和网络…

微信小程序——创建滑动颜色条

在微信小程序中&#xff0c;你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例&#xff0c;展示了如何实现一个颜色滑动条&#xff0c;该滑动条会根据滑动位置改变背景颜色。 步骤一&#xff1a;创建小程序项目 首先&#xff0c;使用微信开发者工具创建一个新…

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中&#xff0c;我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤&#xff0c;但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式&#xff08;Template Method Design Pattern&#xff09;就为解决这类问题提供了…

Chrome_60.0.3112.113_x64 单文件版 下载

单文件&#xff0c;免安装&#xff0c;直接用~ Google Chrome, 免費下載. Google Chrome 60.0.3112.113: Chrome 是 Google 開發的網路瀏覽器。它的特點是速度快,功能多。 下载地址: https://blog.s3.sh.cn/thread-150-1-1.htmlhttps://blog.s3.sh.cn/thread-150-1-1.html

EXCEL: (二) 常用图表

10. 图表 134-添加.删除图表元素 图表很少是一个单独的整体&#xff0c;而是由十几种元素/对象拼凑出来的。 学习图表就是学习当中各类元素的插删改。 ①图表中主要元素的定义 图表上的一个颜色就是一个系列&#xff0c;每个系列都对应原数据中的一列/一行值数据。 每个系…

Transformer:深度学习的变革力量

深度学习领域的发展日新月异&#xff0c;在自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域取得了巨大突破。然而&#xff0c;早期的循环神经网络&#xff08;RNN&#xff09;在处理长序列时面临着梯度消失、并行计算能力不足等瓶颈。而 Transformer 的横空出世&am…

jenkins入门13--pipeline

Jenkins-pipeline(1)-基础 为什么要使用pipeline 代码&#xff1a;pipeline 以代码的形式实现&#xff0c;通过被捡入源代码控制&#xff0c; 使团队能够编译&#xff0c;审查和迭代其cd流程 可连续性&#xff1a;jenkins 重启 或者中断后都不会影响pipeline job 停顿&#x…

深度学习的原理和应用

一、深度学习的原理 深度学习是机器学习领域的一个重要分支&#xff0c;其原理基于多层神经网络结构和优化算法。以下是深度学习的核心原理&#xff1a; 多层神经网络结构&#xff1a;深度学习模型通常由多层神经元组成&#xff0c;这些神经元通过权重和偏置相互连接。输入数据…

Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)

1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…

netty请求行超出长度

说明&#xff1a;记录一次使用Netty异常&#xff0c;如下&#xff1a; 错误信息&#xff1a;An HTTP line is larger than 4096 bytes. 场景 项目是微服务架构&#xff0c;在使用Netty转发请求到其他服务的时候报了这个错误。因为该请求是GET方式&#xff0c;其中有个参数值是…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包

关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 创建文件 格式&#xff1a; touch 文件名 删除文件 复制文件 移动文件 查看文…

【计算机网络】lab3 802.11 (无线网络帧)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除

在碳钢精密加工的最后阶段&#xff0c;去除毛刺是确保产品质量的关键步骤。面对碳钢这种硬度较高的材料&#xff0c;采用大扭矩的SycoTec去毛刺主轴&#xff0c;成为了行业内的高效解决方案。SycoTec作为精密加工领域的领军品牌&#xff0c;其生产的高速电主轴以其卓越的性能&a…

【漫话机器学习系列】042.提前停止训练的优势(Early Stopping Advantages)

提前停止训练&#xff08;Early Stopping&#xff09;的优势 提前停止是一种有效的正则化技术&#xff0c;在训练模型时通过监控验证集的性能来决定训练的结束点&#xff0c;从而避免过拟合。以下是提前停止的主要优势&#xff1a; 1. 防止过拟合 提前停止通过在验证集性能开…

ROS2快速入门0--节点

0:安装 wget http://fishros.com/install -O fishros && . fishros1:运行第一个机器人 ros2 run turtlesim turtlesim_node使用方向健进行控制(在另一个终端) ros2 run turtlesim turtle_teleop_key 2原理解析 打开另一个终端-->输入rqt-->Plugins-->Intr…

10.STM32F407ZGT6-内部温度传感器

参考&#xff1a; 1.正点原子 前言&#xff1a; 本笔记的主要目的和意义就是&#xff0c;再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器&#xff0c;可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说&#xff0c;该温度传感器在…

新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解

首次突破月交付2万辆规模的小鹏汽车&#xff0c;稳吗&#xff1f; 本周&#xff0c;高工智能汽车研究院发布的最新监测数据显示&#xff0c;2024年11月&#xff0c;小鹏汽车在国内市场&#xff08;不含出口&#xff09;交付量&#xff08;上险口径&#xff0c;下同&#xff09…