有没有将两个样本作为输入且标签为{same class, different class}的神经网络示例?

数据挖掘 神经网络 分类 深度学习
2022-02-16 15:28:55

一定有这方面的例子,虽然我找不到任何例子。也许我不知道要搜索什么。

1个回答

是的。这就是面部识别算法的工作方式,例如,两张图片可能是同一个人或不同的人。

要构建这样一个系统,只需将您的数据配对到训练集中,将输入向量空间加倍并运行一个二进制分类器,如果这两个项目相同,则输出“true”。任何 ML 分类器都可以适应这个问题。

在实践中,您可能希望对分类进行更多控制,并对您的算法以前从未见过的新类具有鲁棒性。人脸识别的一个大问题是大量的潜在类别,包括在训练数据中没有看到的类别,再加上野外图像的同样大的差异。这意味着上述的幼稚方法在实践中将表现不佳。

有一种更复杂的方法:Triplet Loss这要求您为每个示例使用三个输入进行训练。与天真的版本不同:

  • 输入是一次一张图像。你训练三元组——一个“锚”、一个正匹配和一个负匹配,以便计算反向传播的一个损失值。

  • 输出不是相同/不同的类,而是对象的向量描述。对象的相似性是向量之间的距离。由于损失函数的工作原理,即使这是监督学习,您也不需要此向量的标签。

  • 损失函数基于锚样例到正例的距离与期望的到负例的更高距离的差异。这鼓励学习输入的关键特征,当它们代表相同的类时,使向量之间的距离变低(理想情况下为零),当它们代表不同的类时,尽可能地高。

在朴素方法和三元组损失方法中,您需要小心选择训练数据。你想让学习算法努力学习关键差异,否则太容易得到很好的损失。因此以 MNIST 为例,在查看负匹配时,您希望配对比 (0,1) 更多的 (1, 7)、(3, 2)、(3, 8)、(4, 9) 等对, (9, 5)。有一些方法可以根据之前训练时期的反馈来推动这种选择。