A Survey on Deep Hashing Methods
综述:深度哈希方法
目录
摘要
最近邻搜索是寻找数据库中的数据点,使它们到查询的距离最小,这是计算机视觉、推荐系统和机器学习等各个领域的一个基本问题。哈希是计算效率和存储效率最广泛使用的方法之一。随着深度学习的发展,深度哈希方法显示出比传统方法更多的优点。本文对深度哈希算法进行了全面的研究。在损失函数的基础上,将深度监督哈希方法按照相似性保留的方式分为: 成对相似性保留、多对相似性保留、隐式相似性保留和量化。此外,我们还介绍了其他一些主题,如深度无监督哈希和多模态深度哈希方法。同时,我们还介绍了一些常用的公共数据集和深度哈希算法的性能测试方案。最后,我们在结论中讨论了一些可能的研究方向。
关键词
近似最近邻搜索,哈希学习,深度神经网络,相似性保留,深度监督哈希
1 简介
最近邻搜索是许多领域中最基本的问题之一,例如计算机视觉,推荐系统和机器学习。其目的是根据特定距离查找从数据集到查询的最接近点。但是,当数据量大且维度大时,准确找到最接近查询点的时间成本非常大。为了解决这个问题,人们开始更加关注近似最近邻搜索,因为在大多数情况下,它可以满足搜索需求并大大降低搜索复杂度。
哈希是最广泛使用的方法之一,因为它在计算和存储方面非常有效。其目的是将高纬度的原始特征转换为低维哈希码,以使原始相似对象的哈希码尽可能接近,而异类对象的哈希码则尽可能不同。现有的哈希方法主要分为两类,一类是局部敏感哈希[18,59],另一种是学习哈希。局部敏感哈希的目的是将原始数据映射到多个哈希桶中,以便原始距离对象越近,它们落入数据哈希的可能性就越大。相同的哈希桶。通过这种机制,已经提出了许多基于局部敏感哈希的算法[5,6,27,28,96,99],在计算和存储方面都显示出很高的优势。但是,为了提高搜索的查全率,这些方法通常需要构建许多不同的哈希表,因此它们在特别大的数据集上的应用仍然受到限制。
由于本地敏感哈希是独立于数据的,因此人们尝试通过学习良好的哈希函数来获取高质量的哈希码。自从学习哈希向量而不是随机投影的语义哈希[102,103]和频谱哈希[118]这两种早期算法以来,对哈希的学习一直吸引着计算机视觉和机器学习方面的大量研究兴趣。随着深度学习的发展[75],通过深度学习获得哈希码受到越来越多的关注,原因有两个。第一个原因是深度学习的强大表示能力可以学习非常复杂的哈希函数。第二个原因是深度学习可以实现端到端哈希码,这在许多应用程序中非常有用。在此调查中,我们主要关注深度监督的哈希方法,还包括其他一些主题。
深度监督哈希算法的设计主要包括两部分,即网络结构的设计和损失函数的设计。对于像MINST [76]和CIFAR-10 [71]这样的小型数据集,诸如AlexNet [73]和CNN-F [19]之类的浅层架构已被广泛使用。对于像NUSWIDE [25]和COCO [86]这样的复杂数据集,需要更深度次的架构,例如VGG [107]和ResNet50 [50]。损失函数设计的直觉是保持相似性,例如最小化原始空间中的相似性与哈希空间中的相似性之间的差距。通常通过使用语义标签信息或原始空间中的距离关系来获得原始空间中的相似性,这在不同的深度哈希方法中得到了广泛的研究。因此,我们主要关注后者的相似性保持方式。
继[116]之后,我们还根据相似性保留方式将深度哈希算法分类为:两对相似性保留,多向相似性保留,隐式相似性保留,量化和面向分类。对于每种方式,我们全面分析了相关文章如何设计损失函数,利用语义标签的优势以及使用了哪些其他技巧。此外,我们还介绍了其他一些主题,例如深度无监督哈希和多模态深度哈希方法。同时,我们还介绍了一些常用的公共数据集和用于衡量深度哈希算法性能的方案。最后,对一些关键算法进行了比较。
与其他关于哈希的调查[115,114,116,15]相比,该调查主要关注深度哈希方法以及它们如何设计损失函数。据我们所知,这是有关深度哈希的最全面的调查,有助于读者了解深度哈希的机制和趋势。
2 背景
2.1 最近邻搜索
给定d维欧几里德空间Rd,最近邻搜索问题是在具有n个点的有限集合Y⊂Rd中找到元素NN(x),使得
其中x∈RDis称为查询。距离ρ可以是欧几里得距离,一般ℓp距离,余弦相似性等。研究人员开发了许多精确的最近邻搜索方法,例如KD-tree [35],当d较小时效果很好。然而,由于维数的诅咒,最近邻搜索本质上是昂贵的[2] [3]。尽管KDtree可以扩展到高维情况,但效果不是很好,甚至比蛮力搜索还慢。
为了解决这个问题,已经提出了一系列近似近似邻居的算法[28,40,97,62]。这些方法的原理是高概率地找到最近的点,而不是准确地找到最近的点。这些ANN算法主要分为三类:基于哈希的[28,1,93],基于结果量化的[62,37,68,132]和基于图的[46,94,95]。这些算法在确保较高准确率的同时,极大地提高了搜索效率,因此在业界得到了广泛的应用。与其他两种方法相比,基于哈希的算法研究时间最长,人们同时研究最多。因为它具有提高计算效率和降低内存成本的巨大潜力。
2.2 哈希搜索
哈希算法的目的是将原始空间的特征映射到汉明空间,这将导致由0和1组成的紧凑型哈希码。由于计算机的计算和存储均以二进制形式实现,因此哈希码非常有效在存储和计算中。主要有两种类型基于哈希的搜索算法:哈希表查找和哈希代码排名。
用于加速搜索的哈希表查找的主要思想是减少距离计算的数量。数据结构称为哈希表(倒排索引的一种形式),由多个存储桶组成,每个存储桶均由哈希码索引。每个点都分配给一个共享相同哈希码的哈希桶。因此,学习这种算法的哈希编码的策略是使原始空间中相对较近的点具有相同哈希编码的可能性更高。查询到达时,我们可以根据查询的哈希码找到对应的哈希桶,以找到对应的候选集。完成此步骤后,我们通常会重新排列候选集中的点,以获得最终的搜索目标。但是,选择单个哈希桶作为候选集的召回率相对较低。为了克服这个问题,通常采用两种方法。第一种方法是同时选择一些接近目标存储桶的存储桶。第二种方法是根据不同的哈希码独立创建多个不同的哈希表。然后,我们可以从每个哈希表中选择相应的目标存储桶。
哈希码排名比哈希表查找相对容易。当查询到来时,我们只需计算查询与搜索数据集中每个点之间的汉明距离。然后选择汉明距离相对较小的点作为最近邻搜索的候选者。之后,通常会按照原始特征进行重新排序,以获得最终的最近邻居。与哈希表查找方法不同,哈希码排名方法更喜欢保留原始空间相似性/距离的哈希码。
2.3 深度神经网络
深度卷积神经网络(CNN)是一种特殊类型的神经网络,在诸如ImageNet [73]的一些图像处理和计算机视觉竞赛中表现出显着的性能提升。深度CNN强大而有效的学习能力主要来自多个特征提取阶段的利用,这些阶段可以从原始图像中自动学习特征表示。 2012年,A。Krizhevsky等人。 [73]通过AlexNet网络吸引了公众的注意,该网络的前5位错误率达到了15.3%,优于ImageNet数据集中以前最好的传统模型。自2012年里程碑以来,许多研究人员已尝试在卷积层序列中更深入地研究,以实现更好的性能。 2014年,K。Simonyan&A. Zisserman [108]引入了16层VGG模型,该模型链接了多个卷积层以赢得比赛。同年,M。Lin等。 [85]开发了初始模块的概念,C.Szegedy等人进一步开发了该模块。 [112]提出了一个更深的网络,称为GoogLeNet,具有22层。设计卷积神经网络模型的主要共同趋势是网络深度的增加。但是,随着深度的增加,由于难以优化极深的模型,网络涉及的错误率也在增加。 K.He等。 [51]提出了ResNet网络,通过残差学习将网络进一步深化到101层。为了避免繁琐的网络架构设计,Google Brain研究人员(B. Zoph和Q.V. Le,2017)[138]提出了一种新概念,称为神经架构搜索(NAS),该概念可以自动搜索最新的网络。此后,各种NAS网络已经发布到社区,例如PNAS [88],ENAS [100],EfficientNet [113]等。这些经典的网络架构进一步成为其他任务的骨干网,例如图像检索[116]和对象检测[47]。
3 深度监督哈希
3.1 哈希学习
给定输入项x,学习哈希是学习哈希函数f的任务,该函数将x映射到紧凑的哈希码b,以方便最近的邻居搜索。通过良好的哈希函数获得的哈希码应尽可能保留原始空间中的距离顺序,即,那些通过哈希码查询的项目也应尽可能接近原始空间中的查询。研究人员提出了许多传统的哈希函数,包括线性投影,核函数,球面函数,非参数函数[116,110,48],以学习紧凑的哈希码,并取得了重大进展。但是,这些简单的哈希函数不适用于大型数据集。由于深度学习的强大表示能力,越来越多的研究人员关注深度监督哈希并开发了许多新方法。这些方法比传统方法具有更高的性能。
深度监督哈希使用深度神经网络作为哈希函数,可以生成端到端的哈希码。一个好的深度监督哈希模型通常需要考虑四个问题:采用哪种深度神经网络体系结构,如何利用相似性和语义(类)信息,如何利用离散化概率训练神经网络。lem以及可以使用哪些其他技能来提高性能。
3.2 网络架构
传统的哈希方法通常利用线性投影和核,这表现出较差的表示能力。在提出AlexNet和VGGNet [73,107]之后,深度学习显示了其在计算机视觉中的优势,尤其是对于分类问题。越来越多的实验证明,网络越深,性能越好。结果,ResNet [50]利用了残差学习的优势,它可以训练非常深的网络,取得了明显更好的结果。之后,ResNet及其变体成为深度学习的基础架构[50,55,121]。遵循转移学习的思想,最新研究经常在大型数据集(如ImageNet)中使用经过预先训练的权重的流行架构。大多数研究利用诸如AlexNet,CNN-F之类的较浅的架构,并针对简单数据集(例如, MINST,CIFAR10。诸如VGGNet和ResNet50之类的更深度次的体系结构通常用于诸如NUSWIDE和COCO之类的复杂数据集。对于深度监督的哈希方法,最后一层(即分类层)通常被哈希层代替,哈希层与要素层具有紧密的联系。并且可以通过具有符号激活的哈希层的输出来获得哈希码。
网络体系结构是深度监督哈希的最重要因素之一,它会影响搜索的准确性和推理的时间成本。如果将体系结构退化为MLP或线性投影,则深度监督哈希将成为传统的哈希方法。尽管网络体系结构越深,搜索精度越高,但是它也增加了时间成本。我们认为需要考虑架构与数据集的复杂性。但是,所有深度哈希方法都可以更改其体系结构,而无需进行其他任何更改。因此,我们不使用网络体系结构对深度监督哈希算法进行分类。
3.3 相似性
在其余的部分中,我们总是定义每个样本i的输入,即网络的输出,偏置获得的二进制代码。我们分别将输入空间和哈希编码空间中项目对(xi,xj)之间的距离分别表示为ij和sh ij。在输入空间中,相似性是基本事实,主要包括项目距离和语义相似性。前者是要素的距离,例如欧几里得距离|| xi-xj ||| 2可以通过高斯函数或特征函数(即exp? −(ij)22σ2? Ido ij <τ,其中τ是给定的阈值。余弦相似性也很受欢迎。在深度监督哈希中,相似性通常是二进制的,如果两个项目具有共同的语义标签,则该值为1,而副签证为0。
在哈希编码空间中,距离dh ijis Hamming距离自然是自然的,它定义为值不同的位数,其公式为:
如果代码的值为1和0,则sh ij = M- dh ij。并且从0到M变化。结果,基于汉明距离的相似性定义为
如果代码的值是1和-1,则
相似性由内积定义,即sh ij =b⊤ibj。这些措施也可以扩展到加权案例。即
其中每个位的权重为λm,并且如果代码的值为1和-1,我们将得到
其中Λ= Diag (λ1,λ2,…,λM)是对角矩阵,并且每个对角项是对应的哈希位的权重。
3.4 损失函数
良好的损失函数是深度监督哈希成功的因素之一。设计损失函数的基本规则是保持相似性顺序,即最小化原始空间中的相似性与哈希空间中的相似性之间的差距。结果,几乎所有损失函数都包含相似性信息条款。例如,典型的损失函数是成对损失,使得相似的图像具有相似的哈希码(小的汉明距离),而不相似的图像具有不相似的哈希码(大汉明距离)。此外,还广泛利用了多重相似性保存损失项,尤其是三重形式,使得从原始空间和新空间计算出的多个项目之间的顺序尽可能一致。还有一些隐式和其他变体相似性保留损失项。
除了相似性信息