简介
参数模型 vs. 非参数模型
-
参数模型
training examples need to be slowly learnt by the model into its parameters. -
非参数模型
allow novel examples to be rapidly assimilated, whilst not suffering from catastrophic forgetting.
创新点
at the modeling level
模型设计中, 借鉴了当下流行的注意力LSTM, 考虑了整个参考集合的贡献.
We propose Matching Nets (MN), a neural network which uses recent advances in attention and memory that enable rapid learning.
at the training procedure
训练过程中,尽量模拟测试流程,使用小样本构造minibatch
our training procedure is based on a simple machine learning principle: test and train conditions must match.
模型结构
给定一个参考集, $ S = \left \{ (x_{i}, y_{i}) \right \}_{i=1}^{k} $
, 定义一个映射$ S \rightarrow C_{S}(x)=p(y|x) $
, 其中$ P $
由网络参数确定.
在预测阶段, 给定未知的样本$ {x}' $
和参考集$ {S}' $
, 预测的标签为 $ argmax_{y} P(y|{x}', {S}') $
最简单的形式y为: $ y = \sum_{i=1}^{k}a(x, x_{i})y_{i} $
, 其中$ a $
是attention机制.
然而与通常的attention memory机制不同, 这里的本质上是非参数的. 当参考集变大时, memory也变大. 这种定义的分类器很灵活, 可以很容易适应新的参考集.
attention kernel
匹配函数, 相当于前述函数 $ a(x, x_{i}) $
, 即如何考察测试样本特征 $ x $
和参考集样本特征 $ x_{i} $
之间的匹配程度.
可以有以下选择:
-
cosine : $$ a(x, x_{i}) = c(x, x_{i}) $$
-
Softmax :
$ a(x, x_{i}) = exp[c(x, x_{i})] / \sum_{j}exp[c(x, x_{j})] $
-
cosine(FCE) :
$ a(x, x_{i}) = c(f(x), g(x_{i})) $
-
Softmax(FCE) :
$ a(x, x_{i}) = exp[c(f(x), g(x_{i}))] / \sum_{j}exp[c(f(x), g(x_{j}))] $
其中c表示余弦距离, FCE表示Full Conditional Embedding.
Full Context Embeddings
在通常的image或者是sentence的表示的基础上(如CNN的表示, embedding的表示等), 可以进一步加上 FCE, 使得到的 representation 依赖于support set.
$ g(x_{i}) $
应该依赖于参考集 $ S $
, 另外 $ S $
也应该影响 $ y(x) $
.
$ g(x_{i}, S) $
使用 bilstm, 在$ S $
的上下文中(将其视为一个序列)编码$ x_{i} $
\vec{h}_{i}, \vec{c}_{i} = LSTM ({g_{i}}', \vec{h}_{i-1}, \vec{c}_{i-1})
\bar{h}_{i}, \bar{c}_{i} = LSTM ({g_{i}}', \bar{h}_{i+1}, \bar{c}_{i+1})
g(x_{i}, S) = \vec{h}_{i} + \bar{h}_{i} + {g}'(x_{i})
其中$ {g}'(x) $
是一个神经网络, 比如图像任务中的CNN, 和自然语言任务中的word embedding.
$ f(x, S) $
f(x, S) = attLSTM({f}'(x), g(S), K)
其中$ {f}'(x) $
是一个神经网络, 比如图像任务中的CNN, 和自然语言任务中的word embedding.
这里和之前类似, 注意力函数也是softmax形式, 用其他所有参考集样本归一化.
换言之, 除了以测试样本作为输入, 在每一个步骤中, 还要根据LSTM状态h, 决定把注意力放在哪一些参考集样本上.
训练策略
训练策略是本文的闪光之处, 再一次验证了机器学习实战中这条颠扑不破的真理: 怎么用, 怎么训.
训练流程
训练过程中,迭代一次的流程如下:
- 选择少数几个类别(例如5类),在每个类别中选择少量样本(例如每类5个);
- 将选出的集合划分:参考集,测试集;
- 利用本次迭代的参考集,计算测试集的误差;
- 计算梯度,更新参数
这样的一个流程文中称为episode。
在测试过程中,同样遵守此流程:
- 选择少数几个类别,在每个类别中选择少量样本;
- 将选出的集合划分:参考集,测试集;
- 利用本次迭代的参考集,计算测试集的误差;
注意,在完成训练之后,所有训练中用过的类别,都不再出现在后续真正测试中。换言之,训练集和测试集的类别互不包含。
参考资料
论文 Matching Networks for One Shot Learning
博客 Matching Networks for One Shot Learning
Tensorflow实现: 这里的实现似乎没有对f, g分开处理, 对FCE的处理方式也和文章说的不太一样.