简介
随着深度学习的发展和普及,很多非结构数据被表示为高维向量,并通过近邻搜索来查找,实现了多种场景的检索需求,如人脸识别、图片搜索、商品的推荐搜索等。另一方面随着互联网技术的发展及5G技术的普及,产生的数据呈爆发式增长,如何在海量数据中精准高效的完成搜索成为一个研究热点,各路前辈专家提出了不同的算法,今天我们就简单聊下当前比较常见的近邻搜索算法。
主要算法

Kd-Tree
K-dimension tree,二叉树结构,对数据点在k维空间(如二维 (x,y),三维(x,y,z),k维(x,y,z..))中划分。
构建过程
确定split域的值(轮询 or 最大方差) 确定Node-data的域值(中位数 or 平均值) 确定左子空间和右子空间 递归构造左右子空间
查询过程
进行二叉搜索,找到叶子结点 回溯搜索路径,进入其他候选节点的子空间查询距离更近的点 重复步骤2,直到搜索路径为空
性能
理想情况下的复杂度是O(K log(N)) 最坏的情况下(当查询点的邻域与分割超平面两侧的空间都产生交集时,回溯的次数大大增加)的复杂度为维度比较大时,直接利用K-d树快速检索(维数超过20)的性能急剧下降,几乎接近线性扫描。
改进算法
Best-Bin-First:通过设置优先级队列(将“查询路径”上的结点进行排序,如按各自分割超平面与查询点的距离排序)和运行超时限定(限定搜索过的叶子节点树)来获取近似的最近邻,有效地减少回溯的次数。采用了BBF查询机制后Kd树便可以有效的扩展到高维数据集上 。
Randomize

本文概述了深度学习时代下的近邻搜索算法,包括Kd-Tree、Best-Bin-First、RandomizedKdTree、Hierarchicalk-means trees、LSH、PQ和HNSW,分析了各自的原理、性能与改进,以及在实际项目中的应用和选择策略。
最低0.47元/天 解锁文章
951

被折叠的 条评论
为什么被折叠?



