首页 > 编程知识 正文

平面设计先学ps还是ai(先学java还是安卓)

时间:2023-05-06 02:10:30 阅读:90541 作者:2603

作者

编辑责任| qkdhxc

展出品| csdn (标识: csdn新闻) )。

近年来,随着人工智能技术的普及,特别是大规模人脸识别技术的应用,市场对大规模矢量高性能检索的需求越来越迫切。 本文主要阐述了大规模矢量检索场景下的数据管理策略,包括如何使数据适应矢量检索引擎的并行检索,减少各级缓存中数据替换的性能损失,以及未来的优化方向。

什么是向量检索?

我们知道计算机只是电子设备的集合体,不能像人类一样感知世界。 电脑怎么能了解这个世界呢? 计算机只识别数字。 那个只能用数字来量化社会。 用一组数字表示事物。 这样的一组数字就是“向量”。 如果向量由n个数字组成,则它是n维向量。

就目前广泛使用的脸部识别技术而言,计算机从照片和视频中提取脸部图像,并将脸部图像转换为128维或更高保温杯度的矢量。

向量检索是什么意思? 让我们先复习一下中学的几何数学。 二维平面XY上有几个点。 a (1. 0,2.0 )、b )、0.0 )和c ) )、0.0和2.0 )。 a离谁近?

这里,ABC是三个二维矢量,根据欧几里得数学的知识,它们之间的距离可以通过以下公式计算。 (欧几里得距离,欧盟距离)。

AB距离为2,AC距离为1,因此可知a接近c。 这是最简单的矢量搜索,矢量a接近c,AC距离近,通过计算知道矢量a和矢量c更相似。 另外,判断向量的相似度有余弦距离,但两者的差异在于余弦距离需要向量的正规化处理,因此在此不作说明。 有兴趣的人请自己复习一下。

因此,对于可承受的保温杯矢量,假设两个n维矢量分别用a和b表示,则它们之间的欧式距离计算公式如下:

回到脸部识别的问题,假设我们已经有一千万人的脸部矢量数据。 现在,给一个人的脸,你怎么在这一千万人的脸上找到和目标脸最相似的人的脸? 根据上面的知识,我们只需要将这张脸的矢量和一千万张脸的矢量分别计算欧几里得距离,距离最小的是最相似的。

矢量检索有两个基本参数。 一个是n,意味着带n个目标向量在数据库中进行搜索。 另一个是k,是寻找最接近目标向量的前k个向量的意思,我们一般被称为top-k。

矢量检索有最近邻检索(Nearest Neighbor Search,NN )和近似最近邻检索) approximatenearestneighborsearch,ANN )两种方法。 NN最初利用目标向量和数据库向量逐一计算距离,结果最准确,随后产生了相关算法(如KD-tree ),检索效率大幅提高,但不足以应对海量可承受的保温杯度数据ANN通过在可接受的精度下聚类矢量,从而大幅提高搜索效率,也是在大规模矢量检索场景中使用的主要方法。

你怎么理解这个集群索引? 例如,我们首先按职业对城市的所有人进行分类。 例如,工程师、律师、医生等。 现在我要找一个他是Java程序员的人。 那么,如果在工程师队伍里找找的话,十有八九可以找到他。 不需要在其他队找。

向量搜索的典型方法是,通过一种聚类算法将大量的向量分成许多簇,每个簇包含成百上千个向量,每个簇有一个中心向量。 当用户输入目标向量搜索时,系统首先计算目标向量和各个簇的中心向量的距离,选择距离相对近的几个簇,然后对目标向量和这些簇各自的向量进行距离运算,最后得到距离最近的k个结果向量。

如果用简图表示,则假设二维平面上有几个向量(点)。

根据聚类算法将它们分成几个聚类。 可以指定群集的数量。 这里分为四个集群。 黑色圆圈表示集群的中心向量。

由于添加了要检索的目标向量,通过比较计算得知离黄色簇的中心最近,所以只需要对目标向量和黄色簇内的各个向量进行距离计算就可以了

离目标向量最近的那个向量:

当然,具体到实现环节会有很多种不同做法,有基于矢量量化的,基于图的,以及基于树的各种算法,有兴趣的可以去搜索ANN相关论文。

大规模向量检索面临的问题

大规模向量检索的系统作为一个向量数据库,不但要能够支持海量数据的持久化,还要能快速地检索出用户需要的信息。生产环境中的向量维度一般起步就是128维,高一些的可达512维。我们可以算一下,对于512维度的向量,每条向量有512个数值,通常在计算机里这些数值是以float类型表示,这意味着每条向量将会占用2048字节,那么一亿条这样的向量就会用掉200GB。而生产环境中的向量数量有可能达到十亿甚至百亿的规模。

根据使用的场景,可以分为静态库和增量库。静态库就是数据固定不变的,一旦完成数据导入,基本不会再接收新的数据,这种场景主要注重检索的性能;增量库在用户使用向量检索的过程中可能还伴随着持续的数据插入,需要考虑的问题要多一些,比如数据插入后多久可见,怎样兼顾检索效率和插入效率,如何保证宕机数据不丢失等等。

目前,用于向量检索的最热门工具是Facebook开源的FAISS向量搜索库,另外,微软也开源了一个SPTAG库。用户可以无需深入了解向量聚类和向量相似性计算的算法,就能使用这些库实现简单的向量检索。但是这些只是最基础的工具库,其功能并不包括对向量数据的管理,不具备高可用性,缺乏监控手段,没有提供分布式方案,以及缺少各种语言版本的SDK等等,这也使得用户需要基于它们进行大量的开发才能满足生产环境的要求。

【END】

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。