1. 程式人生 > >雜湊編碼學習(一)

雜湊編碼學習(一)

在資訊檢索中,我們給定一個query,要從訓練集中檢索出和它匹配的資訊,一種簡單的方法是計算該query與訓練集中的每個樣本的歐氏距離,然後對所有樣本的歐氏距離進行升序排序,取出前k個近鄰,從而得到搜尋的結果。通常情況下,訓練集中樣本的個數非常大,並且每個樣本的維度也不低,計算歐氏距離所需要的時間和空間複雜度都比較高,為了能實時地得到搜尋的結果,必須要想出一個方案,用來減少計算複雜度。
我們知道,計算機非常擅長邏輯運算,而乘法運算的計算複雜度相對要高很多,計算歐氏距離需要用到乘法和加法運算,故其計算複雜度比較高。鑑於計算機的這一特性,我們自然而然想到通過把原始的樣本向量對映成二值向量,然後計算二值向量之間的漢明距離(Hamming distance),從而得到搜尋結果。在資訊理論中,兩個等長字串之間的漢明距離是兩個字串對應位置的不同字元的個數。對於兩個向量a和b,計算它們的漢明距離只需用按位異或運算和加法運算即可,即:
HD(a,b) = sum(a xor b)
在matlab中,按位異或運算可以直接呼叫bitxor()函式。
在這篇博文中,筆者主要介紹iterative quantization(ITQ)演算法(原始碼連結:[hashing-baseline-for-image-retrieval](https://github.com/willard-yuan/hashing-baseline-for-image-retrieval))。ITQ演算法的主要思想是,對訓練樣本集X,其中X的每行表示一個樣本,對其進行歸一化處理,使得X的每一列的均值都為零,也就是座標原點位於所有樣本的中心,然後用PCA或者CCA方法,對X進行降維(如圖1),對降維之後的樣本,再進行旋轉(如圖2),使得所有旋轉後的樣本距離黑色的正方形的頂點的距離最小。
![圖1 用PCA降維後的樣本](https://img-blog.csdn.net/20160826154524267)
![圖2 旋轉後的樣本](https://img-blog.csdn.net/20160826154641785)
參考文獻:Iterative Quantization: A Procrustean Approach to Learning Binary Codes