一.問題來源
來源於換關鍵字,從LSH轉換為hash檢索,這要感謝李某。
二.解析
筆者認為關鍵思想是數據降維后使用矩陣旋轉優化,其他和LSH一樣的。
2.1 PCA降維
先對原始空間的數據集 X∈Rn×d 用PCA進行降維處理,設經過PCA降維后的數據集為 V∈Rn×c ,該問題就可以轉化為將該數據集中的數據點映射到一個二進制超立方體的頂點上,使得對應的量化誤差最小,從而而已得到對應該數據集優良的二進制編碼。
對於PCA降維部分,不做詳解。設 v∈Rc 為原特征空間中某一數據點經過PCA降維后的表示形式,對應在超立方體中的頂點用 sgn(v)∈{−1,1}c 來表示,要使量化誤差最小,即 v∈Rc 與 sgn(v)∈{−1,1}c的歐式距離最小,即 min||sgn(v)−v)||2 ,對於所有的數據點進行二進制編碼后用B表示,PCA降維后 V=X×W,對整個數據集為 min||B−V||2 。由於對矩陣進行旋轉可以降低量化誤差。
2.2 ITQ優化求解
對投影后的矩陣V進行隨機旋轉后,量化誤差降低至0.93,對於找到的最優的旋轉矩陣,量化誤差降低至0.88(矩陣與正交矩陣相乘實際上就是對矩陣做旋轉)。基於這樣一個事實,考慮將投影后的數據集V進行旋轉變換, min||B−V||2 便變換為 min||B−VR||2 ,R為旋轉矩陣。整個問題域就變成了 min||B−VR||2 的優化問題,即找出最優的旋轉矩陣R和與之對應的編碼B。該式的優化可以采用交替跌倒的求解方法:先生成隨機矩陣並對其進行SVD分解得到對應的正交矩陣作為R的初始值,然后固定R求B, B=sgn(V×D) (注意這里截距 b=0 ,因為在原空間已對數據中心化,非常重要),B求出來再通過對 B×V 進行SVD更新R,交替迭代若干次即可,文中選用的是50次。
通過上面過程便可經過PCA降維后的數據完成編碼過程,后面的相似性采用漢明距離進行度量,這里不贅述。
總結一下,整個過程可以概括為:先對數據集進行PCA降維,然后尋找量化誤差最小的旋轉矩陣即可得到對應該最優旋轉矩陣下的特征向量的二進制編碼。
參考:CVPR 2011《Iterative Quantization: A Procrustean Approach to Learning Binary Codes》論文閱讀筆記。
http://blog.csdn.net/xiaoshengforever/article/details/20719485