few shot learning学习(1)

主要参考了知乎和CSDN上的一些总结,毕竟自己看论文有点慢,仅作为自己学习的记录,他人学习的话还是看知乎或者别人的博客吧。文后放上自己引用的链接,侵删。

概念

   即少样本学习,如何使用少量的样本达到较大的泛化性能。在少量的样本上进行学习,在大量的样本上达到较好的泛化性能。例如,训练的模型见过一种波斯猫,令有一个label x,那么测试的时候如果有日本猫、中国猫,那么都可以归类为label x。虽然个人感觉这种例子不是很准确。

分类

基于模型的方法

   通过模型结构的设计快速在少量样本上更新参数,直接建立输入 x 和预测值 P 的映射函数。可进一步进行细分如下:
基于Finetune
   这个方法就不多说了,获得一定量的标注数据,然后基于一个基础网络进行微调。基础网络是在一个大规模数据集上获得的,然后在特定的数据集上进行训练。训练时会固定全部获部分参数,对领域特定网络进行训练。不需要太多数据量,效果还行。
基于meta-learning的方法
   利用Meta-Learning的机制,在训练集的一系列的task上学习一种meta-knowledge,将该知识迁移到新的任务上。包括以下一些方法:

  1. Memory-Augmented Neural Networks
  2. meta-learning LSTM
  3. Model-Agnostic

mutitask learning
   将其它数据集上训练好的参数,共享给小数据集。

基于memory network的网络

基于Metric方法

   该方法通过度量 batch 集中的样本和 support 集中样本的距离,借助最近邻的思想完成分类。如果在 Few-shot Learning 的任务中去训练普通的基于 cross-entropy 的神经网络分类器,那么几乎肯定是会过拟合,因为神经网络分类器中有数以万计的参数需要优化。相反,很多非参数化的方法(最近邻、K-近邻、Kmeans)是不需要优化参数的,因此可以在 meta-learning 的框架下构造一种可以端到端训练的 few-shot 分类器。该方法是对样本间距离分布进行建模,使得同类样本靠近,异类样本远离。下面介绍相关的方法。
孪生网络
   具体的网络是一个双路的神经网络,训练时,通过组合的方式构造不同的成对样本,输入网络进行训练,在最上层通过样本对的距离判断他们是否属于同一个类,并产生对应的概率分布。在预测阶段,孪生网络处理测试样本和支撑集之间每一个样本对,最终预测结果为支撑集上概率最高的类别。
匹配网络
   具体为支撑集和 Batch 集构建不同的编码器,最终分类器的输出是支撑集样本和 query 之间预测值的加权求和。
原型网络
   基于这样的想法:每个类别都存在一个原型表达,该类的原型是 support set 在 embedding 空间中的均值。然后,分类问题变成在 embedding 空间中的最近邻。
Relation Network
   认为度量方式也是网络中非常重要的一环,需要对其进行建模,所以该网络不满足单一且固定的距离度量方式,而是训练一个网络来学习(例如 CNN)距离的度量方式,在 loss 方面也有所改变,考虑到 relation network 更多的关注 relation score,更像一种回归,而非 0/1 分类,所以使用了 MSE 取代了 cross-entropy。

参考:
1.https://zhuanlan.zhihu.com/p/61215293
2.https://blog.csdn.net/xhw205/article/details/79491649
3.https://zhuanlan.zhihu.com/p/58298920
4.https://blog.csdn.net/qq_16234613/article/details/79902085

0%