Learning a Similarity Metric Discriminatively, with Application to Face Verification.
**
Learning a Similarity Metric Discriminatively, with Application to Face Verification (2005 CVPR)
**
文章提出了一种从数据中训练相似性度量的方法。这种方法适用于识别和验证任务,其中任务特点:
(1)数据所属的类别特别多
(2)有些类别在训练的时候是未知的
(3)并且每个类别的训练样本特别少。
这三个特点和 meta-learning(元学习)的特征是一致的。
(1)数据所属的类别多(虽然有些类别训练时是未知的),可以帮助 meta-learning 从这些类别中学习到可以用于处理新类的先验知识(prior);
(2)有些类别训练的时候未知,这和 meta-learning 想做的可以把学到的先验知识用在新的任务上的本质思想是一致的。
(3)每个类别的训练样本特别少,这是一种典型的 few-shot learning 设置。也是 meta-learning 在监督情景下的解决的典型问题。
更多关于 meta-learning 和 few-shot 的概述参考链接:https://blog.****.net/weixin_37589575/article/details/92801610。
本质思想
学习一个函数(function),将输入模式 (input patterns) 映射 (map) 到一个目标空间里面。并且需要控制这个映射使得目标空间 (traget space) 中的 L1 Norm (相似性度量,similarity metric) 可以近似输入空间 (input space) 中的语义距离,即来自同一人的照片在目标空间中相似性度量小,而来自不同的人的照片相似性度量大。这和 meta-learning 中的度量学习 (metric learning) 本质思想完全一致,只是相似性度量的选择还有训练时候的策略有差异,度量学习的典型包含 Matching Network, Prototypical networks, Relation Network 等。
介绍
传统的分类方法是判别式的,需要
(1) 训练的时候知道所有的类
(2) 每个类的训练样本可用,并且越多越好
这限制了一些场景下的使用,例如面部验证和面部识别,其中每个人看成一个类。还有一种情况就是即使不是在实际应用中,而是一些用于科研数据集 (dataset) 所包含的类也是特别多的,并且很有可能每个类都只有很少的样本可用于训练。一种常见的解决方法是基于距离 (distance-based) 的方法,方法包含需要分类或验证的模式之间的相似性度量以及一个存储的原型库。另一种解决方法是在降维空间里使用一种非判别的(生成式)概率方法,这种方法训练一个类时,不需要其他类的样本。
本文提出了一种从训练数据中学习相似性度量的方法,并且这个相似性度量可以用于比较来自训练时没有见过的新的类的样本(例如,一个新人的面部图片)。这种方法是判别式的,可以用于分类问题,其中类别数很多 and/or 每个类别的样本很少。
方法
找到一个映射函数 embedding,将输入模式(对应输入空间)映射到目标空间,并且样本在目标空间中的简单距离(欧式距离)可以近似样本在输入空间的语义距离。简单说,就是我们需要一个 map,对于面部验证问题(给两张照片,判断是否同一人),我们用这个map,把两张照片映射到同一个目标空间,比较目标空间中两个映射点的距离,如果距离大于某一阈值,我们认为不是同一人,如果小于这一阈值,我们则认为属于同一人。
问题的关键在于:如何使这个映射具有以上的属性?
解决方法:
, 是需要识别或验证的两张图片,我们的映射函数为 ,参数为 。 和 的相似性度量为
我们需要如果 , 是同一人照片,那么 小,反之来自不同人,则相似性度量大。
注意,这是相似性度量,不是相似性。所以其实是这个相似性度量小,相似性越大。
训练思想:训练集为成对的模式,即
其中 和 是需要验证图片:
(1)如果 和 来自同一人,最小化相似性度量。
(2)如果 和 来自不同人,最大化相似性度量。
对映射函数 的唯一要求是对参数 可微。
因为对两个图片使用的是同一个映射函数,因此属于Siamese架构。个人觉得这个和后面介绍的 Siamese Network(用于One-shot 图像识别)异曲同工。
需要再次强调,这个映射函数 的选择是自由的,但是对于图像问题,一般会选择卷积神经网络 (CNN) 。
框架
损失函数
一个直接的想法是使用来自同一人的图片对 来最小化 。但是这回遇到灾难性的崩溃。 例如,可能会让 等于一个常量,这样 最小恒成立,但是对于不同对来说,他们的 还是为 0 。根本无法区分!!!因此选择对比项作为损失函数,不仅使来自同一人的图片对的相似性度量小,并且来自不同人的相似性度量大。
相同人的图片对 具有一个二进制标记
不同人的图片对 具有一个二进制标记
当然要使我们的模型可以按照理想方法训练必须满足:
Condition 1 such that
这很容易理解,必须不同对的相似性度量大于相同对的相似性度量,m 是一个整数,我们称为边际。为了简化,我们将 简化为 ( G = ‘genuine’ ), 简化为 ( I = ‘impostor’ )。
因此损失函数为:
其中 为训练对的总数。Y 为二进制标记, 为第 个样本。 为相同对的损失函数, 为不同对的损失函数。
注意这里是损失函数,而不是相似性度量,他们之间有一个转换关系
实际的损失函数为:
其中 是一个常数,被设为 的上界。
损失函数的具体推导过程参考原论文
网络架构
和 是输入的两张图片,经过同一个共享参数的卷积神经网络 ,得到 和 ,然后计算相似性度量 。
卷积网络具体实施细节和实验部分请参考原论文。
论文: http://yann.lecun.com/exdb/publis/pdf/chopra-05.pdf.