转自:https://blog.csdn.net/shenxiaolu1984/article/details/53129937
Vinyals, Oriol, et al. “Matching Networks for One Shot Learning.” arXiv preprint arXiv:1606.04080 (2016).
简介
问题
DeepMind团队的这篇文章解决小样本学习问题:对于训练过程中从未见过的新类,只借助每类少数几个标定样本,不改变已经训练好的模型,能够对测试样本进行分类。
举例:使用大规模人脸数据库训练好的人脸模型,应用于小规模人脸识别。每个使用者只提供较少几张注册图像。
亮点
Li Feifei老师的高徒,在ImageNet中为#科学献身#的人肉参照者,现供职于OpenAI的Andrej Karpathy对该论文给出了“可不咋地!”的崇高评价,并撰写了读文笔记。本文较大程度参考了该笔记
本文创新之处有二:
- 模型设计中,借鉴了当下流行的注意力LSTM,考虑了整个参考集合的贡献;
- 训练过程中,尽量模拟测试流程,使用小样本构造minibatch。
模型
问题建模
给出的参考集中有kk个样本:(xi,yi)i=1:k(xi,yi)i=1:k。注意kk往往很小,类别的数量也不多。
对于测试样本x^x^,预测其标定y^y^。
注意力模型
本文使用参考集标定的加权和作为预测:
充当权重的注意力函数aa是softmax形式,用其他所有参考集样本归一化:
CC是余弦距离,用于比较测试样本x^x^和参考样本xixi的相似度。
f,g分别是测试样本和参考样本的特征提取函数(论文里称为embedding),使用深度网络实现,以下逐一说明。
参考样本特征g
首先使用一个简单的网络(例如VGG或者Inception)提取单个样本的原始特征:g′(xi)。
每个样本xixi维护四个状态变量
前向变量由前一个参考样本的隐状态和上下文经过LSTM确定,当前样本的原始特征作为输入:
后向变量由后一个参考样本的隐状态hh和记忆cc经过LSTM确定,当前样本的原始特征作为输入:
参考集特征由其隐状态hh和原始特征共同决定:
实际上,这里将原本无序的参考样本集进行了排序1。对于排序后的参考集使用LSTM,使得每个样本的特征g(xi)不但和自身有关g′(xi),还间接和其他参考样本相关。
测试样本特征f
同样使用简单的网络提取单个样本的原始特征:f′(x)。
接下来对于每一个测试样本, 通过l=1,2...Ll=1,2...L次迭代,使用一个注意力LSTM模型(attLSTM)计算测试样本的特征2。
每一步维护四个状态变量
在第ll步,首先用LSTM模型计算原始隐变量h和记忆c:
加上原始特征,获得本步骤隐变量:
本步骤读数是参考集特征的加权和3:
和之前类似,注意力函数也是softmax形式,用其他所有参考集样本归一化:
换言之,除了以测试样本作为输入,在每一个步骤中,还要根据LSTM状态h,决定把注意力放在哪一些参考集样本上。
最后一步的读数即为测试样本特征:
训练与测试
训练策略是本文的闪光之处,再一次验证了机器学习实战中这条颠扑不破的真理:怎么用,怎么训。
训练过程中,迭代一次的流程如下4:
- 选择少数几个类别(例如5类),在每个类别中选择少量样本(例如每类5个);
- 将选出的集合划分:参考集,测试集;
- 利用本次迭代的参考集,计算测试集的误差;
- 计算梯度,更新参数
这样的一个流程文中称为episode。
在测试过程中,同样遵守此流程:
- 选择少数几个类别,在每个类别中选择少量样本;
- 将选出的集合划分:参考集,测试集;
- 利用本次迭代的参考集,计算测试集的误差;
注意,在完成训练之后,所有训练中用过的类别,都不再出现在后续真正测试中。换言之,训练集和测试集的类别互不包含。
实验
在此只介绍和图像有关的两组实验。
基本设置
模型
此处的“模型”指的是特征提取方法。
Pixels:直接对比原始图片像素。
Baseline Classifier:用训练集数据训练一个4层卷积分类网络;用此网络的倒数第二层(去除最后的分类层)提取特征。详参原文4.1.1。
Inception Classifier:用Inception网络提取特征,使用方法同上。详参原文4.1.2。
MANN:参见5。
Convolutional Siamese Net:参见6。用训练集数据训练一个同类/不同类分类器;用此网络的倒数第二层(去除最后的分类层)提取特征。
Inception Oracle:用Inception在全部类别(训练集+测试集)上训练分类器,作为上限对比。
匹配函数
调优
在使用训练集完成训练后,是否使用测试集中的参考样本进行调优。
Omniglot
Omniglot数据集包含50个字母表,共计1623类字符,每类包含20个不同人绘制的20个样本。
本文在使用时,添加了90°为倍数的4种旋转,进一步扩展类别数。使用其中的1200*4类字符作为训练,剩余423*4类作为测试。
ImageNet
将原始ImageNet重新组织为以下三个数据集。
miniImageNet:选择100类,80类训练,20类测试。每类包含600张84*84的彩色图像。
randImageNet:随机选择118类作为测试集;剩余类作为训练集。
dogsImageNet:选择dogs的118个子类作为测试集;剩余类作为训练集。
总结
本文提供了一个端到端(end-to-end)、可以直接优化的模型。这个模型本身即包含了参考集样本的信息。换句话说,“如何利用参考集”这件事,也在优化的内容中。
本文的书写和实验部分尚有不尽如意之处,但理念富有创新性,值得持续关注。
- 原文没有提及如何将无序的参考集样本排序。Karpathy的笔记中猜测可能随机,并建议参考同作者文章:Order Matters: Sequence to Sequence for Sets. ↩
- 为与参考样本部分区分,此处符号和论文中有所不同。
- 此处原文公式(5)有误 ↩
- 此处原文说明不详,待研究。 ↩
- A Santoro, S Bartunov, M Botvinick, D Wierstra, and T Lillicrap. Meta-learning with memory-augmented
neural networks. In ICML, 2016. ↩ - G Koch, R Zemel, and R Salakhutdinov. Siamese neural networks for one-shot image recognition. In
ICML Deep Learning workshop, 2015. ↩