[ACM 2018] Post Tuned Hashing_A New Approach to Indexing High-dimensional Data [paper] [code]git
Zhendong Mao, Quan Wang, Yongdong Zhang, Bin Wang.github
以前的哈希方法大都有projection和binarization两个阶段,这些two-stage的方法大都会形成neighborhood error。咱们能够定义neighborhood error以下:
\[ L = ||S-V||_{F}^{2} \]
其中, S, V分别是原始数据X和二值编码B的类似矩阵,其中\(ij-th\)个元素代表对应第i个数据和第j个数据是否类似。算法
Post Tuned Hashing(PTH)的post-tuning过程:\(R:\{-1,1\}^m \to \{-1, 1\}^m\),能够改善二值编码,使得neighborhood error最小化:
\[ PTH(X) = R(H(X)) \]
在post-tuning过程当中,H(X)能够利用任何哈希方法产生。所以,PTH能够很是简单得应用于普遍的哈希方法中以改进其二值编码表现。函数
矩阵S表示原始数据X间的类似信息,其具体定义以下:post
V表示原始数据X对应的二值编码B间的类似信息,其具体定义以下:
\[ V_{ij} = (b_i · b_j )/ m \]
此时,将neighbood error改写为:
\[ L = ||S-\frac{1}{m} B^TB||_{F}^2 \]学习
定义U为post-tuning matrix,且Z=H(X),此时,目标函数为:测试
矩阵U中的每个元素表明Z中对应位置的元素是否须要更新以获得更小的neighborhood error。PTH方法最终获得的改善后的哈希编码为:B=U ○ Z。编码
Observation:目标函数中的全部二次项都是常数(取值只为1/-1),所以最小化目标函数等同于最小化全部线性项。spa
令\(\gamma=1/m\),则目标函数变为:code
上述目标函数关于矩阵第p行的表示为:
令z_p为矩阵Z第p行的行向量,Q = Z*Z^T。则上述目标函数变为:
令矩阵\(C=Q○(S - \gamma O)\),则目标函数的线性项关于矩阵U第p行第q列的元素\(u_{ij}\)的结果为:
所以,对于元素\(u_{ij}\),最小化Q(U)即最小化上式,且其能够被认为是元素\(u_{ij}\)的权重。当这个权重小于0时,咱们将\(u_{ij}\)设为1,大于0时则设为-1。
Updating strategy:在每次更新时,当且仅当\(u_{ij}\)的权重绝对值大于一个阈值\(\eta\)时对其进行更新,在实验中,阈值\(\eta\)被设置为全部权重的均值。mean absolute value of projecttion results。为了增长计算效率,可使用同一个矩阵C对U的每一行进行更新,所获得的表现和elementi-by-element的结果相似。
Pruning strategy:在算法中仅对projection results(未二值化处理)中值接近0或则小于一个阈值\(\delta\)的元素进行更新,由于只有这些元素才有较大的几率而二值化到错误的编码。阈值\(\delta\)被设置为mean absolute value of projection results。
在论文的代码中,并无利用到\(\eta\)。只要\((\sum_ku_p^kC_q^k)u_{ij}<0\),就对\(u_{ij}\)取反。符合最小化目标函数的思想。
PTH在post-tuning阶段能够改善数据X的二值编码,使其更好得保留原有数据的相邻结构。可是咱们还须要对不在数据集X中的数据( 查询图片)进行测试。咱们称X为skeleton points。完整的post-tuning阶段包含两个步骤:
假设q为out-of-sample,\(z^q\)为q的原始二值编码,则q的post-tuning过程为:
其中\(S^q\)为q和X的相邻信息矩阵,B为X的post-tuned编码。post-tuning过程和哈希函数的学习过程时独立的,所以skeleton points X能够和哈希函数所用的训练集不一样,且后续实验代表,一小部分的数据集X就可使得post-tuning过程达到很好的效果。