ANN(大规模向量检索方法)

发布时间 2023-09-12 23:08:25作者: 辛几何旋律

向量检索

这篇文章主要介绍一些向量检索的常用方法

向量检索主要分为两种情况,分别为NN和ANN

首先是最近邻NN,时间复杂度为\(O(ND)\)
其中N为向量的个数,D为向量的维度,运算速度较慢

ANN通过牺牲一部分的内存和内存占用等,换来更快的检索速度(不一定是最近似的,比较近似的即可)

NN和ANN可应用在CV向量检索等多个方面

根据向量个数的规模,解决办法小结如下所示:
image
注意向量的维度限制
接下来介绍向量检索的两种思路

介绍一下需要解决的问题和基本思路:
image
faiss为facebook为了向量检索做的包,不同规模问题用不同方法去解决,并充分发挥了GPU等方面的优势
\({M<20}\)的时候,采用SIMD(单指令流多数据流),基本过程如下所示:
image
充分提升了并行性,在计算距离的过程中提升了差不多8倍的效率。

\({M\geq 20}\),采用矩阵乘法的方式,并且将其部署在GPU上加速运算效率
如下图所示:
image
将该算法部署在GPU上差不多可以提升10倍。

整体思路如下所示:
image
主要划分为millon和billon两个数量级,整体思路也分为空间分割识别和数据压缩两种思路。

哈希的基本思路,也比较简单,如下所示:
image
原始数据的存储也需要额外的内存,也需要一些哈希表来提升精度,
效果并不是很理想。Falconn在此基础上提出了改进,在此不再赘述。

FLANN(Fast Library for ANN)
基于KD树的思想,检索速度快,但是原始数据的存储占用内存大。

Annoy和KD树类似,但是通过随机取点划分空间再检索,需要的参数很少
但是也是需要大规模的内存消耗,速度也比NSW和HNSW更慢。

接下来介绍重量级的方法