HNSW概述

1.   \textbf{1. } 1. 一些导论

1.1.   \textbf{1.1. } 1.1. 朴素基于图的 ANN \textbf{ANN} ANN

1️⃣建图:对数据库中所有的点,构建 k -NN k\text{-NN} k-NN图(下图以 3 -NN 3\text{-NN} 3-NN为例)

2️⃣检索: GreedySearch \text{GreedySearch} GreedySearch

image-20250103190133220
  1. 起始操作:从任意点(也可是 Memoid \text{Memoid} Memoid中心点)开始
  2. 跳跃操作:
    • 候选:维护长度为 k +1 k\text{+1} k+1的数据结构 L L L,包含当前结点 & \& & k k k个最邻近
    • 更新:选择 L L L中距离最近的一点作为下一步
  3. 终止操作:
    • 条件:如果当前结点,比其所有 k k k个最邻近都更靠近 q q q,则终止跳跃
    • 输出:终止处的结点,即为 q q q的最邻近

3️⃣存在的问题:缺乏长距离连接导致搜索路径可能过长,可能陷入局部最优

1.2.   NSW \textbf{1.2. NSW} 1.2. NSW算法

1️⃣高速通道机制:是 NSW \text{NSW} NSW的核心机制,即在 NSW \text{NSW} NSW图中,即使很远的点也可进行长距离连接

image-20250103190133220

2️⃣ NSW \text{NSW} NSW的构图

  1. 构图的流程:
    • 初始构建:将所有数据库点按随机顺序注意插入图 → \text{→} 将插入点与其在图中的 k -NN k\text{-NN} k-NN连接
    • 后续插入:直接将新的点插入图中 → \text{→} 将新插入点与其在图中的 k -NN k\text{-NN} k-NN连接
  2. 构图的特点:
    • 早期插入的点:由于点较少,会被强迫形成快速通道
    • 后期插入的点:此时点较多,倾向于形成稠密的最邻近连接

3️⃣ NSW \text{NSW} NSW的查找

  1. 有关数据结构:
    • 变长废弃表 g g g:记录搜索过程中已访问点,避免重复访问
    • 定长候选表 c c c:记录当前节点下一步要走的候选点,同时也记录上步候选表 c ′ c' c(二者相等时收敛)
  2. 查找过程:
    • 起始:选定图中随机点 / / /中心点,加入到候选表 c c c
    • 搜索:并行地搜索 c c c中所有点的最邻近,用 g g g筛掉已访问点后,加入到 c c c中并计算与查询的距离
    • 更新:对 c c c进行去重,按与查询的距离升序排序,并按照 c c c的定长(最大长度)截断
    • 终止:如果在某一步,更新前的 c ′ c^{\prime} c和更新后的 c c c相同

2.   HNSW \textbf{2. HNSW} 2. HNSW

2.1.   \textbf{2.1. } 2.1. 跳表 (SkipList) \textbf{(SkipList)} (SkipList)的结构与思想

img

1️⃣跳表的结构

  1. 多层有序链表:最底层包含所有元素,上层是下一层的快速通道(包含的元素更稀疏)
  2. 层间的关系:通过自上而下的指针,连接相同的元素

2️⃣跳表的操作

  1. 构建过程:将所有元素塞入底层( 100% \text{100\%} 100%),随机选一半元素升到上一层( 50% \text{50\%} 50%),不断随机二分到顶层
  2. 查找过程:从左到右 / / /从上到下,平均复杂度降到 O ( log ⁡ n ) O(\log n) O(logn)
    • 起始:从顶层的最左边开始
    • 下降:从左到右扫描链表内容,如果碰到大于目标值的结点,立马下降
    • 迭代:下降后以下降的结点为起点,继续向右扫描 + \text{+} +下降
    • 终止:到达最底层无法下降时停下,当前结点即为输出结果

2.2.   HNSW \textbf{2.2. HNSW} 2.2. HNSW

image-20250103210857429

1️⃣ HNSW \text{HNSW} HNSW的设计思想

  1. 分层结构:最底层是包含所有点的 NSW \text{NSW} NSW图,往上是含部分点的 NSW \text{NSW} NSW图(且点数逐渐减少)
  2. 层级分配:对每个新插入的点,用概率公式 Floor ( − l n (Uniform(0,1))×ml) \text{Floor}(-ln\text{(Uniform(0,1))}\text{×ml)} Floor(ln(Uniform(0,1))×ml)决定其最高能到几层

2️⃣ HNSW \text{HNSW} HNSW的构建与搜索

  1. 构建:对于新插入的点 p p p,先算出其最高层 L → L\text{→} L 0-L \text{0-L} 0-L都各找出 p p p k -NN k\text{-NN} k-NN并连接
  2. 查找:在最高层按 NSW \text{NSW} NSW方式找到最邻近 → \text{→} 将该层最邻近作为下层入口重复搜索过程 → \text{→} 迭代到底层

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

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

相关文章

小程序学习07—— uniapp组件通信props和$emit和插槽语法

目录 一 父组件向子组件传递消息 1.1 props (a)传递静态或动态的 Prop (b)单向数据流 二 子组件通知父组件 2.1 $emit (a)定义自定义事件 (b)绑定自定义事件 三 插槽语法…

【视频笔记】基于PyTorch从零构建多模态(视觉)大模型 by Umar Jamil【持续更新】

