【笔记】关于N-Way K-Shot 分类问题的理解
- Time: 2019年10月27日
- Author:Veagau
在看讲Repitle的论文【On First-Order Meta-Learning Algorithm】时,实验环节对N-Way K-Shot分类问题的SetUp进行的描述引起了我的二度思考,以前对这个问题的理解感觉没摸透,以此为契机,重新思考得出了一种理解。
所谓N-Way K-Shot 分类问题
就是指用少量样本构建分类任务的。主要应用于少样本学习(Few-Shot Learning)
领域,样本数据不足的情况,后来逐渐延伸到元学习(Meta-Learning)
领域。
元学习需要通过在大量的任务上进行学习,学习到泛化能力强大的模型算法,以快速适应新的任务,即
学会学习
。因为元学习是以一个个的任务(如分类任务)作为自己的训练数据的,传统的基于大量数据的训练任务显然不适用于目前的研究(算力约束)。
从字面上理解,N-Way就是N-路或N-类
,K-Shot就是K-次或K-个
。
每次在构建分类任务时,从数据集里抽取N-类的数据,每一类数据由K-个样本构成。这样就形成了一个小型分类任务的数据集,实际上就是原始数据集的一次采样。
那这个小型分类任务的训练集和测试集具体是怎么划分的呢?
其实这个问题也是困扰我很久的,看了几篇文献都没明白。训练过程中用的是什么数据?测试过程中呢?直到我看到这篇论文中的描述:
If we are doing K-shot, N-way classication, then we sample tasks by selecting N classes from C and then selecting
K + 1 examples
for each class. We split these examples into a training set and a test set, where the test set contains a single example for each class.
其中关键的一点就是,在取数据时对于N类数据,每一类其实取了K+1个样本,而不是K个!
然后就是这个+1
引出了我的理解。
以5-Way 5-Shot分类问题为例,在构建一个任务的数据集时的具体流程应该如下:
从元数据集(Meta-dataset)中随机抽取5类(Way)样本,每一类样本随机抽取5+1个(Shot)实例
元数据集
:也就是整体数据集中,可以理解为传统的大型数据集,其中的数据类别>>N-Way,每一类的实例数量>>K-Shot.从这5类样本的6个实例中,每类样本随机抽取5个实例一起作为Training Set(→
Support Set
),每一类剩下的一个实例一起组成Testing Set(→Query Set
)。由于元学习是以任务(Task)作为自己的训练数据的,即元学习的实际训练集和测试集是由一个个的Task组成的,所以为了进行区分,每个任务内部的训练集(Training Set)更名为支持集(Support Set)、测试集更名为查询集(Query Set)。
训练:从Support Set中每一类随机选取一个实例,一起够成一组训练数据,输入到模型中,进行训练。
测试:从Query Set中随机抽取一个实例,用模型判断其属于哪一类。
这个判断过程其实可以视为一种查询过程,给定了支持集,只要让模型能够准确的查询到其属于支持集中的哪一类即可证明模型性能较好。
重复几轮,最终得出该任务模型的准确率,实际上即是
元学习参数确定的模型在该任务上的损失
。损失梯度反向传播到元学习参数,对其进行更新,也即元学习过程。
图示如下:
Way 1 (C1) |
Way 2 (C2) |
Way3 (C3) |
Way 4 (C4) |
Way5 (C5) |
|
---|---|---|---|---|---|
C~11~ | C~21~ | C~31~ | C~41~ | C~51~ | Support |
C~12~ | C~22~ | C~32~ | C~42~ | C~52~ | Support |
C~13~ | C~23~ | C~33~ | C~43~ | C~53~ | Support |
C~14~ | C~24~ | C~34~ | C~44~ | C~54~ | Support |
C~15~ | C~25~ | C~35~ | C~45~ | C~55~ | Support |
C~16~ | C~26~ | C~36~ | C~46~ | C~56~ | Query |
【笔记】关于N-Way K-Shot 分类问题的理解的更多相关文章
- Magento架构师的笔记-----Magento显示当前目录的父分类和子分类的分类名
在Magento目录的分类页面里,希望在左侧导航获取到父分类和子分类,可以用以下方法:打开app/your_package/your_themes/template/catalog/navigatio ...
- K邻近分类算法
# -*- coding: utf-8 -*- """ Created on Thu Jun 28 17:16:19 2018 @author: zhen "& ...
- K近邻分类算法实现 in Python
K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(c ...
- 机器学习实战 - python3 学习笔记(一) - k近邻算法
一. 使用k近邻算法改进约会网站的配对效果 k-近邻算法的一般流程: 收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据.一般来讲,数据放在txt文本文件中,按照一定的格式进 ...
- [吴恩达机器学习笔记]12支持向量机3SVM大间距分类的数学解释
12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.3 大间距分类背后的数学原理- Mathematic ...
- 每日一个机器学习算法——k近邻分类
K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...
- 机器学习框架ML.NET学习笔记【6】TensorFlow图片分类
一.概述 通过之前两篇文章的学习,我们应该已经了解了多元分类的工作原理,图片的分类其流程和之前完全一致,其中最核心的问题就是特征的提取,只要完成特征提取,分类算法就很好处理了,具体流程如下: 之前介绍 ...
- 【PRML学习笔记】第四章:分类的线性模型
一.基础概念 线性分类模型:决策面(decision boundary)是输入向量的线性函数 目标类别的表示"1 of K" :$ t = (0,1,0,0,0)^T$ 二.分类问 ...
- LeetCode 笔记21 生成第k个排列
题目是这样的: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all ...
随机推荐
- 04:videoToolbox:硬编码
一:前言: 1:apple develop 来源 2:VideoToolbox(视频工具箱)工作流程 2.1:创建 一个压缩会话. 2.2:添加会话属性. 2.3:编码视频帧.接受视频编码回调. 2. ...
- springboot jsp,过滤器,拦截器
springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点) jsp使用配置 一 创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部 ...
- java+selenium-3.9.1多线程 打开连接截取屏幕截图
废话不多说上代码:(我是用的chrome举得例子哈) 第一步,需要chromedriver.exe 目的和调起chrome 浏览器打开连接,chromedriver.exe的版本与你的chrome版本 ...
- 深入全面理解面向对象的 JavaScript
深入全面理解面向对象的 JavaScript (原著: 曾 滢, 软件工程师, IBM,2013 年 4 月 17 日) JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来 ...
- asp.net core3.0 mvc 用 autofac
好久没有写文章了,最近在用.net core3.0,一些开发中问题顺便记录: 1.首先nuget引入 Autofac Autofac.Extensions.DependencyInjection 2. ...
- java自学小测试 九九乘法表
public class Ninenine { public static void main(String[] args) { for(int i=1;i<=9;i++){ for(int j ...
- Hadoop核心组件之MapReduce
MapReduce概述 Google MapReduce的克隆版本 优点:海量数据的离线处理,易开发,易运行 缺点:实时流式计算 Hadoop MapReduce是一个软件框架,用于轻松编写应用程序, ...
- redis-自动补全
自动补全实现方式有两种: 第一种:数据量非常小时,程序从redis中获取数据后,在程序中排序:redis只作为数据存储用: 第二种:数据量较大时,直接在redis中排序,并返回自动补全的数据. 第三种 ...
- centos6.9实时查看tomcat运行日志
1.切换到tomcat的logs目录下 cd /usr/local/apache-tomcat-/logs 2.执行命令,查看日志 tail -f catalina.out 3.退出 Ctrl+c
- C语言I博客作业02
这个作业属于那个课程 C语言程序设计I 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/8656 我在这个课程的目标 ...