Post Tuned Hashing,PTH

2023-10-17 22:40
文章标签 post tuned hashing pth

本文主要是介绍Post Tuned Hashing,PTH,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[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

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

a92fa7d4ly1fxzewxy6sgj217c0n9h10.jpg

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间的相似信息,其具体定义如下:

a92fa7d4ly1fxzfp2anl1j20cg02674c.jpg

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),此时,目标函数为:

a92fa7d4ly1fxzfvj863uj20dx02zq34.jpg

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

3.3 Optimization Algorithm

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

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

a92fa7d4ly1fxzg0or82vj20c102gmx8.jpg

上述目标函数关于矩阵第p行的表示为:

a92fa7d4ly1fxzg1qlj5dj20gr02d0sv.jpg

令z_p为矩阵Z第p行的行向量,Q = Z*Z^T。则上述目标函数变为:

a92fa7d4ly1fxzg4m1yakj20aw025dft.jpg

令矩阵\(C=Q○(S - \gamma O)\),则目标函数的线性项关于矩阵U第p行第q列的元素\(u_{ij}\)的结果为:

a92fa7d4ly1fxzg5zah0fj207702uq2v.jpg

因此,对于元素\(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

a92fa7d4ly1fxzoni0k8rj20kq0fsdj2.jpg

在论文的代码中,并没有利用到\(\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过程为:

a92fa7d4ly1fxzowo1dj5j20cx02mjrl.jpg

其中\(S^q​\)为q和X的相邻信息矩阵,B为X的post-tuned编码。post-tuning过程和哈希函数的学习过程时独立的,因此skeleton points X可以和哈希函数所用的训练集不同,且后续实验表明,一小部分的数据集X就可以使得post-tuning过程达到很好的效果。

a92fa7d4ly1fxzp0tpmy3j20ki0jvwlq.jpg

转载于:https://www.cnblogs.com/CSLaker/p/10096556.html

这篇关于Post Tuned Hashing,PTH的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228402

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

项目一(一) HttpClient中的POST请求和GET请求

HttpClient中的POST请求和GET请求 一、HttpClient简述 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLU

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

ajax xmlhttprequest使用post传参数并向后台获取数据

ajax xmlhttprequest向后台传数据有两种方式,一种是直接在地址URL后面加入参数,后台用Request.QueryString来获取,另外一种是采用POST来传,send方法发送参数对,比如send("a=3&b=4"),后台用Request.Form[“a”]来获取3,同理Request.Form["b"]获取4   前台代码: <%@ Page Titl

Flutter-使用dio插件请求网络(get ,post,下载文件)

引入库:dio: ^2.1.13可直接运行的代码:包含了post,get 下载文件import 'package:flutter/material.dart';import 'package:dio/dio.dart';void main() {runApp(new MaterialApp(title: 'Container demo',home: new visitNetPage(),)

【python 爬虫】python如何以request payload形式发送post请求

普通的http的post请求的请求content-type类型是:Content-Type:application/x-www-form-urlencoded, 而另外一种形式request payload,其Content-Type为application/json import jsonurl = 'https://api.github.com/some/endpoint'payload

Python实现requests-post(Multipart/form-data格式)boundary=----WebKitForm

这种模式相比于普通post,实在太烦了,这种基本都是用来上传文件(包括图片、excel、doc等) import requestsfrom requests_toolbelt.multipart.encoder import MultipartEncoderimport jsonurl = 'http://www.requests-post.com'headers = {'Accept':