HNSW-分层可导航小世界 算法学习

news/2024/5/5 12:55:49/文章来源:https://blog.csdn.net/baoyan2015/article/details/133994788

一、knn的缺陷

1. K-NN方法的工作机制

K-Nearest Neighbors (K-NN) 是一种基于实例的分类方法。它通过逐一比较新样本与已有样本的相似度,挑选出与新样本最接近的k个已有样本,然后根据这些样本的类别,通过投票或加权的方式来决定新样本的类别。此外,K-NN也可以应用于回归预测。在已有样本数量充足的情况下,K-NN能够取得良好的效果。研究表明,K-NN的泛化错误率不会超过贝叶斯错误率(理论最优错误率)的两倍。

2. K-NN方法的特征空间和相似度度量

K-NN方法通常使用特征空间中两个样本之间的距离(如欧氏距离、曼哈顿距离、内积等)来度量它们的相似度。这实际上假设了训练样本中每一维特征的重要性是相同的。然而,在许多情况下,样本的每一维特征对分类(或回归)问题的影响并不相同,且各维特征的数值尺度也可能不一致。因此,在应用K-NN方法时,首先需要找到合适的相似度度量方式。这需要根据实际问题进行具体的特征分析处理。

3. K-NN方法的计算复杂度和优化

虽然K-NN方法没有显式的学习过程,但在确定新样本的类别时,需要计算新样本与每一个已知样本的距离并找出前k个近邻,这在高维度的大数据集上的计算复杂度非常高。为了提高检索效率,研究人员设计了各种快速逼近最近邻(ANN)算法,如kd-tree、flann、annoy、FAISS、MRPT、KGraph、hnswlib等。在相同搜索速度(每秒查询次数,Queries/second)下的召回率(Recall)来衡量,HNSW具有最优异的性能。

4. HNSW算法的特性和应用

HNSW(Hierarchical Navigable Small World,分层可导航小世界)是一种基于图的ANN算法。HNSW利用了小世界网络的特性,即从局部看同类节点的连接呈现出规则性,从全局看不同类节点的连接呈现出随机性,来实现图的高效搜索。HNSW的编程非常简洁,特别是在mutex、lock的应用方面非常熟练,具有很高的并行性能,可以作为并行开发的参考范例。当然,程序中也存在一些可以优化的地方,如对priority_queue的应用、data_level0_ memory结构中的label的使用等。

二、基本概念

在深入探讨NSW和HNSW之前,我们需要先理解小世界网络和随机图的基本概念,这将有助于我们理解为何NSW能有效进行近邻搜索。

1. 规则图与随机图

在图论中,规则图的定义是:所有顶点的度数相同的图被称为规则图。如果每个顶点的度数都是k,那么这个图就被称为k-规则图。

而随机图则是在随机过程中生成的图,也就是说,节点之间的连接是随机建立的。

规则图与随机图的比较

在规则图中,当聚类系数接近饱和时,聚类系数较高,平均路径也较短,但此时节点的度数较高。

相比之下,随机图的节点聚类系数较低,节点的度数也较低。

2. 小世界网络

在了解了随机图和规则图之后,我们来看一下小世界网络。

1967年,Stanley Milgram从Kansas和Nebraska两个州招募了一批志愿者,他们的任务是将一封信转寄给一个住在Cambridge神学院的学生的妻子和一个住在Boston郊区的股票经纪人。

他给志愿者们设定了这样的规则:

虽然他们知道收信人的一些信息,但除非他们与收信人有私人关系,否则不能直接将信寄给收信人。

每次只能将信寄给最有可能认识收信人的熟人。

在信封中,有15张追踪卡片,每次转寄都需要将一张卡片寄回给实验者,其余的卡片则放在信封中寄给下一个人。这样,研究员就能随时追踪信件的传递路径。

在成功送达的信件中,Stanley Milgram计算出信件平均需要经过5个节点才能送达,也就是说,我们与一个陌生人建立联系只需要6步。

基于这个实验,Stanley Milgram提出了著名的“六度分离”理论。这个理论指出:

现实世界中的短路径是普遍存在的。

人们可以有效地找到并利用这些短路径。

在小世界网络中,节点之间的关系可以分为两种:

同质性:相似的节点会聚集在一起,形成邻接边。

