1. 摘要
机器学习应用中学习好的特征的计算开销是非常大的,而且在某些情况下(few-shot learning,可用数据很少)是非常困难的。一个典型的例子就是 one-shot learning,其中必须在只给出每个类的一个样本的情况下,对剩余样本做出正确的预测。本文学习一个孪生神经网络(Siamese Neural Networks),它用它独特的结构自发地对输入的相似性排序。一旦网络学习好了之后,我们就可以利用强有力的辨别功能将我们的预测能力不仅推广泛化到新的数据(新数据的类包含于训练数据中的类),而且可以推广泛化到来自于未知分布的新的类。
(1)新的类;(2)每个类的训练样本只有一个;(3)学习一个网络映射输入空间到新的空间,比较相似度;
这三个特征满足 few-shot learning,meta-learning 的基本特征,而且可以看成属于 meta-learning 中的度量学习 (metric learning)。
(few-shot learning 和 meta-learning 的概述可以参考链接:https://blog.youkuaiyun.com/weixin_37589575/article/details/92801610)
2. 介绍
人类具有快速获得和识别新模式的能力。特别的,人类在受到刺激的时候可以快速理解新的概念同时可以在未来的识别任务中识别这些概念中的变化。现在的 ML(machine learning) 方法虽然在很多领域取得了成功,但是当被强迫在只有很少的监督信息的情况下做出预测时表现往往会崩塌。我们希望可以在不经过重新训练的情况下,可以很好的推广泛化到新的类别。重新训练可能费时费力,而且在某些场景下根本就无法重新训练。本文的关注点在 one-shot classification 问题上,即仅在每个可能的类别给出一个实例的情况下,对剩余样本进行分类。
One-shot learning 的一种解决方法是开发特定领域相关的特征或者推断过程,它们在目标任务(也是一种特定任务)上具有很好的判别性。这种方法虽然可以在特定领域上取得很好的效果,但是鲁棒性较差,无法用于其他类型的任务。本文对输入假设做了限制(更少的输入假设),而是让模型自动获取能够在少样本任务上成功推广归纳的特征。
3. 方法
总体而言,我们通过一个有监督的、基于度量的、孪生网络结构的方法学习图像的表示,然后将这个网络复用于 one-shot learning(无需重新训练)。
由于本文主要关注于图片 one-shot leanring 任务,因此使用了 Siamese Convolutional Neural Networks(孪生卷积神经网络),特点:
- 能够学习对于来自未知分布的新类(每个新类只有一个样本)预测有用的通用的图片特征。
- 在由源数据成对采样的训练样本上可以使用标准的优化技术很容易地训练。
- 不依赖于特定领域的知识,而是使用深度学习技术提供了一种有竞争力的方法。
为了网络可以进行 one-shot classification,我们先学习一个网络可以区分图像对中的类别标识,这是一个标准的验证任务。并且我们假设如果网络在验证任务上表现良好,那么这个网络就可以推广到 one-shot classification 上。这个验证模型根据输入对属于相同类和不同类的概率学习如何识别输入对。学习好的模型可以用于评估新的图片,其中每个新的类恰好只有一个图片示例。测试模型的时候,测试样本也是成对出现的,然后根据验证网络中最高得分对授予最高的概率。
简单的说:训练的时候是验证的模式,成对的输入,然后判断是否属于同一类。测试的时候也是类似的成对的输入,这样成对的输入有很多对,每一对有一个得分,得分就对应于这成对输入属于同一类的概率。得分越高,概率越高。
例如:5-way 1-shot 任务中,每个类别有一个 support 样本(5 * 1 = 5,总共 5 个样本),然后对于每一个 query 样本,和前面 5 个 support 样本做验证比较,最高得分的 support 样本属于的类就是我们预测的类别。(术语定义参考前面连接的博客)
3. 用于图像验证的孪生网络
孪生网络最早用于解决签名验证问题(将签名验证看为一个图像匹配问题)。孪生网络(Siamese Networks)包含一对网络,接收两个输入,最后通过一个顶层的能量函数(Energy Function)连接起来。
这个能量函数计算来自两个输入映射到新空间的某种相似度。两个网络的参数是绑定的(共享的)。权重绑定可以保证两个极其相似的图片不会被映射到空间中特别远的地方。另外还有一点就是两个网络相同,所以对于输入对的顺序来说,同一对不同的顺序的输入至少在 Embedding 这一步是完全没有影响的,如果能量函数也是关于两个输入(一般是)对称的,那么整个网络都是对称的。
简单的说,这两个孪生网络其实就是 Embedding 函数,将输入从输入空间映射到 Embedding 空间,而这个能量函数就是用来在新的 Embedding 空间里面计算两个 Embedding 的相似度,然后做出验证。
在《Learning a Similarity Metric Discriminatively, with Application to Face Verification》的博客中提到两种方法在网络结构上很相似,论文也提到了这一点,并且给出了一个主要不同,《Learning a Similarity Metric Discriminatively, with Application to Face Verification》使用了一个对比能量函数,而本文使用了一个两个映射之后的特征向量 h 1 h_{1} h1 和 h 2 h_{2} h2 加权的 L 1 L_{1} L