[ACM 2018] Post Tuned Hashing_A New Approach to Indexing High-dimensional Data [paper] [code]

Zhendong Mao, Quan Wang, Yongdong Zhang, Bin Wang.

1. Overcome

  • 大多数哈希方法都有二值化过程,二值化加速了检索过程,但同时难以避免得也破环了原始数据的相邻结构。

2. Contribute

  • 提出了新的哈希方法——PTH,包含三个阶段:projection,binarization和post-tuning。其中post-tuning阶段可以在利用任意哈希方法得到哈希二值编码之后,再独立得进行post-tune处理以重建被二值阶段破坏的数据相邻结构,以改善算法表现。
  • 为post-tuning算法提出了一个out-of-sample扩展,使得PTH算法可以处理训练数据集之外的数据,如测试集。
  • PTH在五个数据集的测试表现超过的所有的state-of-the-art算法。

3. Algorithm

3.1 POST TUNED HASHING

之前的哈希方法大都有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可以非常简单得应用于广泛的哈希方法中以改进其二值编码表现。

3. 2 Overall Framework

矩阵S表示原始数据X间的相似信息,其具体定义如下:

V表示原始数据X对应的二值编码B间的相似信息,其具体定义如下:
\[
V_{ij} = (b_i · b_j )/ m
\]
此时,将neighbood error改写为:
\[
L = ||S-\frac{1}{m} B^TB||_{F}^2
\]

定义Upost-tuning matrix,且Z=H(X),此时,目标函数为:

矩阵U中的每一个元素代表Z中对应位置的元素是否需要更新以得到更小的neighborhood error。PTH方法最终得到的改善后的哈希编码为:B=U ○ Z。

3.3 Optimization Algorithm

Observation:目标函数中的所有二次项都是常数(取值只为1/-1),因此最小化目标函数等同于最小化所有线性项。

令\(\gamma=1/m\),则目标函数变为:

上述目标函数关于矩阵第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}\)取反。符合最小化目标函数的思想。

3.4 Out-of-Sample Post-Tuning

PTH在post-tuning阶段可以改善数据X的二值编码,使其更好得保留原有数据的相邻结构。但是我们还需要对不在数据集X中的数据( 查询图片)进行测试。我们称X为skeleton points。完整的post-tuning阶段包含两个步骤:

  1. 对skeleton points进行post-tune处理;
  2. 对out-of-samples进行post-tune进行处理使得其二值编码能够和X保持一致。

假设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过程达到很好的效果。

Post Tuned Hashing,PTH的更多相关文章

  1. Spherical Hashing,球哈希

    1. Introduction 在传统的LSH.SSH.PCA-ITQ等哈希算法中,本质都是利用超平面对数据点进行划分,但是在D维空间中,至少需要D+1个超平面才能形成一个封闭.紧凑的区域.而球哈希方 ...

  2. Locality Sensitive Hashing,LSH

    1. 基本思想 局部敏感(Locality Senstitive):即空间中距离较近的点映射后发生冲突的概率高,空间中距离较远的点映射后发生冲突的概率低. 局部敏感哈希的基本思想类似于一种空间域转换思 ...

  3. 详解Pytorch中的网络构造,模型save和load,.pth权重文件解析

    转载:https://zhuanlan.zhihu.com/p/53927068 https://blog.csdn.net/wangdongwei0/article/details/88956527 ...

  4. 深入一致性哈希(Consistent Hashing)算法原理,并附100行代码实现

    转自:https://my.oschina.net/yaohonv/blog/1610096 本文为实现分布式任务调度系统中用到的一些关键技术点分享——Consistent Hashing算法原理和J ...

  5. [Algorithm] 局部敏感哈希算法(Locality Sensitive Hashing)

    局部敏感哈希(Locality Sensitive Hashing,LSH)算法是我在前一段时间找工作时接触到的一种衡量文本相似度的算法.局部敏感哈希是近似最近邻搜索算法中最流行的一种,它有坚实的理论 ...

  6. linux服务之tuned

    RHEL/CentOS 在 6.3 版本以后引入了一套新的系统调优工具 tuned/tuned-adm,其中 tuned 是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系 ...

  7. 2.Hashing

    散列法(Hashing)或哈希法是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来 ...

  8. 局部敏感哈希-Locality Sensitive Hashing

    局部敏感哈希 转载请注明http://blog.csdn.net/stdcoutzyx/article/details/44456679 在检索技术中,索引一直须要研究的核心技术.当下,索引技术主要分 ...

  9. 海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing, LSH

    http://blog.csdn.net/pipisorry/article/details/48858661 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

随机推荐

  1. markdownpad破解

    下载在腾讯软件下载比较快. 破解我就不写步骤了,直接给个链接 https://blog.csdn.net/geekqian/article/details/74455409 授权邮箱:Soar360@ ...

  2. [项目实践] python文件路径引用的规则,记一次使用sys.path[0]的问题,及如何区分 ../与 ./的使用场景

    下面是一个获取配置的代码 def getValue(self,section,option): """ @file: string,the name of the con ...

  3. 5、爬虫系列之scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

  4. vuejs_01项目启动

    知识点 .npm 相关命令 npm list -g --depth= 查看全局安装了哪些依赖 项目启动 npm install vue-cli -g 安装vue脚手架 vue init webpack ...

  5. Python--详解Python中re.sub

    给出定义: re.sub(pattern, repl, string, count=0, flags=0) Return the string obtained by replacing the le ...

  6. Activity与view

    Activity的作用:一个Activity相当于一个容器,用于存放各种控件的容器,也可以理解为是与用户交互的接口 创建Activity的要点:  1.一个Activity就是一个类,并且这个类要继承 ...

  7. (java项目)坦克大战 2.0

    这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学py ...

  8. ROS教程4 ROS自定义srv类型及使用

    创建srv文件 在上一节单独为自定义的消息和服务的包 test_msgs 里面 创建 srv文件夹 进入创建 testsrv.srv 文件 ,内容为: (srv文件和msg文件类似,唯一不同的是它包含 ...

  9. leetcode 51. N-Queens 、52. N-Queens II

    51. N-Queens 使用isValid判断当前的位置是否合法 每次遍历一行,使用queenCol记录之前行的存储位置,一方面是用于判断合法,另一方面可以根据存储结果输出最终的结果 class S ...

  10. flask 路由和视图

    路由设置的俩种方式 @app.route('/xxx') def index(): return 'index' ------------------------------------------ ...