弱连接:每个节点都会有一些随机的边连接到网络中的其他节点,这些节点是随机均匀分布的。

3. 三者的关系

有研究表明,小世界网络介于规则图和随机图之间,随着随机性的增加,规则图会呈现出小世界的特性。

我们可以这样理解:在小世界网络中,局部的同类节点连接呈现出规则性,而从全局来看,不同类节点的连接呈现出随机性。这两种特性正是我们之前提到的同质性和弱连接。

可导航小世界网络的基本原理如下图所示:

在NSW算法中,我们构建一个小世界网络,通过黑色的近邻边来寻找最近邻节点,通过红色的长边(类似于高速公路)来实现不同类节点之间的快速检索。

1. 图的搜索

在理解了NSW的基本思路后,我们来看一下在NSW中如何查找整个图中的K个最近邻节点。

K近邻搜索

在NSW中,K近邻搜索的过程如下:

随机选择一个元素,将其放入candidates集合中。

从candidates集合中选取最近邻节点c,将这些元素的邻居节点放入q集合中。

从candidates集合中移除最近邻节点c。

如果c的距离远大于result集合中的第k个节点,跳出循环。

否则,对于c的每个邻居节点,遍历其邻居,如果没有在visited set里面。

将e加入到visited set, candidates, tempRes。

遍历完成candidate中所有的节点后,将tempRes的结果传入到result。

重复执行上述步骤m遍, 返回result中最优的k个近邻结果。

2. 图的构建

根据NSW的原理,我们希望NSW的局部节点之间的距离具有同质性(即近邻节点能够相互连接)。这样当我们检索到一个近邻节点时,其大部分近邻节点都是近邻节点。同时,我们也希望保留一些随机边,以便在不同区域之间快速跳转。

那么,我们如何构建一个既具有同质性又具有随机性的小世界网络呢?

Delaunay 三角剖分  技术分享:Delaunay三角剖分算法介绍 - 知乎

为了使相邻的点在空间距离上相近,我们引入Delaunay三角剖分,相关的定义如下

Delaunay 边

在点集 V中存在两点 a 和 b,圈内不包含点集 V中的任何其他点。这个特质被称为空圈特质。

节点 a 和节点 b连接起来的边称为Delaunay边。

Delaunay 三角剖分

如果一个点集 V 的三角剖分 T 都只包含 Delaunay边,那么该三角剖分称为Delaunay剖分。

NSW节点的插入

在构建图的过程中,理论上我们应该对所有的点进行Delaunay三角剖分,然后添加一些随机的长边以构建快速检索通道,从而构建一个可导航的小世界网络。

但由于构建Delaunay三角剖分的复杂度过高,实际的代码实现过程中我们通过节点随机插入来引入随机性,利用已有节点构建Delaunay边来引入同质性。

NSW的网络构建过程如下:

在候选节点V里面随机挑选一个节点vi

将节点vi插入到已经构建好的图中,并构建边。

边构建的规则:找到节点vi最近邻的 f个邻居,建立vi和这些邻居的边连接。

在构建NSW图结构的时候,在局部通过寻找 f个最近邻来建立类似于Delaunay三角剖分的结构,

在全局通过随机顺序插入,引入随机边从而使得所以具备可导航小世界的特性。

3. 分层可导航小世界模型

在可导航小世界模型(NSW)中,图的构建阶段通过随机插入节点来引入随机性,形成一个类似小世界的网络结构。然而,NSW中存在一些显著的问题。

3.1 NSW模型的问题

  1. 对于最早插入的节点,其连接的邻居节点通常较远,表现出较强的弱连接属性。
  2. 对于最后插入的节点,其连接的邻居节点通常较近,表现出较弱的弱连接属性。
  3. 对于具有聚类效应的节点,由于后续插入的节点可能都与其建立连接,因此该节点的度可能较高。

这些问题引发了一个疑问:如何在继承NSW基于长链接进行快速检索,短链接具有聚类特性的思想的同时,使查找更稳定,或者如何有效区分长链接和短链接的查找。为此,引入了分层图的概念。

3.2 分层可导航小世界模型(HNSW)

