【AI知识点】分层可导航小世界网络算法 HNSW(Hierarchical Navigable Small World)
HNSW(Hierarchical Navigable Small World)分层可导航小世界网络算法 是一种高效的近似最近邻搜索(Approximate Nearest Neighbor Search, ANN) 算法,特别适用于大规模、高维数据集的相似性检索。HNSW 基于小世界网络(small-world networks)原理,通过构建一个多层次的图结构,能够快速找到与查询点相似的数据点。它在实践中非常流行,广泛用于需要快速搜索高维数据的任务,例如图像检索、推荐系统、文本嵌入向量检索等。
1. HNSW的背景
在处理高维数据时,经典的最近邻搜索方法(如暴力搜索)由于计算复杂度高,在实际应用中效率低下。HNSW 通过引入一种基于图的结构,显著提高了近似最近邻搜索的效率,同时保持了较高的精度。HNSW 是一种改进的基于图的搜索方法,它借鉴了“小世界”网络的概念,即在图中任何两个节点之间都有相对较短的路径。
2. HNSW的核心思想
HNSW 的基本思路是将数据点组织成一个分层图结构,每一层的图结构代表数据的不同分辨率。在高层次,数据点的数量较少,连接关系较少,搜索效率较高。在底层,数据点的数量较多,连接关系更密集,能够更精确地找到最近邻。通过逐层导航和搜索,HNSW 能够快速找到与查询点最相似的点。
比喻解释:
可以将HNSW比作一个由多层城市地图组成的导航系统。最上层的地图展示了整个城市的概貌,虽然不详细,但能让你大致找到查询点所在的区域;随着你进入下一层,更详细的街道信息出现,你可以更精确地靠近目标;在最后的层次上,你甚至可以看到具体的建筑物,帮助你找到目标位置。这种从粗略到精细的导航过程帮助你快速找到目标,而不必从头到尾细致地搜索整个城市。
3. HNSW的工作原理
HNSW的结构和搜索过程可以分为两个阶段:构建图结构 和 搜索过程。
图结构和搜索过程可参考下图:
图片来源:https://www.pinecone.io/learn/series/faiss/hnsw/
a. 构建图结构
HNSW使用分层的图(network)来表示数据点。在最上层的图中,每个节点代表一个数据点,图中的连接稀疏;随着层数降低,图中的节点和连接变得更加密集。构建过程如下:
-
层次结构:
HNSW 将数据点分配到不同的层次。在较高层,数据点较少且连接较少,而在较低层,数据点较多且连接较密集。最上层的数据点数最少,搜索可以从这里开始逐层导航到更低层,直到找到最近邻。 -
基于随机化的层次分配:
每个数据点被分配到不同的层次是随机的。数据点的层数是根据某种随机分布(如泊松分布)确定的,较少的数据点会被分配到上层,而大多数数据点只会出现在较低的层次中。 -
小世界图结构:
每一层的图都符合“小世界”网络的特性:节点之间的连接既有局部的,也有较远距离的(跨越较长距离的跳跃连接)。这种结构保证了即使在高维空间中,也能通过少数几步找到相近的节点。 -
邻居选择:
在每一层,节点只会连接到与它距离较近的其他节点。这种邻居选择策略保证了图的连通性,同时限制了连接的数量,使得计算和存储效率更高。
b. 搜索过程
HNSW的搜索是一个从上到下的过程,即从最上层的稀疏图开始搜索,逐步进入下层的密集图。整个搜索过程如下:
-
从顶层开始:搜索从顶层的稀疏图开始。由于顶层节点较少,搜索过程可以快速找到一个与查询点相对接近的节点。
-
逐层导航:一旦在上层找到一个接近的节点,搜索会进入下一层更密集的图。在每一层,算法会在该层的邻居节点之间进行本地搜索,以找到更接近查询点的节点。
-
近邻搜索:在底层的密集图中,搜索的精度较高,可以更精确地找到查询点的近似最近邻。在这个过程中,使用启发式方法来选择要探索的节点,并限制需要访问的节点数量。
-
返回结果:搜索最终会在最底层找到一个或多个与查询点最相似的点,这些点就是近似最近邻。
4. HNSW的优势
HNSW在实践中非常有效,原因包括以下几个方面:
-
快速搜索:通过分层的小世界图结构,HNSW 能够以较低的时间复杂度完成近似最近邻搜索。它可以通过逐层导航,快速减少搜索空间,从而在大规模数据集中进行快速检索。
-
高精度:尽管 HNSW 是一种近似搜索方法,它的精度通常非常接近精确的最近邻搜索。这是因为在底层的密集图中,局部搜索非常精确。
-
可扩展性:HNSW非常适合处理大规模、高维数据集。随着数据集的增大,HNSW的搜索时间增长较慢,且它能够在线增量构建,即随着数据的加入,图结构可以动态更新。
-
灵活性:HNSW可以应用于不同的距离度量方法,包括欧几里得距离、余弦相似度等。
5. HNSW的缺点
尽管HNSW在大规模高维数据检索中表现非常好,但它也有一些局限性:
-
构建图的复杂度较高:与其他ANN算法相比,HNSW的图构建过程较为复杂,尤其是在处理非常大规模的数据集时,初始构建可能会消耗较多时间和资源。
-
内存占用较大:HNSW 通过存储分层的图结构,内存使用量会较大,特别是在处理高维、海量数据时,需要足够的内存来存储节点和连接信息。
6. HNSW的实际应用
HNSW由于其高效的搜索能力,已经被广泛应用于各种实际场景中:
-
推荐系统:在推荐系统中,HNSW可以快速找到与用户行为或兴趣相似的其他用户或物品,提供个性化的推荐。
-
图像搜索:HNSW能够快速处理高维图像特征向量,帮助图像搜索系统找到与查询图像相似的其他图片。
-
文本检索:HNSW可用于处理文本嵌入向量的相似性搜索,帮助自然语言处理系统快速找到语义相似的文本。
-
生物信息学:在生物信息学中,HNSW可以用于处理基因序列或蛋白质结构的相似性搜索。
7. HNSW与其他ANN算法的比较
-
与LSH(Locality Sensitive Hashing)相比:LSH通过哈希将相似的数据点映射到相同的桶中,而HNSW使用基于图的结构。相比之下,HNSW通常在精度和效率上优于LSH,特别是在处理高维数据时。
-
与KD树、Ball树相比:KD树和Ball树适合处理低维数据,但在高维数据上效率迅速下降。相比之下,HNSW在高维数据上表现得更好,具有更好的扩展性。
8. 总结
HNSW(Hierarchical Navigable Small World) 是一种基于分层图结构的高效近似最近邻搜索算法,它通过构建小世界图结构,在处理大规模、高维数据时实现了快速和高精度的搜索。它已在多个领域得到了广泛应用,如推荐系统、图像检索、文本相似性搜索等。尽管构建和内存开销较大,HNSW仍然是许多高维搜索任务中的首选算法之一。
相关文章:

