参考链接:

  • 主要内容转自:https://blog.csdn.net/weixin_37589575/article/details/92801610
  • https://blog.csdn.net/greenwoodp/article/details/107919956

    Few-shot learning

    众所周知,现在的主流的传统深度学习技术需要大量的数据来训练一个好的模型。例如典型的 MNIST 分类问题,一共有 10 个类,训练集一共有 6000 个样本,平均下来每个类大约 600 个样本,但是我们想一下我们人类自己,我们区分 0 到 9 的数字图片的时候需要看 6000 张图片才知道怎么区分吗?很显然,不需要!这表明当前的深度学习技术和我们人类智能差距还是很大的,要想弥补这一差距,少样本学习是一个很关键的问题。另外还有一个重要原因是如果想要构建新的数据集,还是举分类数据集为例,我们需要标记大量的数据,但是有的时候标记数据集需要某些领域的专家(例如医学图像的标记),这费时又费力,因此如果我们可以解决少样本学习问题,只需要每个类标记几张图片就可以高准确率的给剩余大量图片自动标记。这两方面的原因都让少样本学习问题很吸引人。

    在 few-shot learning 中有一个术语叫做 N-way K-shot 问题,简单的说就是我们需要分类的样本属于 N 个类中一种,但是我们每个类训练集中的样本只有 K 个,即一共只有 N*K 个样本的类别是已知的。 … Few-shot learning 问题的关键是解决过拟合 (overfitting) 的问题,因为训练的样本太少了,训练出的模型可能在训练集上效果还行,但是在测试集上面会遭遇灾难性的崩塌。

处理策略之数据增强和正则化

这一类方法想法很直接简单,既然训练数据不够那我就增加训练样本,既然过拟合那我就使用正则化技术。

  • 数据加强:最常见的例子就是有时对 Omniglot 数据集的预处理,会将图片旋转 90 、180 、270 度,这样就可以使样本数量变为原来的 4 倍。
  • 正则化:在训练的时候加入一个正则项,这个正则项的构建选择是关键。比如 《Few-shot Classification on Graphs with Structural Regularized GCNs》。该论文讨论 Graph 中节点分类的 few-shot 问题,常见的节点分类是使用 GCN 从节点的特征向量 feature 学习一个 embedding 然后用 embedding 来做分类,如果是 few-shot 问题,性能会大大下降(准确率大约从 70% 到了 40%),作者在训练的时候给损失函数加了一个正则项。作者将 feature 到 embedding 的过程看成编码器 encoder,然后额外加了几层网络作为 decoder,将 embedding 重构为 feature ,然后重构误差作为正则项(准确率从 40% 提升了 50%,大约 10 个百分点)。(更多内容可以参考这篇论文和别的使用正则化技术的论文)

处理策略之Meta-learning

元学习的核心想法是先学习一个先验知识(prior),这个先验知识对解决 few-shot learning 问题特别有帮助。 Meta-learning 中有 task 的概念… 我们需要先学习很多很多这样的 (预备的) task,然后再来解决这个新的 task 。最最最重要的一点,这是一个新的 task。分类问题中,这个新的 task 中的类别是之前我们学习过的 task 中没有见过的! 在 Meta-learning 中之前学习的 task 我们称为 meta-training task,我们遇到的新的 task 称为 meta-testing task。因为每一个 task 都有自己的训练集和测试集,因此为了不引起混淆,我们 把 task 内部的训练集和测试集一般称为 support set 和 query set

比较

这里的两个方法之间有个明显的差异就是 meta-learning 需要一些类来构建 meta-training task。

  • 由于 meta-testing 的类别要和 meta-training 完全不同,因此如果我们只有 MNIST 数据集,没法使用 meat-learning 来解决 MNIST 上的 10-way few-shot learning 问题,但是第一种策略可以。
  • 不过我们可以使用 meta-learning 解决 MNIST 上的 N-way (N < 6) 的 few-shot learning 问题。
  • 那么如果我们非要解决 MNIST 上的 10-way few-shot learning 问题怎么办呢,可以在另外一个数据集,例如 Omniglot ,上面进行 meta-training,然后使用学到的先验知识来解决这个问题。《Siamese neural networks for one-shot image recognition.》 和 《Matching networks for one shot learning.》都在论文中做过这样子实验(这一种情况和迁移学习(transfer learning)有相似的地方)。