【平价数据】One Shot Learning

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。

模型

问题建模

给出的参考集中有 k k k个样本: ( x i , y i ) i = 1 : k (x_i, y_i)_{i=1:k} (xi,yi)i=1:k。注意 k k k往往很小,类别的数量也不多。
对于测试样本 x ^ \hat x x^,预测其标定 y ^ \hat y y^

注意力模型

本文使用参考集标定的加权和作为预测:
y ^ = ∑ i = 1 k a ( x ^ , x i ) y i \hat y = \sum_{i=1}^ka(\hat x, x_i)y_i y^=i=1ka(x^,xi)yi

充当权重的注意力函数 a a a是softmax形式,用其他所有参考集样本归一化:
a ( x ^ , x i ) = exp ⁡ [ C ( f ( x ^ ) , g ( x i ) ) ] ∑ j = 1 k exp ⁡ [ C ( f ( x ^ ) , g ( x j ) ) ] a(\hat x, x_i)=\frac{\exp [C(f(\hat x),g(x_i))]}{\sum_{j=1}^k \exp [C(f(\hat x),g(x_j))]} a(x^,xi)=j=1kexp[C(f(x^),g(xj))]exp[C(f(x^),g(xi))]

C C C是余弦距离,用于比较测试样本 x ^ \hat x x^和参考样本 x i x_i xi的相似度。

f , g f,g f,g分别是测试样本和参考样本的特征提取函数(论文里称为embedding),使用深度网络实现,以下逐一说明。

参考样本特征g

首先使用一个简单的网络(例如VGG或者Inception)提取单个样本的原始特征 g ′ ( x i ) g'(x_i) g(xi)

每个样本 x i x_i xi维护四个状态变量

.前向后向
隐状态 h → i \overrightarrow{h}_i h i h ← i \overleftarrow{h}_i h i
记忆 c → i \overrightarrow{c}_i c i c ← i \overleftarrow{c}_i c i