【AI知识点】分层可导航小世界网络算法 HNSW(Hierarchical Navigable Small World)
HNSW(Hierarchical Navigable Small World)分层可导航小世界网络算法 是一种高效的近似最近邻搜索(Approximate Nearest Neighbor Search, ANN) 算法,特别适用于大规模、高维数据集的相似性检索。HNSW 基于小世界网络&…...

ubuntu图形界面右上角网络图标找回解决办法
问题现象: ubuntu图形界面右上角网络图标消失了,不方便联网: 正常应该是下图: 网络寻找解决方案,问题未解决,对于某些场景可能有用,引用过来: 参考方案 Ubuntu虚拟机没有网络图标或…...

maven安装本地jar包到本地仓库
有时候我们需要把本地的 jar 包 install 到本地的 maven 仓库,这时就需要手动install依赖项。例如,把下面的 zhdx-license-1.0.jar 安装到本地 maven 仓库的操作如下: <dependency><groupId>com.zhdx</groupId><artifa…...

1panel申请https/ssl证书自动续期
参考教程 https://hin.cool/posts/sslfor1panel.html #Acme 账户 #1panel.腾讯云dns账号 这里有一步不需要参考,腾讯云dns账号,就是子帐号授权 直接控制台搜索 访问管理 创建用户 授权搜索dns,选择第一个 点击用户名,去掉AdministratorAccess权限 5.点击api密钥生成即可…...