视频链接: 基于PyTorch从零构建多模态(视觉)大模型 by Umar Jamil 从头编写一个视觉语言模型:PloyGamma,是谷歌的一个模型 1:原始图像 2:视觉编码器(本文是viT),通过对比学习进行训练。这个对比学习最开始是CLIP,后来被谷歌改成了SigLIP 3:线性投影层 4:如何将图…

UniApp | 从入门到精通:开启全平台开发的大门

UniApp | 从入门到精通:开启全平台开发的大门 一、前言二、Uniapp 基础入门2.1 什么是 Uniapp2.2 开发环境搭建三、Uniapp 核心语法与组件3.1 模板语法3.2 组件使用四、页面路由与导航4.1 路由配置4.2 导航方法五、数据请求与处理5.1 发起请求5.2 数据缓存六、样式与布局6.1 样…

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为?22. 单链表的存储密度比1?23.单链表的那些操作的效率受链表长度的影响?24.顺序表中某元素的地址为?25.m叉树第K层的结点数为?26. 在双向循环链表某节点…

Leffa 虚拟试衣论文笔记

Leffa: Learning Flow Fields in Attention for Controllable Person Image Generation https://github.com/xuanandsix/awesome-virtual-try-on-note/tree/main/Leffa 打开链接查看详情,更多虚拟试穿论文持续更新。

BP神经网络的反向传播算法

BP神经网络(Backpropagation Neural Network)是一种常用的多层前馈神经网络,通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数,从而调整权重,使得网络的预测输出与真实输出之间…

Git快速入门(三)·远程仓库GitHub以及Gitee的使用

目录 1. 远程仓库GitHub 1.1 登录 1.2 创建库 1.3 创建文件 1.4 修改文件 1.5 创建分支 1.6 删除库 1.7 将远程仓库下载到本地 1.7.1 关联登录 1.7.2 克隆 1.7.3 通过GitHub Desktop更改远程库 2. 远程仓库Gitee 2.1 登录 2.2 创建文件 2.3 关联…

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box&…

Springboot日志打印、SpringBoot集成Log4j2(附源码)、异步日志

文章目录 一、Log4j2介绍1.1、常用日志框架1.2、为什么选用log4j2 二、Log4j2整合步骤2.1、引入jar包2.2、配置文件2.3、配置文件模版 三、配置参数简介3.1、日志级别3.2、日志格式(PatternLayout)3.3、Appenders组件列表3.3.1、Console3.3.2、File3.3.3…

上传本地项目或文件到SVN服务器(图片讲解,超简单)

上传本地项目或文件到SVN服务器(图片讲解,超简单) 1、使用TortoiseSVN2、输入SVN远程仓库地址3、添加文件或文件夹 需求:将本地的文件上传到SVN服务器上指定路径。前提:已经安装好TortoiseSVN 1、使用TortoiseSVN 右…

使用 HEIC/HEIF 编码器将 HEIC 转换为 JPEG

随着iOS 11之后新的HEIF图像格式的发布,在当前几乎所有软件仅支持JPEG图像而不支持HEIC图像的环境下,这对Apple来说可能是一个巨大的挑战。不过,仍有一些方法可以为有需要的用户打开、查看、传输或转换iOS 11 HEIC 照片格式。本文将向您介绍 …

基于JAVA+SSM的教学资料管理系统

基于JAVASSM的教学资料管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽兄弟们&a…

stm32 移植RTL8201F(正点原子例程为例)

最近在工作中需要使用RTL8201F,在网上找了很多帖子,没有找到合适的,自己翻资料移植了一个。 模板工程使用的是正点原子的f407探索版的例程,原子使用的是LAN8720,需要把他的驱动修改成为我们自己用的RTL8201F。 1.将PHY_TYPE改成我…

RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用

工业视觉识别系统厂家提供的功能主要包括: 这些厂家通过先进的视觉识别技术,实现图像的采集、处理与分析。系统能够自动化地完成质量检测、物料分拣、设备监控等任务,显著提升生产效率和产品质量。同时,系统具备高度的灵活性和可扩…

Linux umami网站统计工具自定义API开发

Linux umami网站统计工具自定义API开发 一、src/queries/analytics/下添加调用sql查询文件:二、src/queries/index.js文件中增加导出模块内容:三、src/pages/api/下根据目录添加接口方法文件:四、构建项目,启动。1、到umami目录&a…

Meta 的新策略,将 AI 生成的角色整合到其社交媒体平台

一、Meta新年规划及引人注目的举措 多元规划背景:在新的一年,Meta制定了多维度的战略规划,旨在巩固并拓展其在科技领域的影响力。增强现实与元宇宙是其长期布局的重点方向,期望借此塑造未来互联网的交互形态;面对TikTo…

微信小程序滑动解锁、滑动验证

微信小程序简单滑动解锁 效果 通过 movable-view (可移动的视图容器,在页面中可以拖拽滑动)实现的简单微信小程序滑动验证 movable-view 官方说明:https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.ht…

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源,TFTLCD彩屏显示及控制进行了整体介绍后,新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下,SWM221系列芯片以其卓越性能与创新设计,受…

软考教材重点内容 信息安全工程师 第 12 章网络安全审计技术原理与应用

12.1.1 网络安全审计概念 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后”安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线索及证据,以便…

代码随想录算法训练营day21

代码随想录算法训练营 —day21 文章目录 代码随想录算法训练营前言一、669. 修剪二叉搜索树递归法迭代法 二、108.将有序数组转换为二叉搜索树递归法迭代法 三、538.把二叉搜索树转换为累加树递归法 总结 前言 今天是算法营的第21天,希望自己能够坚持下来&#xf…