前向变量前一个参考样本的隐状态和上下文经过LSTM确定,当前样本的原始特征作为输入:
h → i , c → i = L S T M ( g ′ ( x i ) , h → i − 1 , c → i − 1 ) \overrightarrow{h}_i,\overrightarrow{c}_i=\mathrm{LSTM}(g'(x_i), \overrightarrow{h}_{i-1},\overrightarrow{c}_{i-1}) h i,c i=LSTM(g(xi),h i1,c i1)

后向变量后一个参考样本的隐状态 h h h和记忆 c c c经过LSTM确定,当前样本的原始特征作为输入:
h ← i , c ← i = L S T M ( g ′ ( x i ) , h ← i + 1 , c ← i + 1 ) \overleftarrow{h}_i,\overleftarrow{c}_i=\mathrm{LSTM}(g'(x_i), \overleftarrow{h}_{i+1},\overleftarrow{c}_{i+1}) h i,c i=LSTM(g(xi),h i+1,c i+1)

参考集特征由其隐状态 h h h和原始特征共同决定:
g ( x i ) = h → i + h ← i + g ′ ( x i ) , i = 1 , 2... k g(x_i)=\overrightarrow h_i + \overleftarrow h_i + g'(x_i),i=1,2...k g(xi)=h i+h i+g(xi)i=1,2...k

实际上,这里将原本无序的参考样本集进行了排序1。对于排序后的参考集使用LSTM,使得每个样本的特征 g ( x i ) g(x_i) g(xi)不但和自身有关 g ′ ( x i ) g'(x_i) g(xi),还间接和其他参考样本相关。

测试样本特征f

同样使用简单的网络提取单个样本的原始特征 f ′ ( x ) f'(x) f(x)

接下来对于每一个测试样本, 通过 l = 1 , 2... L l=1,2...L l=1,2...L次迭代,使用一个注意力LSTM模型(attLSTM)计算测试样本的特征2

每一步维护四个状态变量

隐变量读数记忆
h l , h ^ l h_l,\hat h_l hl,h^l r l r_l rl c l c_l cl

在第 l l l步,首先用LSTM模型计算原始隐变量 h h h和记忆 c c c
h ^ l , c l = L S T M ( f ′ ( x ^ ) , [ h l − 1 , r l − 1 ] , c l − 1 ) \hat h_l, c_l=\mathrm{LSTM}(f'(\hat x), [h_{l-1}, r_{l-1}], c_{l-1}) h^l,cl=LSTM(f(x^),[hl1,rl1],cl1)

加上原始特征,获得本步骤隐变量:
h l = h ^ l + f ′ ( x ^ ) h_l=\hat h_l+f'(\hat x) hl=h^l+f(x^)

本步骤读数是参考集特征的加权和3
r l = ∑ i = 1 k a ( h l − 1 , g ( x i ) ) ⋅ g ( x i ) r_l=\sum_{i=1}^ka(h_{l-1},g(x_i))\cdot g(x_i) rl=i=1ka(hl1,g(xi))g(xi)

和之前类似,注意力函数也是softmax形式,用其他所有参考集样本归一化:
a ( h l − 1 , g ( x i ) ) = exp ⁡ [ h l − 1 T g ( x i ) ] ∑ j = 1 k exp ⁡ [ h l − 1 T g ( x j ) ] a(h_{l-1}, g(x_i))=\frac{\exp [h_{l-1}^Tg(x_i)]}{\sum_{j=1}^k \exp [h_{l-1}^Tg(x_j)]} a(hl1,g(xi))=j=1kexp[hl1Tg(xj)]exp[hl1Tg(xi)]

换言之,除了以测试样本作为输入,在每一个步骤中,还要根据LSTM状态 h h h,决定把注意力放在哪一些参考集样本上。

最后一步的读数即为测试样本特征:
f ( x ^ ) = r L f(\hat x) = r_L f(x^)=rL

训练与测试

训练策略是本文的闪光之处,再一次验证了机器学习实战中这条颠扑不破的真理:怎么用,怎么训。

训练过程中,迭代一次的流程如下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在全部类别(训练集+测试集)上训练分类器,作为上限对比。

匹配函数

相当于前述函数 a ( x ^ , x i ) a(\hat{x},x_i) a(x^,xi),即如何考察测试样本特征 x ^ \hat{x} x^和参考集样本特征 x i x_i xi之间的匹配程度。

Cosine a ( x ^ , x i ) = c ( x ^ , x i ) a(\hat{x},x_i)=c(\hat{x},x_i) a(x^,xi)=c(x^,xi)

Softmax a ( x ^ , x i ) = exp ⁡ [ c ( x ^ , x i ) ] / ∑ j exp ⁡ [ c ( x ^ , x j ) ] a(\hat{x},x_i)=\exp[c(\hat{x},x_i)]/\sum_j \exp[c(\hat{x},x_j)] a(x^,xi)=exp[c(x^,xi)]/jexp[c(x^,xj)]

Cosine(FCE) a ( x ^ , x i ) = c ( f ( x ^ ) , g ( x i ) ) a(\hat{x},x_i)=c(f(\hat{x}),g(x_i)) a(x^,xi)=c(f(x^),g(xi))

其中 c c c为余弦距离,FCE表示Fully Conditional Embedding。

调优

在使用训练集完成训练后,是否使用测试集中的参考样本进行调优。

Omniglot

Omniglot数据集包含50个字母表,共计1623类字符,每类包含20个不同人绘制的20个样本。
本文在使用时,添加了90°为倍数的4种旋转,进一步扩展类别数。使用其中的12004类字符作为训练,剩余4234类作为测试。

这里写图片描述

ImageNet

将原始ImageNet重新组织为以下三个数据集。
miniImageNet:选择100类,80类训练,20类测试。每类包含600张84*84的彩色图像。
这里写图片描述

randImageNet:随机选择118类作为测试集;剩余类作为训练集。

dogsImageNet:选择dogs的118个子类作为测试集;剩余类作为训练集。
这里写图片描述

总结

本文提供了一个端到端(end-to-end)、可以直接优化的模型。这个模型本身即包含了参考集样本的信息。换句话说,“如何利用参考集”这件事,也在优化的内容中。

本文的书写和实验部分尚有不尽如意之处,但理念富有创新性,值得持续关注。


  1. 原文没有提及如何将无序的参考集样本排序。Karpathy的笔记中猜测可能随机,并建议参考同作者文章:Order Matters: Sequence to Sequence for Sets. ↩︎

  2. 为与参考样本部分区分,此处符号和论文中有所不同。 ↩︎

  3. 此处原文公式(5)有误 ↩︎

  4. 此处原文说明不详,待研究。 ↩︎

  5. A Santoro, S Bartunov, M Botvinick, D Wierstra, and T Lillicrap. Meta-learning with memory-augmented
    neural networks. In ICML, 2016. ↩︎

  6. G Koch, R Zemel, and R Salakhutdinov. Siamese neural networks for one-shot image recognition. In
    ICML Deep Learning workshop, 2015. ↩︎

  • 11
    点赞
  • 29
    收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenxiaolu1984

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值