Deep Hashing Network for Efficient Similarity Retrieval
Introduce
这是发表在AAAI-2016的一篇paper,下载地址
在本篇论文之前的监督Hash方法,第一步通过手动学习或者机器学习得到特征向量,第二步学习二进制的Hash Code。然而,这种方法存在明显的缺点,首先提取的特征并不一定完善,并且学习的二进制的Hash Code也有量化的误差。所以作者提出了Deep Hashing Network(DHN)。DHN模型主要从以下四个部分对之前的方法进行改进:
- 使用CNN来学习图像的特征。
- 使用CNN的全连接层来生成二进制码。
- 减少交叉熵损失,使原始空间相似的图片在海明空间也相似。
- 减少量化误差提高Hash Code的质量。
在下面详细介绍一下改进过程:
Deep Hashing Network
相似性检索中,给定训练集N个points {
xi}Ni=1 ,每一个是一个D维的特征向量, x∈RD 。每一对特征向量之间有一个相似性的label sij ,如果 xi 和 xj 相似, sij=1 ;如果 xi 和 xj 不相似, sij=0 。我们的目标就是学习到非线性的hashing function f:x↦h∈{
−1,1}Kh=f(x) 。
在本篇论文中,作者提出了如下图所示的网络结构,网络的输入是一组 {
xi,xj,sij} 三元组。
figure1 显示的图片是AlexNet的修改,原始AlexNet网络结构con1-con5是5个卷积层,fc6-fc8是三个全连接层。对于每一个全连接层l总会学习到一个非线性的mapping。
zli=al(Wlzl−1i+bl)
这里 zli 是原始的数据 xi 在l层的表示, Wl,bl 分别表示l-th 层网络的权重和偏置, al 表示激活函数,这里采用了ReLU函数 al(x)=max(0,x) 。由于需要将原始的数据映射为K维的hash code,作者修改了网络的第8层,将AlexNet的fc8的softmax classifier变成了有K个隐节点的fch layer。 hi=zli,l=8 。为了保证fch layer的输出的范围在[-1,1]之间,作者将该层的激活函数修改为 al(x)=tanh(x) 。为了保证fch layer输出的hash code 性能良好,需要保持hash code 和原始的S中相似性一致,并且输出的二进制码量化误差最小。
一对二进制码 hi 和 hj ,海明距离和内积之间有以下的性质
distH(hi,hj)=12(K−⟨hi,hj⟩)
图像的label已知的,通过label可以得到相似性的矩阵 S={ sij} ,那么最好的目标就是在相似性矩阵已知的情况下,根据贝叶斯公式可知,后验的概率与先验概率和似然函数的乘积正相关:
logp(H|S)∝logp(S|H