2013IS-(NSW索引算法)Approximate nearest neighbor algorithm based on navigable small world graphs

标题:基于可导航的小世界图的近似NN算法

编者的总结

  1. 设计了一个简易的KNN算法同时用于索引构建和查询。恰好如此构建的索引是一个近似的泰森图(Delaunay三角剖分),满足导向性小世界图特性,因此可以用于KNN搜索。

编者的思考

  1. 参数太难调了,m,w,要换个参数,得从构建图开始重新来一次,不够灵活;
  2. 构建图的时候算了太多次距离了,距离公式复杂的时候,这个proximity graph index的构建应该会很慢;每一个点的插入是对数的,可是n个点的插入就是nlogn了;
  3. 这是一个完全基于内存的算法,所有数据都在内存里才能达到效果,实验中采用的机器是192GB的;除此之外,边也是O(n)级别的,所以size其实蛮大的,数据量较大的时候,空间上也蛮成问题;
  4. 高维退化问题实验没有研究透;
  5. KNN中repeat break的条件我有些疑问,为什么candidate list中最小的元素大于KNN BSF算法就要终止? 它是距离最小的,但它的邻居有可能比它的距离还小,那这部分不就是搜不到了?
  6. 当然,搜索效率上值得肯定,复杂度mlog^2n,而且看参数合适情况下,召回率非常高,这点比树形索引的要好很多。

abstract

度量空间KNN算法。把每一个数据对象当做图中一个点,用边来连接。通过维护一个在构建初期生成的近似Delaunay图。
算法可以做成分布式、并行的。搜索和插入是同类型操作,复杂度是log^2(n)

1. Introduction

基于哈希表的分布式系统(BitTorrent, Skype)只能执行精确匹配,元素值的微小改变可能导致哈希值的大变,这使得KNN和Range query都不太可能。


image.png

2. Related work

  • 在99年就有人用狄洛尼图和贪心算法做精确近似搜索了。当时作者证明了在一个度量空间中找一个精确的狄洛尼图是不可能的(?)。但当时的构建和查询复杂度都很高。
  • 在00年介绍小世界现象的文章中,作者指出要想获得小世界的导航特性,边的长度必须服从一个指数分布,即,长度越长的边的数量是指数下降的。本文也是符合这个规律的。
  • 07年有一份工作,也是近似狄洛尼图,方法是给每个点选择3d+1个邻居(d是维数),最小化对应的维诺格子。然而精度并不好。

4. Search algorithm

图的构建要通过顺序插入所有的点。然后在图中找到最近邻的邻居,互相连接。注意看上图,所有黑线+顶点其实就构成了一个Delaunay三角剖分。红线可视作远程随机插入的。

4.1. Basic greedy search algorithm

这种贪婪算法比较简单,首先找到一个entry point,然后计算这个entry point所有邻居和query的距离,如果最小距离小于dist(query, entry point),那么就重新设置current point为这个最小距离点,直到最后找到一个point,其所有邻居和query的距离都大于这个point。


image.png

通过这种贪婪算法找到的是一个局部最小值,未必是全局最优的。也就是说,这种算法结构,不对结果质量作出绝对保证,只能做出概率保证,保证找到的结果以多大的概率是真实的NN。

4.2. k-NN search modification

对于上述贪婪算法,可以通过重复做几次搜索,选不同的entry point,最终取最佳答案,来提升结果质量。这也是作者之前的做法,然而本文作者对此进行了改进。改进体现在两方面:

  1. 终止条件改变:如果一个entry point和当前Query的距离比BSF KNN还要大,那么这一轮迭代立即终止。
  2. 访问对象改变:维护已访问列表,已经访问过的节点,不再重复进入算法。

具体算法如下,算法重复m轮,最终取最优解。
TreeSet是有序列表,实现中可以用堆。


image.png

image.png

5. Data insertion algorithm

如果每一个元素都将其Voronoi邻居维护在自己的friend列表上(图中的邻居列表),那么得到的结果必定是精确的。但是维护这个条件等同于构建一个Delaunay图。

我们构建图的目标就是尽可能的最小化假精确解的概率,同时让图的边尽量的少。做法就是一个一个插入数据点,然后在已插入的节点中找f个最近的节点作为邻居。核心思想就是:这f个点和Voronoi邻居集合的交集是很大的。
还有一个好处就是,这样生成的图,不需要其他操作,自然就带有小世界属性。这是因为早起制造出来的边在后来逐渐会变成long links,产生的越早,越大概率是long links,这样边的长度会大致符合一个几何分布。
具体怎么找这f个点呢,就用4.2节提到的KNN算法就可以了。

5.1. Choice of parameters

这个方法的参数调试是非常麻烦的,其中最麻烦的当属w。w就是构建时用到的KNN算法中的参数m。首先要让m足够大,保证KNN搜索质量很高,然后再慢慢放大w,直到达到一个较好的KNN搜索质量。

6. Test results and discussion

6.2. Small world navigation properties

  1. 可以看到对数性质还是很明显的,尤其在低维;
  2. 在高维就不那么明显了,原因不是在于f的选取,更多的在于搜索过程中,每次只选择一个方向去搜,使得搜索过程更像是单维的。


    image.png

6.4. k-Nearest neighbor search complexity scaling

  1. 固定召回率,搜索量基本和数据集大小成比例。当然这个固定召回率,实际上要付出很多代价调m,w两个参数才能得到固定。


    image.png
  2. 横轴指数,纵轴线性,可以看到二次曲线还是很明显的,印证了理论上的复杂度。


    image.png
  3. 维数较高时,搜索量也随之增长;从上两张图也能看出来,随着维度增加,质量和速度退化也都比较明显。


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容