如何解决「小样本」+「多分类」问题？
这个就是典型的few shot classification的问题，经常被包装成玄学的meta learning。 目前市面上效果最好的模型反而是最简单的模型，简单来说就是一个pre-trained feature encoder + 一个distance metric就可以直接比较样本来做分类了。 如果一个类里有多个图怎么办？ 1.可以fuse一下同类里不同图片的feature，作为此类的prototype，然后用distance metric。 2.也可以直接取nearest neighbour 3.也可以和这一类里的每个数据都求一个distance，然后平均一下，作为和这一类的distance。 4.当你每个类的数据都很多的时候，你其实就可以考虑训练一个classifier了，你可以固定住feature encoder不动，去学习每个类的prototype。 当然，如果每个类数据数量差别太大，可以考虑long tail的问题。 具体来说feature encoder怎么来呢？ 很简单，把你能有的数据全部用上，训练一个CNN，然后把fc layer扔掉，你就得到一个feature encoder了。 那distance metric呢？ 可以是 欧氏距离 (prototypical network), cosine distance (matching network)，还有EMD距离 (DeepEMD)。基于此原理，一个data encoder+ 一个EMD metric 在miniimagenet数据集 1shot5way的task已经可以达到68%+的正确率了，而且是不用额外数据来训练和测试的结果 （semi-supervised setting or transductive setting），为目前最好的结果。 再补充两句关于feature encoder的渊源。最开始matching network提出了一种训练模式，叫做episode learning，就是每次sample一个classification task，比如5张训练图片，10张测试图片，然后去做分类，cross entropy 作为loss来训练。这样做的目的就是想通过这种方式学习到那些比较general的feature，希望可以在unseen class上也能用到的feature。但是这种方法显然很低效，因为每次训练的图片太少。后来一众fancy的meta learning算法都是基于这种训练方式来学习，编出了各种美丽的故事。 后来有人发现直接把所有training class拿来训个分类器，再把fc layer扔了，用来提取feature，效果巨好，吊打各种meta learning算法。最早期的paper，prototypical network 和matching network就远比SOA的方法好很多。所以现在最好的训练方法一般是一个feature pre-training的环节（训练一个普通分类cnn），再扔掉fc layer，然后用episode training。这个时候episode training的角色就变了，从学习feature变成了调整feature，效率就高很多了。 推荐一个小样本分类的leaderboard网站：https://few-shot.yyliu.net/miniimagenet.html 更新： 我最近看到了不少   ”a baseline for few shot classification“的文章，他们的形式和核心思想都离不开我上面列举的几点。小样本学习本质是prototype的获得，可以是通过优化学到的，也可以是直接对少数的样本进行融合得到的。 最近更新了deepemd的开源代码，效果很好，欢迎使用。 https://git.io/DeepEMD 