这几天看了KSH算法,这篇博客主要是把自己的一些理解记下来,最近记性比较差。。。哈哈
一 KSH算法原理
KSH算法,出自文章《Supervised Hashing with Kernels》,从文章名字就可以大概了解到,这篇论文提出了一种基于监督学习和核的Hash算法。利用kernel主要是为了解决线性不可分问题,监督学习则是为了学习到更discriminative的hash value,使得我们可以直接使用hash后的value作为特征,大大降低特征维数。
(1) hash函数的生成
该算法首先随机选取了M个样本(anchor),之后构造了如下式的prediction函数:
上式中,k代表核函数(论文选择了高斯径向基kernel),得到f(x)后,哈希函数h(x) = sgn(f(x)) 。上式中参数主要是a(b可以化解掉),也是监督学习的目标;
注意,上式只生成了一个bit的hash value,若生成r bit 特征,那么就需要训练r次,生成r组a参数(论文中逐bit生成参数a)。
(2) 目标函数
在训练中,文章选择