Paper Note - Learning to Hash with Binary Deep Neural Network
来源:互联网 发布:数据管理软件开发 编辑:程序博客网 时间:2024/06/05 11:13
本文来自ECCV2016,这里主要记录一下自己读完论文的收获。
原文链接:Learning to Hash with Binary Deep Neural Network - ECCV2016
自制ppt:PPT - Learning to Hash with Binary Deep Neural Network
以前的工作中存在一个极具挑战性的问题:由于二值化导致待优化的目标函数是非光滑的(这样就导致对目标函数求偏导等操作不能执行)
摘要
本篇文章借鉴了以前的一些工作,将神经网络定义为一个hash function,以此来将输入样本映射成hash码,并限制网络中的一个最后一个隐含层直接输出哈希码,同时还考虑了哈希码的几个特性:
1.每位属于{-1,1};
2.相似性保持,即相似的样本其对应的哈希码也相似(海明距离小);
3.独立性,即哈希码不同位之间相互独立;
4.平衡性,即哈希码的各个位取-1和+1的个数接近于1:1.
作者将其该神经网络命名为Binary Deep Neural Network
算法介绍
接下来作者介绍了使用 Binary Deep Neural Network 的无监督哈希和有监督哈希两种算法:
符号表示
无监督哈希算法神经网络框架
这里需要说明一下,有的深度哈希是在CNN+FC层后加一个哈希层生成哈希码,在这里并没有对CNN进行优化,因此在第一层的输入可以直接使用预训练得到的CNN特征,并且前n-2层使用Sigmoid函数作为激活函数,后两层使用identity function(如y=x,即输入作为其输出)作为激活函数,在第n-1层得到哈希码,第n层对输入X进行重构,使得H(n)尽量接近X。
无监督哈希算法目标函数定义
首先考虑哈希码第1、2个特性(见前述),可以得到下面的函数形式:
第一项是为了是的重构误差尽可能小以保持相似性,第二项正则项限制W防止过拟合,限制项使得哈希码只取-1或+1;
又考虑到独立性和平衡性,得到下面函数形式:
其中第三项为了保证独立性,第四项保证平衡性(mx1的矩阵在符号表示中说明所有元素均为1,因此第四项最小时应该是-1和+1的数目相等的时候(注意用的是l2范数))
无监督哈希算法描述
先用ITQ初始化B0,神经网络各层的偏移向量c初始化为0,前n-2层的权重W均初始化为从当前层L的输出向量H(l)组成的协方差矩阵中,求其特征向量并从大到小排序,再取后一层L+1层的隐含单元数量s(L+1)个特征向量作为前n-2层的权重W的初始值(有点绕,可以自己思考一下),第n-1层的权重W(n-1)初始化为DxL的全为1的矩阵,
初始化完毕后,使用L-BFGS方法固定B来求解W、c,然后固定W、c,使用discrete cyclic coordinate descent(离散循环坐标下降):
Hadamard product定义为两个矩阵相应元素相乘,如下图:
同时对W,c求偏导:
再用delta表示求得的偏导形式:
然后以此公式进行反向传播算法来对神经网络各层的权重和偏移进行优化。
当固定W,c时,
对B的优化使用discrete cyclic coordinate descent(离散循环坐标下降),最后得到:
这两个方法没有去细究,感觉L-BFGS就是定义一个delta使得对W,c求偏导时易于计算,而discrete cyclic coordinate descent则是对坐标下降的改进。
有监督哈希算法描述
有监督哈希算法与无监督哈希算法其实差别不大,主要是现在有了相似性矩阵S,而且把最后一层重构层去掉,在最后一层生成哈希码,其中相似性矩阵S的定义如下:
因此无监督哈希可看做是保持近邻间的相似性,而有监督哈希则是保持标签的相似性。
有监督哈希算法目标函数定义
相关参数(W,c,B)的优化详见论文,主要是L-BFGS算法中delta的定义有所改变,而求解B则变得更加简单:
因此:
总结
实验主要是与其他方法进行比较,效果有所提升。
本文主要是考虑了哈希码的几种特性,使用神经网络输出哈希码(identity function输出连续值,还需使用sign函数来生成哈希码)。
这里需要提一下的是,作者以前已经写过一篇类似文章,这篇文章主要是基于以前那篇文章的一点改进,论文链接: Discrete Hashing with Deep Neural Network
- Paper Note - Learning to Hash with Binary Deep Neural Network
- [Paper note] Xception: Deep Learning with Depthwise Separable Convolutions
- How to Train Your Deep Neural Network with Dictionary Learning(翻译)
- Simultaneous Feature Learning and Hash Coding with Deep Neural Networks
- Neural Network and Deep Learning
- Deep learning与Neural Network
- Learning Compact Binary Descriptors with Unsupervised Deep Neural Networks
- Learning Compact Binary Descriptors with Unsupervised Deep Neural Networks
- Explaining How a Deep Neural Network Trained with End-to-End Learning Steers a Car论文笔记
- Deep-Learning NotePad2 : Deep Neural network
- neural networks deep learning Logistic Regression with a Neural Network mindset参考答案
- 《Neural Networks and Deep Learning》codes' note
- neural networks deep learning Deep Neural Network Application Homework
- neural network and deep learning (1)
- neural network and deep learning (2)
- neural network and deep learning(笔记二)
- neural-networks-and-deep-learning network.py
- Deep-Learning NotePad3 : convolutional neural network
- LA 4253 Archery
- XSS 攻击原理
- QNX系统BSP开发研发与应用,QNX技术解答-项目开发-软件开发
- Java多线程之i++的安全性问题
- Linux进程控制编程(五)
- Paper Note - Learning to Hash with Binary Deep Neural Network
- js-return返回多个值,通过对象的属性访问
- Tutorial: 344. Reverse String
- 浅识 VB.net
- 数组-选择排序-记录下标
- 自定义了一个标题栏类TitleLayout
- 基于vue.js开发的demo—天气APP
- SourceInsight使用技巧
- JAVA “初始化与清理”