【C语言】指针篇 | 万字笔记
写在前面 在学习C语言过程,总有一个要点难点离不开,那就是大名鼎鼎的C语言指针,也是应为有指针的存在,使得C语言一直长盛不衰。因此不才把指针所学的所有功力都转换成这个笔记。希望对您有帮助🥰🥰 学习指…...

使用transformers调用owlv2实现开放目标检测
目录 安装Demo 安装 pip install transformersDemo from PIL import Image, ImageDraw, ImageFont import numpy as np import torch from transformers import AutoProcessor, Owlv2ForObjectDetection from transformers.utils.constants import OPENAI_CLIP_MEAN, OPENAI_…...

大数据技术:Hadoop、Spark与Flink的框架演进
大数据技术,特别是Hadoop、Spark与Flink的框架演进,是过去二十年中信息技术领域最引人注目的发展之一。这些技术不仅改变了数据处理的方式,而且还推动了对数据驱动决策和智能化的需求。在大数据处理领域,选择合适的大数据平台是确…...

Spring Boot框架下的新闻推荐技术
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...

相亲交友系统的社会影响:家庭结构的变化
随着互联网技术的发展,相亲交友系统已成为许多单身人士寻找伴侣的重要途径。这些平台不仅改变了人们的社交方式,还对家庭结构产生了深远的影响。本文将探讨相亲交友系统如何促使家庭结构发生变化,开发h17711347205并通过简单的Python代码示例…...

C++ 内存池(Memory Pool)详解
1. 基本概念 内存池是一种内存管理技术,旨在提高内存分配的效率。它通过预先分配一块大的内存区域(池),然后从中分配小块内存来满足应用程序的需求。这样可以减少频繁的内存分配和释放带来的性能开销。 2. 设计思路 内存池的设…...

