最近,比较困惑,人已经到了研二了,研究生生涯真正可以用来做科研的时间只剩下8个月了。这让我很迷茫,这8个月说短不短,说长不长。我觉得已经并不够我再开一个新的问题去做了,还是要在原先的方向上做下去,但又觉得有些无聊。正好,写些东西,或许对于梳理思路有些帮助。
过去两年里,我一直在做高维索引,问题是欧式空间下的最近邻查询问题。我们做的索引主要是用于图像的特征数据的处理,比如色彩直方图、纹理数据、SIFT特征数据等等。众所周知,现在的图像数据集越来越大了,到底有多大,我也不是特别清楚。不过,据统计,截止到2011年7月,FACEBOOK上已经有图像超过500亿张了,真是相当惊人啊!面对这么庞大的数据集,真是让人不寒而栗啊!
对于海量图像集,进行基于图像内容的检索是个基本而重要的问题。依我之见,目前要做的还是很不够大。首先,目前尚没有有效的度量图像之间语义信息的方法。如果没有一个好的度量方式,检索的结果可想而知。当然,图像的检索和匹配并不是我的研究方向,是boss的方向。听的多了,也能扯两句。
有点跑题,回到正题。前段时间一直在做LSH方法的改进工作。LSH(Locality Sensitive Hashing)方法是目前公认的较能有效解决近似最近邻问题的方法,因此,受到广泛的重视。不过,怎么说呢,眼下利用该方法进一步解决最近邻问题的研究热潮应该慢慢退去了。毕竟,人家Indyk是98年就将理论的东西放在STOC上了。第一篇将该方法用于解决实际数据库最近查询问题的方法在99年,由Indyk的师弟(都是Motwani的徒弟)发在VLDB上了。
LSH方法牛就牛在,它从理论上保证可以有效解决“维数灾难”(Curse of Dimensionality),可以保证查询在亚线性时间内完成,并且藐视维数----多么强大的藐视!!但是,这种方法问题也多的很!首先,就是这个方法不能直接用来解决最近邻查询,而是“曲线救国”的策略,即可以保证以一定的概率返回距离查询点距离不超过R的每一个点。不过,这个R在实际中可难找了。大了,不行;小了,也不行;而且实际上,压根就没有对所有最近邻都是用的值。说点题外的,在某些特定领域内,做范围查询(Range Query)还是有意义的。其次,空间复杂度有些吓人,要用很多哈希表,一般几百上千吧。这么庞大的开销,着实让人受不鸟啊!
关于LSH方法的改进,总的来说,可以说有两种,一是在内存程序的假设下进行的,一是在外存程序的前提下做的。
搞内存程序的人,主要是减少空间复杂度,就是减少哈希表的数量。既然表的数量减少了,可又要保证精确性,就只好在一张哈希表上扒拉更多东西了。一个是entropy-based LSH,又是Motwani的学生做的,它的思路很有趣,查询点的最近邻不一定与查询点由相同的哈希值,那么,通过模拟查询点的最近邻,并计算这些模拟点的哈希值,去访问更多的bucket。这样,一张表获取了更多的bucket,就用不了那么多点了。另一种方法MP-LSH是Lv Qin做的,中国人哟,Princeton李凯的学生。他们的思路更简单了,就是查询点的最近邻如果不在查询点所在的bucket内,那么,一定在附近。不过,这种方法就是比较adhoc。返回结果跟探测的数量有关,可探测数量却跟返回结果的精确性没什么太大的关联。但是MP-LSH是the state of art,至少在内存程序中是这样的。
搞内存程序的人一般不搞数据库,他们是特定领域的人做的,比如Motwani本身是搞理论算法的,他的学生大多是这个套路;李凯是做图像引擎的,他们研究LSH是为了解决自己的问题。所以,不同背景的人看同一个问题,真是角度、思路完全不一样。有点跑题了,继续。
搞外存的是数据库领域的人,领军人物就是陶宇飞。Tao大神的论文真是又好又快!为何?以我之见,就是将理论界的东西进行实用化。计算几何(computional geometry)中有很多问题,最近邻问题就是个计算几何问题,此外还有很多跟位置相关的问题都是,但是搞计算几何的人大多是搞理论的,他们的文章一般发在STOC,FOCS和SOCG,SODA等会议上。一般,数据上规模了,就要用到数据库,起码要放在外存中,搞理论的人不管这个。人家主要是从理论高度解决问题。可是你的方法在内存有用,可不具有scalability,不实用啊。陶大神发现这个bug后,狂做这个工作。他每年的SIGMOD,VLDB,ICDE大多于此有关,很多都做,NN,RANGE SUM, SKYLINE等等。所以,找到属于自己的套路,狂发论文并非不可能啊!!!
回到正题,陶大神的方法是LSB。2012,又有小伙甘骏豪作C2SLH。这两种方法,相比之下,C2LSH还是比较实用的。但是,两种方法有个共同缺陷,就是访问一个数据点就是一次随机IO,这个要了命。因此,他们必须拼命控制访问点的个数。你访问的少,IO少了,accuracy就丢了;访问多了,耗时啊!
唉,今天先说这么多吧!有机会的话,应该将自己所思所得,总结一下,与众人分享一下。