博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【小样本·多分类】如何解决「小样本」+「多分类」问题?
阅读量:3728 次
发布时间:2019-05-22

本文共 1624 字,大约阅读时间需要 5 分钟。

点击上方,选择星标置顶,每天给你送干货

阅读大概需要5分钟

跟随小博主,每天进步一丢丢

来自 | 知乎

地址 | https://www.zhihu.com/question/389155523/answer/1175157989

作者 | ICOZ

编辑 | 机器学习算法与自然语言处理公众号

本文仅作学术分享,若侵权,请联系后台删文处理

这个就是典型的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)。基于此种方法的few shot classification miniimagenet 1shot5way的task已经可以达到68%+的正确率了,目前最好的结果。

再补充两句关于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,效率就高很多了。

以后有空可以整理一下市面上这些又简单效果又巨好的few shot 方法,作为baseline模型供大家使用。


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

让更多的人知道你“在看”

转载地址:http://imrnn.baihongyu.com/

你可能感兴趣的文章
vi/vim 终端中的编辑器简单使用
查看>>
ES6中 var,const,let的使用规则
查看>>
es6 使用 cure53/DOMPurify 来防止xss 攻击
查看>>
vue动态时间显示
查看>>
vue+NodeJS项目部署打包上线到阿里云完整版(前台vue,后台node)
查看>>
校验电话号码自动生成标签(包含多个粘体复制生成标签)
查看>>
ROS学习——Ubuntu16.04下 pip install 安装报语法错误sys.stderr.write(f“ERROR: {exc}“)
查看>>
基于Matlab的随机信号分析
查看>>
多任务程序设计重要知识点(线程、进程、同步、互斥、通信)
查看>>
2021-01-21
查看>>
多线程编程error: ld returned 1 exit status解决方法
查看>>
一节课让你彻底搞懂python中的单星号(*)和双星号(**)的区别及项目实际用法——给我学!
查看>>
K最近邻(kNN,k-NearestNeighbor)分类算法
查看>>
【C++从青铜到王者】第五篇:C/C++内存管理
查看>>
测试用例的总体设计方法
查看>>
测试用例——QQ用户登录
查看>>
测试分类(上)
查看>>
登录测试用例——QQ登录(最终版)
查看>>
测试用例——公交卡
查看>>
输入n个整数,找出最小的k个数
查看>>