Few-Shot/One-Shot Learning指的是小样本学习,目的是克服机器学习中训练模型需要海量数据的问题,期望通过少量数据即可获得足够的知识。
Matching Networks for One Shot Learning
论文将普通神经网络学习慢的问题归结为模型是由参数组成的,模型通过样本的训练转化为参数上的改进是一个特别“昂贵”的过程,因此需要大量样本。作者由此提到不涉及参数的模型(non-parametric model),例如kNN等模型(这里我将这两个的区别理解为 是否需要多次迭代优化参数)。最后,他们使用的是带参数的网络和不带参数的结合,目的是快速从样本中获取知识。论文中面向的问题是n-way k-shot 这样一种任务,support set中k个example一共有n个lebel,全都是训练时候未见过的。(这里我将support set理解为:初次用比较多的数据训练之后得到一个模型,之后再提供很少的数据,让已有的模型快速学习。论文的实验中support set中的label都是训练时候没见过的)。
模型组成
模型是一个set-to-set的框架,或者说是一个end-to-end的方式。预测的公式为
\[\hat{y} = \sum_{i=0}^K{a(\hat{x},x_i)y_i}\]
输出的 \(\hat{y}\) 表示的是测试数据属于每种label的概率,\(y_i\)是一个独热向量。
a是一个矩阵,代表的是 \(\hat{x}\) 和支撑集中每个 \(x_i\) 的相似程度。论文中使用的计算相似度的方式是 softmax over the cosine distance
\[a(\hat{x},x_i) = e^{c(f(\hat{x},g(x_i)))} / \sum_{j=1}^k{e^{(c(f(\hat{x}),g(x_i)))}}\]
上面的f和g函数称为embedding function,目的是将数据转化为向量,相当于一个信息提取的过程。但是作者考虑到这种方式(f和g关注的只是一条数据)并没有综合考虑整个支持集的信息,但是分类时候利用的是整个支持集的信息。认为每个\(x_i\)单独地被f和g进行嵌入存在短视的缺点。因此,提出Full Context Embeddings,嵌入函数变为\(f(\hat{x},S)\),\(g(x_i,S)\),使用的是LSTM,将支持集看作序列在整个支持集的上下文环境下对\(x_i\)和\(\hat{x}\)进行编码。
水平有限,更深层次的内容现在还并不能从论文中得出,推荐两篇论文笔记:
中文博客
英文博客