编辑推荐: |
本文首先介绍多输入网络的应用背景,一个是siamese网络,一个是triplet网络,其次介绍了网络结构原理和应用,希望对您的学习有所帮助。
本文来自于知乎,由火龙果软件Alice编辑、推荐。 |
|
1 多输入网络的应用背景
首先我们说说在什么情况下,需要多个输入,只以纯图像应用为例。
1.1 图像验证与匹对
早在上个世纪90年代的时候,LeCun等研究人员就开始利用神经网络陆续进行一些研究,比如我们熟知的大名鼎鼎的LeNet5,但这绝不是唯一,今天我们来说他们的另一种网络结构,Siamese
Network,网络细节我们后面这些,这里先说应用背景。
签名验证:
无独有偶,还是从手写字开始,同样是用于银行,用于验证签名是否一致。两个网络都是同样规格的图像输入,最后输出一个相似度。
看到这里,你应该能够想起来如今它的更加广泛的应用,没错,就是人脸验证,或者说人脸识别了。
其实用的时候都不需要两个输入,因为可以建立一个离线数据集专门用于检索匹配。
而且,你可以在此基础上拓展出非常多的玩法,什么夫妻脸之类的。
1.2 目标跟踪
目标跟踪是一个什么过程?就是在时序帧中搜索目标的过程,本质上就是检索。
不管是传统的目标跟踪中的生成模型和判别模型,还是用深度学习来做目标跟踪,本质上都是来求取目标区域与搜索区域的相似度,这就是典型的多输入。
用深度学习来做,就是一个小图像和一个大图像分别输入网络,输出相似度。
1.3 排序
还有一类问题,可以用多输入网络来做,那就是排序。有的时候,我们很难估计一个人的实际年龄或者颜值,但是估计相对年龄和颜值就简单多了。
而且,在此之上,做些什么谁更可爱,谁更成熟之类的,可以想出无数花样,解释的通就行了。
02 多输入网络
在这里,给大家介绍两个常见的网络,一个是siamese网络,一个是triplet网络。
2.1 siamese network
Siamese本意是“暹罗”人或“泰国”人,后在英语中指“孪生”、“连体”,这是一个外来词,来源于十九世纪泰国出生的一对连体婴儿,具体的故事我们就不说了,挺有看头,大家可以自己去了解。
顾名思义,有两个输入,两个网络,根据这两个网络是否共享权重,可以分为真孪生网络siamese network和伪孪生网络pseudo-siamese
network。
真孪生网络siamese network的结构示意图如下:
伪孪生网络pseudo-siamese network的结构示意图如下:
可以看出差别就在于是否共享权重,loss的选择就多了,相似度计算方法就多少,它的计算方法就有多少,交叉熵,欧式距离,余弦距离等都很常用。
那么是否需要共享权重呢?这就看研究的问题而定了,很明显不共享权重有更大的发挥空间,这个问题本文不展开讲。
2.2 triplet network
如果将上面的二输入拓展为三输入怎么样?做人脸识别的同学想必不陌生。
没错,就是triplet network。
大家都知道,训练人脸识别网络的时候需要输入图像对来判断是不是同一个人,loss是两个样本之间的相似度。不过,光是相似度是不够的。
大家在研究的是同一个问题,如果想得到更优良的性能,不仅要将正负样本区分开,还要让类内更加紧凑(方差小),类间更加疏远(方差大)。
triplet network将输入改成三个,训练的时候使用一个正例+两个负例,或者一个负例+两个正例。
训练的目标就是上面的:同类别间的距离尽可能的小,不同类别间的距离尽可能的大。
基准样本x和负样本x-之间的距离定义如下:
基准样本x和正样本x+之间的距离定义如下:
然后优化目标就等于:
我们假如网络训练的特别好,令margin=1,此时
那么上面的距离:
损失也就趋向于0,当然这种要求是不可能达到的,也不合理,因为有的正样本的确不那么相似,有的负样本的确很相似,强行学习过拟合风险就增加了。
所以实际用的时候,这个margin应该取一个合理的值,而且样本的选择也很有技巧,所以triplet
network没有看起来那么好训练。Anyway,这还是很优雅的思想的。
今天就这么多,更多的并行的输入也是有的,就作为大家的延伸阅读吧。
|