原文来源:hackernoon 作者:Harshvardhan Gupta 「机器人圈」编译:嗯~阿童木呀、多啦A亮 深度神经网络是涉及图像分类问题的重要算法。这其中的部分原因是,它们具有大量的可训练的参数。然而,这是以需要大量的数据为代价的,而这有时是不可获得的。那么接下来,我就将讨论小样本学习(One Shot Learning),其旨在缓解诸如此类的问题,以及如何在PyTorch中实现一个使用它的神经网络。 本文假设你对神经网络知识有所了解。 本文相关材料线索来自于此篇论文 标准分类vs小样本分类 几乎所有分类模型使用的都是标准分类。输入被馈送到一系列层,最后输出类概率。如果你想通过猫来预测出狗,你可以在你所期望的预测时间内训练相似的(但不相同的)狗/猫图片模型。当然,这要求你有一个数据集,与你使用模型进行预测时所期望的数据集类似。 另一方面,小样本分类模型的要求就是,你只要有一个你想要预测的每个类的训练样本就可以。该模型仍然在几个实例上进行训练,但是它们只需要与你的训练样本相类似。 可以说明此问题的一个很好的例子就是面部识别。你可以在一个包含少数人的各种角度、拍摄光线等数据的数据集上训练此小样本分类模型。然后,如果你想要判别某人X是否在图像中,那么就可以拍摄该人的一张照片,然后询问模型该人物是否在该图像中(请注意,该模型没有使用某人X的任何照片进行训练)。 作为人类,我们往往只需要一次会面就可以通过面部识别出一个人,而且对于计算机来说,这是很可取的,因为大多数情况下数据处于最小值。 孪生网络 孪生网络是一种特殊类型的神经网络架构。与一个学习对其输入进行分类的模型不同,该神经网络是学习在两个输入中进行区分。它学习了两个输入之间的相似之处。 架构 孪生网络由两个完全相同的神经网络组成,每个都采用两个输入图像中的一个。然后将两个网络的最后一层馈送到对比损失函数,用来计算两个图像之间的相似度。我已经做了一个图解用来帮助解释这个架构。 它具有两个姐妹网络,它们是具有完全相同权重的相同神经网络。 图像对中的每个图像将被馈送到这些网络中的一个。 使用对比损失函数优化网络(我们将获得确切的函数)。 对比损失函数(Contrastive Loss function) 孪生架构的目的不是对输入图像进行分类,而是区分它们。因此,开奖,分类损失函数(如交叉熵)不是最合适的选择。相反,这种架构更适合使用对比函数。根据直觉而言,这个函数只是评估网络区分一对给定的图像的效果如何。 点击此处链接获取更多详情 对比损失函数如下: 等式1.0 其中Dw被定义为姐妹孪生网络的输出之间的欧氏距离(euclidean distance)。数学上欧氏距离是: 等式1.1 其中Gw是其中一个姐妹网络的输出。X1和X2是输入数据对。 等式1.0说明 Y值为1或0。如果模型预测输入是相似的,j2直播,那么Y的值为0,否则Y为1。 max()是表示0和m-Dw之间较大值的函数。 m是大于0的边际价值(margin value)。有一个边际价值表示超出该边际价值的不同对不会造成损失。这是有道理的,因为你只希望基于实际不相似对来优化网络,但网络认为是相当相似的。 数据集 我们将使用两个数据集,经典的MNIST和OmniGlot。 MNIST将用于训练模型以了解如何区分字符,然后我们将在OmniGlot上测试该模型。 OmniGlot数据集 (责任编辑:本港台直播) |