css三角形:css画箭头向下的三角形
.arrow { position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-style: solid; border-width: 8px 5px 0 5px; /* 上、左、下、右 */ bord…...

CSS属性 - animation
一、基本概念 animation是 CSS 中的一个属性,用于将通过keyframes规则定义的动画应用到元素上。它是一种简写属性,能够在一个声明中设置多个动画相关的子属性。 二、语法结构 基本语法为: animation: name duration timing - function de…...

昇思MindSpore进阶教程--在ResNet-50网络上应用二阶优化实践(下)
大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 文章上半部分请查看 在ResNet-50网络上应…...

基于大数据的Python+Django电影票房数据可视化分析系统设计与实现
目录 1 引言 2 系统需求分析 3 技术选型 4 系统架构设计 5 关键技术实现 6 系统实现 7 总结与展望 1 引言 随着数字媒体技术的发展,电影产业已经成为全球经济文化不可或缺的一部分。电影不仅是艺术表达的形式,更是大众娱乐的重要来源。在这个背景…...

实景三维技术对光伏产业的发展具有哪些优势?
实景三维技术对光伏产业的发展具有显著的优势,主要体现在提高选址准确性、优化用地规划、促进数据融合应用以及赋能文旅服务领域。 提高选址准确性:通过构建高精度的三维地形模型,结合卫星遥感、无人机测绘等技术手段,实景三维…...

四非人的保研之路,2024(2025届)四非计算机的保研经验分享(西南交通、苏大nlp、西电、北邮、山软、山计、电科、厦大等)
文章目录 一、个人背景二、夏令营北京邮电大学CS西南交通大学CS深圳大学CS苏州大学NLP南开大学CS 三、预推免北京邮电大学CS华东师范大学 CS和大数据电子科技大学 CS东北大学 CS厦门大学 信息学院山东大学 CS和SE西安电子科技大学 CS 四、个人经验五、上岸 一、个人背景 学校专…...

UE5.4.3 录屏回放系统ReplaySystem蓝图版
这是ReplaySystem的蓝图使用方法版,以第三人称模版为例,需要几个必须步骤 项目config内DefaultEngine.ini的最后添加: [/Script/Engine.GameEngine] NetDriverDefinitions(DefName"DemoNetDriver",DriverClassName"/Script/…...

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!
计算机视觉领域顶级会议 European Conference on Computer Vision(ECCV 2024)将于9月29日至10月4日在意大利米兰召开,快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…...

9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解
目录 Redis入门 Redis简介 Redis服务启动与停止 服务启动命令 Redis数据类型 5种常用数据类型介绍 各种数据类型的特点 Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在java中操作Redis Redis的Java客户端 …...

【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操…...
Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!
Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world! (1)首先需要安装apache httpd 2.4 web服务器: Windows安装启动apache httpd 2.4 web服务器-CSDN博客文章浏览阅读222次,点赞5次&…...

Spring框架使用Api接口实现AOP的切面编程、两种方式的程序示例以及Java各数据类型及基本数据类型的默认值/最大值/最小值列表
一、Spring框架使用Api接口-继承类实现AOP的切面编程示例 要使用Spring框架AOP,除了要导入spring框架包外,还需要导入一个织入的包org.aspectj,具体maven依赖如下: <dependency><groupId>org.springframework</gr…...

【达梦数据库】尽可能 disql 的使用效果与异构数据库一致
文章目录 前言disql 效果优化参数设置参数说明 mysql参数设置参数说明 db2参数设置参数说明 待补充 前言 让达梦的disql 使用起来更跟手,与其他优质数据库的命令行工具通过配置参数的方式尽可能一致,提高使用体验,长期整理中~~~ 测试版本&…...

【研1深度学习】《神经网络和深度学习》阅读笔记(记录中......
9.27 语义鸿沟: 是指输入数据的底层特征和高层语义信息之间的不一致性和查一下。如果可以有一个好的表示在某种程度上能够反映出数据的高层语义特征,那么我们就能相对容易的构建后续的机器学习模型。嵌入(Embedding):…...

十一不停歇-学习ROS2第一天 (10.2 10:45)
话题通信 1.1 发布第一个节点: import rclpy #导入此类模块 rcl类型 from rclpy.node import Node #从这个子模块中导入这类函数 def main(): #定义这个函数 rclpy.init() #使用初始化函数 node Node(hello_python) 将类函数里面的内容调给…...

Java高效编程(14):考虑实现 `Comparable
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 与其他方法不同,compareTo 并非 Object 类中声明的,而是 Comparable 接口的唯一方法。compareTo 方法与 equals 类似,但它不仅支持相等性比较,还允许顺序…...

华为昇腾CANN训练营2024第二季--Ascend C算子开发能力认证(中级)题目和经验分享
大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文开始 华为昇腾CANN训练营2024第二季…...

实战OpenCV之形态学操作
基础入门 形态学操作是一种基于图像形状的处理方法,主要用于结构分析,比如:边缘检测、轮廓提取、噪声去除等。这些操作通常使用一个称为“结构元素”(Structuring Element)的核来进行,结构元素可以是任何形状,但最常见的有矩形和圆形。形态学操作的核心在于通过结构元素…...

矩阵的特征值和特征向量
矩阵的特征值和特征向量是线性代数中非常重要的概念,用于描述矩阵对向量的作用,特别是在矩阵对向量的线性变换中的表现。它们帮助我们理解矩阵在某些方向上的缩放或旋转效果。 1. 特征值和特征向量的定义: 给定一个 n n n \times n nn 的…...

(11)MATLAB莱斯(Rician)衰落信道仿真2
文章目录 前言一、莱斯衰落信道仿真模型二、仿真代码与结果1.仿真代码2.仿真结果画图 三、后续:四、参考文献: 前言 首先给出莱斯衰落信道仿真模型,该模型由直射路径分量和反射路径分量组成,其中反射路径分量由瑞利衰落信道模型构…...