HNSW是在NSW的基础上进行优化的结果,其引入了层级的概念,总体思想如下:

  1. 在Layer = 0层中,包含了连通图中所有的节点。
  2. 随着层数的增加,每一层的节点数逐渐减少并且遵循指数衰减定律。
  3. 图节点的最大层数,由随机指数概率衰减函数决定。
  4. 从某个点所在的最高层往下的所有层中均存在该节点。
  5. 在对HNSW进行查询的时候,从最高层开始检索。

3.3 HNSW的查询

HNSW的查询阶段包括以下几个算法:

  1. SEACHER-LAYER: 在指定层查询K个最近邻节点。
  2. SELECT-NEIGHBORS-SIMPLE: 简单的查找某一层最近的邻居节点。
  3. SELECT-NEIGHBORS-HEURISTIC: 探索式查找某一层最近的邻居节点。
  4. K-NN-SEARCH: 从所有候选结果中找出K个最近邻结果。

HNSW通过一个随机函数,将所有的点划分到不同层次,越往上节点数越少,边越少。这种情况下节点和节点之间寻找最近邻居的距离也就越远。因此在从上到下检索的过程中,先通过长链接找到全局可能的最近节点,然后往下层以该节点为入口进一步做局部检索。

4. 总结

本文主要介绍了NSW和HNSW的算法原理。NSW算法基于六度分离理论将小世界的特性用于近邻检索,提出了基于图结构的检索方案。在NSW的基础上,HNSW利用多层的图结构来完成图的构建和检索,使得通过将节点随机划分到不同的层,从上层图到下层图的检索中,越往下层节点之间的距离越近, 随机性也越差,聚类系数越高。HNSW通过从上到下的检索,完成了NSW中长链接高速公路快速检索的作用,通过最后底层的近邻检索,完成局部最近邻的查找。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

塔望3W消费战略全案丨轻食植物基,突围侧翼战

植鲜生 客户:民强(昆山)食品科技有限公司 品牌:植鲜生 时间:2021年起 项目部分内容保密期 突破传统植物基禁锢 破局轻食新赛道 民强(昆山)食品科技有限公司是一家集研发、生产、销售为一体…

VLAN互通

文章目录 VLAN互通2种方法单臂路由实现VLAN互通TOP图配置-LSW配置-Router1测试:PC1PC2 VLANIF(更受欢迎)TOP图LSW2配置测试PC1 VLAN互通2种方法 单臂路由实现VLAN互通 TOP图 名称IPGatewayPC1192.168.1.1/24192.168.1.254PC2192.168.2.1/24192.168.2.254 名称VLA…

软设上午题错题知识点8

软设上午题错题知识点8 1、IPv4用32位二进制表示,能够表示的地址空间是232,IPv6用128位二进制表示,能够表示的地址空间是2128,本题选择2128 /232296 。 2、在应用散列函数构造哈希表(或散列表)时&#xf…

AI智慧安防智能监控平台EasyCVR隔天设备录像播放失败是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTMP、RTSP、HTTP-FLV、…

Ubuntu 下 VSCode Tab 间距非常小解决方案

Ubuntu 的 Tag 键很小,不利于阅读代码,检查 Tab Size 配的也没问题,也是4 解决方案为: 进入 设置-> 字体,把 红框中的 ‘Droid Sans Mono’, 删了 修改后如下: 再次回到代码界面,可以…

品牌公关稿件怎么写?纯干货

品牌公关稿件成为了各大企业传播价值观、提升品牌形象的重要手段。然而,如何撰写一篇高质量的、吸引人的品牌公关稿件却让许多人头疼不已。本文伯乐网络传媒将从选题、结构、语言、传播等方面,为您详细解析品牌公关稿件的写作技巧,帮助您轻松…

软考-流量分析

扫描技术是网络攻防的一种重要手段,在攻和防当中都有其重要意义。nmap是一个开放源码的网络扫描工具,可以查看网络系统中有哪些主机在运行以及哪些服务是开放的。 nmap工具的命令选项:sS 用于实现SYN扫描,该扫描类型是通过观察开放端口和关闭…

打包Qt程序,自动添加依赖的库和文件(详细步骤)

1、打开对应版本的命令面板,选择即可: 一般安装qt的时候,都会自带的 2、进入到编译成功的程序所在的目录: 输入:windeployqt XXX.exe(实际的程序名字) 这样这个程序所依赖的库都会自动添加进来…

