[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過程達到很好的效果。