财经

> 财经资讯 > 正文阅读

孪生网络实现小数据学习!如何找两张图片的相似点

时间:2017-07-18 17:25:08 来源:运营商世界网 评论: 0 人参与

原标题:孪生网络实现小数据学习!如何找两张图片的相似点

孪生网络实现小数据学习!如何找两张图片的相似点

原文来源:hackernoon

作者:Harshvardhan Gupta

「机器人圈」编译:嗯~阿童木呀、多啦A亮

深度神经网络是涉及图像分类问题的重要算法。这其中的部分原因是,它们具有大量的可训练的参数。然而,这是以需要大量的数据为代价的,而这有时是不可获得的。那么接下来,我就将讨论小样本学习(One Shot Learning),其旨在缓解诸如此类的问题,以及如何在PyTorch中实现一个使用它的神经网络。

本文假设你对神经网络知识有所了解。

本文相关材料线索来自于此篇论文

标准分类vs小样本分类

几乎所有分类模型使用的都是标准分类。输入被馈送到一系列层,最后输出类概率。如果你想通过猫来预测出狗,你可以在你所期望的预测时间内训练相似的(但不相同的)狗/猫图片模型。当然,这要求你有一个数据集,与你使用模型进行预测时所期望的数据集类似。

另一方面,小样本分类模型的要求就是,你只要有一个你想要预测的每个类的训练样本就可以。该模型仍然在几个实例上进行训练,但是它们只需要与你的训练样本相类似。

可以说明此问题的一个很好的例子就是面部识别。你可以在一个包含少数人的各种角度、拍摄光线等数据的数据集上训练此小样本分类模型。然后,如果你想要判别某人X是否在图像中,那么就可以拍摄该人的一张照片,然后询问模型该人物是否在该图像中(请注意,该模型没有使用某人X的任何照片进行训练)。

作为人类,我们往往只需要一次会面就可以通过面部识别出一个人,而且对于计算机来说,这是很可取的,因为大多数情况下数据处于最小值。

孪生网络

孪生网络是一种特殊类型的神经网络架构。与一个学习对其输入进行分类的模型不同,该神经网络是学习在两个输入中进行区分。它学习了两个输入之间的相似之处。

架构

孪生网络由两个完全相同的神经网络组成,每个都采用两个输入图像中的一个。然后将两个网络的最后一层馈送到对比损失函数,用来计算两个图像之间的相似度。我已经做了一个图解用来帮助解释这个架构。

它具有两个姐妹网络,它们是具有完全相同权重的相同神经网络。

图像对中的每个图像将被馈送到这些网络中的一个。

使用对比损失函数优化网络(我们将获得确切的函数)。

对比损失函数(Contrastive Loss n)

孪生架构的目的不是对输入图像进行分类,而是区分它们。因此,分类损失函数(如交叉熵)不是最合适的选择。相反,这种架构更适合使用对比函数。根据直觉而言,这个函数只是评估网络区分一对给定的图像的效果如何。

点击此处链接获取更多详情

对比损失函数如下:

等式1.0

其中Dw被定义为姐妹孪生网络的输出之间的欧氏距离(euclidean distance)。数学上欧氏距离是:

等式1.1

其中Gw是其中一个姐妹网络的输出。X1和X2是输入数据对。

等式1.0说明

Y值为1或0。如果模型预测输入是相似的,那么Y的值为0,否则Y为1。

max()是表示0和m-Dw之间较大值的函数。

m是大于0的边际价值(margin value)。有一个边际价值表示超出该边际价值的不同对不会造成损失。这是有道理的,因为你只希望基于实际不相似对来优化网络,但网络认为是相当相似的。

数据集

我们将使用两个数据集,经典的MNIST和OmniGlot。 MNIST将用于训练模型以了解如何区分字符,然后我们将在OmniGlot上测试该模型。

OmniGlot数据集

OmniGlot数据集由包含50种国际语言的样本组成。每种语言中的每个字母只有20个样本。 这被认为是MNIST的“转置”,其中类的数量较少(10个),训练样本数量较多。在OmniGlot中类的数量是非常多的,而每个类的样本数是很少的。

图2.0来自OmniGlot数据集的一些样本

OmniGlot将用作我们的小样本分类数据集,以便能够从少数样本中识别出许多不同的类。

结论

我们是在小样本学习下进行研究,并尝试使用一种称为孪生网络的神经网络架构来解决这一问题。与此同时,我们还讨论了区分输入对的损失函数。

同时,我们还实施了这样的架构,并对MNIST进行训练,然后在OmniGlot上进行了预测。

声明:本站原创文章所有权归携景财富网所有,转载务必注明来源;

转载文章仅代表原作者观点,不代表本站立场;如有侵权、违规,请联系我方删除。