【计算机网络】UDP的报文结构和注意事项

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的协议,它在传输层中提供了简单、不可靠的数据传输服务。与TCP(Transmission Control Protocol,传输控制协议)不同,UDP不需要建立连接&…

未能为 SSL/TLS 安全通道建立信任关系

在 Windows早期版本(Windows server 2008)上运行web请求相关代码,提示错误:未能为 SSL/TLS 安全通道建立信任关系。 打开IE直接访问相关网址,按照提示信任网站,安装证书: 选择:将所有…

vue2中,下拉框多选和全选的实现

vue2中&#xff0c;下拉框多选和全选的实现 代码布局在methods: 中添加功能函数较为完整的一个整体代码&#xff1a; 如图所示点击全选即可完成下拉框中全部子项的全部的选中&#xff0c;同时取消全选即可全部取消选择。 代码布局 <div class"chos-box2"><…

MySQL恢复不小心误删的数据记录(binlog)-生产实操

同事操作删除生产数据时&#xff0c;未及时备份导致误删除部份数据。现通过mysql的binlog日志回滚数据。 1.由于我们第一时间找到相应的操作时间的大概在12点~13点之间操作删除了product和product_item表的部份数据。因此我们只要找到这期间的binlog文件就行了&#xff0c; 脚…

pytorch 入门 (四)案例二:人脸表情识别-VGG16实现

实战教案二&#xff1a;人脸表情识别-VGG16实现 本文为&#x1f517;小白入门Pytorch内部限免文章 参考本文所写记录性文章&#xff0c;请在文章开头注明以下内容&#xff0c;复制粘贴即可 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参…

系统性认知网络安全

前言&#xff1a;本文旨在介绍网络安全相关基础知识体系和框架 目录 一.信息安全概述 信息安全研究内容及关系 信息安全的基本要求 保密性Confidentiality&#xff1a; 完整性Integrity&#xff1a; 可用性Availability&#xff1a; 二.信息安全的发展 20世纪60年代&…

Linux tmux使用总结

文章目录 1 tmux介绍2 tmux概念会话Sessions、窗口Windows、面板Panesstatus line中字段含义 3 Sessions会话管理新建会话断开当前会话进入之前的会话关闭会话查看所有的会话 4 tmux快捷指令系统指令窗口&#xff08;Windows&#xff09;指令面板&#xff08;Panes&#xff09;…

免费领取!TikTok Shop “全托管”黑五大促官方备战指南来啦!

黑五网一大促即将来袭&#xff0c;自“全托管”模式上线以来&#xff0c;TikTok for Business在沙特阿拉伯和英国市场开展了古尔邦节大促、夏季大促、返校季大促等活动&#xff0c;今年更是会借着黑五网一大促之际&#xff0c;首次覆盖美国市场&#xff0c;为全托管商家带来全球…

什么是接口测试?三分钟带你全面认识接口测试、带你学会接口测试~

目录 1、接口是什么&#xff1f; 2、接口的类型 3、接口测试初识 3.1、什么是接口测试 3.2、原理 3.3、特点 3.4、什么是自动化接口测试 4、接口测试流程 5、传统风格接口与RESTful风格接口 6、接口文档 6.1、什么是接口文档 6.2、接口文档作用 6.3、展现形式 6.4…

formData对象打印不出来

用el-upload上传图片 以流的形式传给后台 所以用formData对象带数据 let formData new FormData() formData.append(name&#xff0c;monkey7) console.log(formData) 明明已经把数据append进去了 console.log在控制台却打印不出 后来发现他得用formData.get("xxx"…

最全的图床集合(国内外,站长必备)

“heosu每月不定时更新嗷&#xff0c;防止错过消息推送&#xff0c;建议小伙伴添加到星标⭐喔” 为了减少服务器的压力不少站长还是选择图床存放图片的。所以就搜集一些比较好用的免费的图床&#xff08;收费的在最后标出&#xff09;以及我目前在用的图床。 为什么需要图床&am…

Linux系统CH347应用—SPI功能

Linux/安卓系统使用CH347转接SPI功能有三种应用方式&#xff1a; 1. 使用CH34X_MPHSI_Master总线驱动为系统扩展原生SPI Master&#xff0c;此方式无需进行单独的应用层编程&#xff1b; 2. 使用CH341PAR_LINUX字符设备驱动&#xff0c;此方式需要配合使用厂商提供的库文件&a…