Notation
該論文中應用到較多符號,為避免混淆,在此進行解釋:
n:原始數據集的大小
l:實驗中用於監督學習的數據集大小(矩陣S行/列的大小)
m:輔助數據集,用於得到基於核的哈希函數
r:比特位數量/哈希函數的個數
1. Introduction
先前的哈希檢索方法,要么精度低,要么目標函數過於復雜導致導致訓練慢。在大規模的圖像數據檢索中,這些方法就不太適用。先前的哈希方法都是對漢明距離進行直接優化,但是因為漢明距離是nonconvex和nonsmooth,難以優化。在本文中,作者利用漢明距離和編碼內積等價的特點,得到了一個非常高效易於優化的目標函數。同時,作者利用的內積的可分性,設計了一個貪婪算法逐比特位得對哈希函數進行求解。此外,為了適應線性不可分的數據,作者還應用了基於核的公式。得到了Kernel-Based Supervised Hashing(KSH)。並在CIFAR-10和TINY數據集上與無監督、半監督、監督等多種哈希方法進行比較,證明了KSH具有最好的表現。
2. Kernel-Based Supervised Hashing
2.1 Hash Functions with Kernels
論文利用基於核的哈希函數,解決了原始數據線性不可分的問題。對應的哈希函數如下:
該哈希函數由Kernelized Locality-Sensitive Hashing(KLSH)推導而來。查閱了下這篇文獻,整個核哈希函數的推導過程大致如下:兩個數據點間的相似性可由向量內積\(sim(x_i, x_j) = (x_i^{T}x_j) / (||x_i||_2||x_j||_2)\)來表示,為了解決原始數據的線性不可分問題,KLSH引入了核函數,於是得到了:
之后,經由均值、方差、特征值分解等等一系列的代數變換,得到了上述基於核的哈希函數。
In order to maintain efficiency and to maintain sublinear time searches, we want p to be much smaller than n. For example, \(p = O(\sqrt n)\)would guarantee that the algorithm maintains sublinear search times.
為了確保線性的搜索速度,KLSH中建議m(p)的的取值為\(O(\sqrt n)\)。
2.2 Manipulating Code Inner Products
在監督學習中,通過類別標簽信息,原始數據集\(X\)可以划分為\(M\)和\(C\)兩個集合,其中\(M\)中的數據點都是相似的,\(C\)中的數據點都是不相似的。通過對\(X\)進行部分采樣,取\(l\)個樣本構造相似矩陣\(S\)如下:
我們的目標是通過相似矩陣優化得到具有局部敏感特征的哈希函數,但是直接對漢明距離\(D_h(x_i,x_j)=|{k|h_k(x_i)≠h_k(x_j),1≤k≤r}|\)進行優化在數學上是難以求解的。因此,論文采用了code inner products來進行優化。code inner products可以如下表示:
由於r為碼長是個常熟,因此從上式可以看到code inner products等價於漢明距離,存在一一映射的關系,我們可以通過優化code inner products的方法進而優化漢明距離。得到目標函數如下:
其中矩陣\(H\)表示向量\(x\)的哈希編碼。接着再通過引入2.1節中的核哈希函數,得到最終目標函數如下:
2.3 Greedy Optimization
通過簡單的代數變換,可以得到目標函數如下:
其中\(a_k\)為第k個哈希函數。在優化時,逐比特位得進行優化,即先優化\(a_1、a_2 ... a_{k-1}\),然后再之前的基礎上再優化\(a_k\)。在此定義一個殘差矩陣為:
顯然,有\(R_0 = rS\)。因此,哈希函數可以通過最小化如下損失函數進行求解:
通過去掉常數項,可以得到哈希函數\(a_k\)的目標函數為:
Spectral Relaxation:因為此時的目標函數時非凸的,難以進行優化,因此論文應用了Spectral relaxation trick的方法,去掉了sgn函數,得到目標函數如下:
顯然,通過變換,我們可以得到一個廣義特征值問題\(K_l^TR_{k-1}K_la = \lambda K_l^TK_la\)。通過求解最大特征值對應的特征向量,並進行適當的尺度縮放以滿足限制條件,我們可以得到\(a\)的解。但是,這個方法在l非常大時,優化結果不理想,因此KSH僅將這部作為\(a_k\)的初始化選擇。
Sigmoid Smoothing:通過用sigmoid函數替換sgn函數,我們可以對目標函數進行優化。之后通過牛頓梯度下降方法,可以得到\(a_k\)的最優解(局部)。
算法流程如下:
在算法運行時,先初始化\(R_0 = rS\),在這個基礎上逐步對\(a_1、a_2 ... a_k\)等進行優化。因為有着Spectral Relaxing中限制條件的約束,因此在一開始對\(a_1\)進行優化時,經由廣義特征值求解、梯度下降之后得到的哈希函數\(a_1\)不會使得\(R_0 = rS\),優化結果只與\(a_1\)本身相關,和其他哈希函數無關。
從本質上看,\(rS\) 的信息是由r個哈希函數組合而成的,且哈希函數之間互相獨立不相關。因此,在對\(a_1\)進行優化之后,我們可以從\(rS\)中去除掉哈希函數\(a_1\)相關的信息,繼而對剩下的哈希函數進行優化。整個算法的思想不是直接對全局的目標函數進行優化,而是盡可能貪心地、逐比特位進行優化,這也是為什么算法稱為Greedy Optimization的原因(個人理解)。
3. Experiments
在對查詢點進行查詢時,將漢明距離小於一定距離的圖像作為查詢結果返回。
-
metric distance neighbors
當距離小於一定閾值時,即認為兩個數據是相似的。
-
semantically similar neighbors
只有當兩個屬於的標簽一致時,才認為兩個數據是相似的。具有更強的置信度。
-
Hashing table的構造
個人理解:m個數據,經過c個哈希函數映射后,得到矩陣\(H∈R^{m*c}\),矩陣H的第i行代表第i個數據對應的哈希編碼,矩陣的第j列代表哈希表的第j個bucket。
評價標准:
-
precision
對於一個查詢,返回了一系列的文檔,正確率指的是返回的結果中相關的文檔占的比例,定義為:precision=返回結果中相關文檔的數目/返回結果的數目。
-
recall
召回率則是返回結果中相關文檔占所有相關文檔的比例,定義為:Recall=返回結果中相關文檔的數目/所有相關文檔的數目。
-
mAP
正確率只是考慮了返回結果中相關文檔的個數,沒有考慮文檔之間的序。對一個搜索引擎或推薦系統而言返回的結果必然是有序的,而且越相關的文檔排的越靠前越好,於是有了AP的概念。對一個有序的列表,計算AP的時候要先求出每個位置上的precision,然后對所有的位置的precision再做個average。如果該位置的文檔是不相關的則該位置 precision=0。
-
the success rate of hash lookup
4. Conclusions
KSH算法具有以下三個優點:
- 利用核函數解決了原始數據不可分的問題;
- 設計了一個基於coder inner products的目標函數,易於優化;
- 利用貪心算法逐比特位得求解方法。