哈希学习
1 背景介绍
首先介绍一下最近邻搜索:最近邻搜索问题,也叫相似性搜索,近似搜索,是从给定数据库中找到里查询点最近的点集的问题。
给定一个点集,以及一个查询点q,需要找到离q最近的点的集合;在大规模高维度空间的情况下,这个问题就变得非常难,而且大多数算法计算量极大,复杂度很高; 而且一般用近似的最邻近搜索代替;哈希就是解决上述这类问题的主要方法。
2 哈希学习的目的与分类
哈希学习的目的:通过机器学习机制将数据映射成简洁的二进制串的形式, 同时使得哈希码尽可能地保持原空间中的近邻关系, 即保相似性.(这一点很重要,如果失去了原来的相似性,那么哈希学习也就变得没有意义了)
以下面这幅图为例,原始数据是三幅图像,其中后面这两幅相似度比较高,也就是说在原始空间中从语义层次的距离或者欧氏距离都比较近,映射为哈希码之后,距离也应该更近。
哈希的方法主要分为两大类:1、第一种的代表是局部敏感哈希(LSH),这种方法主要是人工设计或者随机生成哈希函数,是一种数据独立的方法;2、第二种是哈希学习的方法,希望从数据中自动学习出哈希函数,是一种数据依赖的方法;也是现在主流的方法;显然第二种具有数据依赖性,是一种更有适应性的方法。
3 哈希学习的步骤
- 先对原空间的样本进行降维, 得到1个低维空间的实数向量表示;
- 对得到的实数向量进行量化(即离散化)得到二进制哈希码;
对于第一步如何降维,我们这里不再做介绍,下面主要介绍一下量化的方法。
4 量化方法
目的:对于一个低维向量把它映射为一个二进制哈希码,并且尽可能的保持原来的相似性。
1、SBQ
介绍:对于给出向量的每一个维度的数值,我们设定一个阈值。然后根据这个维度数值的情况与阈值作比较,确定其映射的二进制数是0还是1。之后我们把每个维度映射出的二进制数串起来组成哈希码。
举例:比如某一向量为[4,3,7,8],我们设定阈值为5,并且>=5为1,反之为0. 那么该向量对应的二进制哈希码为0011.
相似性的衡量方法:对于映射好的哈希码如何衡量他们之间的相似度呢?我们采用汉明距离来衡量(二进制对应位不同的个数,比如0011与0000的汉明距离是2)
2、HQ
跟SBQ比较类似,是将每一个维度划分为四个区域,使用三个阈值和两位二进制码来编码;
相似性的衡量方法:也是采用汉明距离来衡量。
关于哈希学习这篇文章也不错!
流形学习(与哈希学习对比)