首页 > 其他分享 >小样本学习One-shot

小样本学习One-shot

时间:2024-01-22 12:11:34浏览次数:34  
标签:shot 映射 样本 学习 原型 embedding 数据

2024/1/14

1. 什么是One-shot

单样本学习(One-shot learning)是机器学习领域的一个研究方向,重点是让模型能够仅通过一个训练样本来学习信息。

什么是一个训练样本:
指的是模型训练过程中只使用一个或少量例子或数据点来学习一个特定类别或任务。
如果实在难以理解可以找一篇论文直接看

2. One-shot相关论文

2.1 Siamese Neural Networks for One-Shot Image Recognition

本文使用孪生网络结构解决小样本分类任务,使用结构相同的两个网络分别提取两幅图像的特征,使用\(L1\)度量提取出的两幅图的特征信息,如果\(L1\)小那么他们可能属于同一类物体,否则属于不同物体。

2.1.1 网络结构

image

孪生网络两分支结构相同,卷积层的通道数都是64的倍数,卷积核的尺寸由\(10*10\)下降到\(7*7\),再到\(4*4\),卷积步长均为1,最大池化层的池化窗口为\(2*2\),最后两层为全连接层,第一个将特征展开为长度为4096的一维特征向量,并于另一个提取特征计算\(L1\)距离。第二个全连接层则是将距离向量压缩为一个值,并利用sigmoid函数转化为相似程度得分。
除了最后两层使用sigmoid作为激活函数,其他层使用Relu作为激活函数。

2.1.2 创新

本文通过引入距离度量的方式来解决少样本分类的问题,然而具有很大的局限性,孪生网络对于两个图像之间的差别非常的敏感(包括位置、颜色),当同一个物体出现在图像的左上角和图像的右下角时,提取的特征信息可能截然不同的,并且在通过全连接层后,空间位置信息会被破坏,可能会导致误分类。
解决这两个问题通常是利用更深的神经网络提取特征,更深网络的有效训练需要更多的数据集,这与One-shot本质冲突。
为了解决问题,后来提出了元学习方法。

2.2 Prototypical Networks for Few-shot Learning (neurips.cc)

本文基于存在embedding的想法,将每个数据看作一个点,这些点围绕每个类的单个原型表示(prototype representation)进行聚集。为了做到这点,文中使用神经网络学习了一个非线性映射,利用神经网络将输入映射到一个embedding space,每个类的原型(Prototype)就是这个类的 support set 所有样本embedding的均值。
预测时,将需要分类的图像输入训练好的embedding网络中,映射到嵌入空间里面,新样例embedding和这些prototype哪个最接近便分到该类别。
对于zero-shot而言,每个类都带有给出类高度描述(high-level description)的元数据,而不是少量的标记数据。模型学习将元数据嵌入到共享空间中,作为每个类的原型。

Embedding 技术将原始数据从高维度空间映射到低维度空间,有助于减少数据的复杂性和计算资源的需求,并提高模型的训练和推理效率;Embedding 向量是连续的,因此可以在数学上进行操作,如向量加法、减法和点积等。这使得模型能够更好地理解数据之间的关系;

2.2.1 网络结构

image

如上图所示,左边是Few-shot,其原型\(c_\mathrm{k}\)就是Support集中每个类别样本嵌入的均值;右边是Zero-shot, 其原型\(c_\mathrm{k}\)是通过嵌入的类的元数据\(\mathrm{v_k}\)计算的。
模型要做的就是将support set中的数据映射到一个embedding空间中,然后对同类数据的embedding平均作为原型的embedding;同时在预测的时候将输入数据也映射到这个embedding空间中,计算出该embedding与各个原型的距离后,选择距离最小的类别作为预测结果。也就是说这个模型需要做的事为:

  1. 训练一个encoder
  2. 选择合适的距离度量方法

2.2.2 创新

  • 采用平方欧氏距离作为距离度量方式,取代了常用的余弦距离
  • 采用Episode小批量梯度下降训练法,并在训练过程中使用包含更多类别的样本
    但是仍然存在问题,如何保证网络对数据特征的提取足够抽象,让每个类别之间的差距足够明显,还有小批量样本中的特殊样本使原型发生偏移的问题如何解决。

2.3Matching Networks for One Shot Learning (neurips.cc)

标签:shot,映射,样本,学习,原型,embedding,数据
From: https://www.cnblogs.com/TTS-TTS/p/17979772

相关文章

  • Queue-Linked List Implementation【1月22日学习笔记】
    点击查看代码//Queue-LinkedListImplementation#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};node*front=NULL;node*rear=NULL;//末指针·,则不用遍历整个链表,constanttimevoidEnqueue(intx){ node*temp=newnode; ......
  • 初学者如何学习编程(从2014到2023年十年编程工作总结)
    今天给大家分享一个话题,如何有效的学习编程,大家都知道,我是计算机专业毕业的,2008年开始学习编程,2014年研究生毕业后一直从事软件开发工作,先后在京东、爱奇艺、完美世界从事过软件开发工程师工作,具有十多年编程经验积累,所以我来讲这个话题,我是有发言权的,也具有一定的权威性。好的......
  • elasticsearch学习笔记1 - 安装
    本次编写es笔记是为了记录学习到的es知识点,给大家一个快速理解和方便查找的地方。一、了解一下es是什么?为什么要使用es?   因为系统一步一步运行,数据越来越多,每天产生的订单差不动2,3w的数据量,MYSQL数据的查询越来越吃力,然后领导要求能不能先办法解决一下。 然后呢,在网......
  • Power BI - 5分钟学习新增度量值
    每天5分钟,今天介绍PowerBI新增度量值在PowerBIDesktop中,你可以创建度量值。度量值用于计算表达式的结果。在创建自己的度量值时,需要使用DAX语言。DAX包括超过200个函数、运算符等,几乎可以计算任何数据分析所需的结果。下面以计算产品销售举例创建TotalSales的度量值,带大家......
  • 神经网络优化篇:详解学习率衰减(Learning rate decay)
    学习率衰减加快学习算法的一个办法就是随时间慢慢减少学习率,将之称为学习率衰减,来看看如何做到,首先通过一个例子看看,为什么要计算学习率衰减。假设要使用mini-batch梯度下降法,mini-batch数量不大,大概64或者128个样本,在迭代过程中会有噪音(蓝色线),下降朝向这里的最小值,但是不会精......
  • 一起学习Avalonia
    一起学习Avalonia(一)一起学习Avalonia(二)一起学习Avalonia(三)一起学习Avalonia(四)一起学习Avalonia补充(Linux下的使用开发)一起学习Avalonia(五)一起学习Avalonia补充(deepin下的使用开发t调试)一起学习Avalonia(六)一起学习Avalonia(七)一起学习Avalonia(八)一起学习Avalonia(九)一起学习A......
  • FastAPI学习-29 uvicorn 使用 log_config 参数设置 logger 日志格式
    前言FastAPI服务是通过uvicorn来提供的,日志都是uvicorn里配置的。官方文档地址:https://www.uvicorn.org/settings/#logginguvicorn的logging日志我们可以通过uvicorn.run()方式启动服务uvicorn.run("example:app",port=5000,reload=True,access_log=False)于是可以加......
  • FastAPI学习-30 项目代码中添加自己的日志内容
    前言前面一篇【FastAPI学习-29uvicorn使用log_config参数设置logger日志格式】已经学会了配置uvicorn的日志。如何在fastapi项目代码中添加自己的日志呢?添加日志创建一个logger实例,名称为"fast"fromfastapiimportFastAPIimportlogginglogger=logging.getLogger(......
  • FastAPI学习-28 alembic数据迁移报错:Target database is not up to date 报错解决办法
    前言当表结构有变更,数据迁移时,出现报错:Targetdatabaseisnotuptodate遇到的问题执行迁移命令alembicrevision--autogenerate-m"testv4"出现如下报错>alembicrevision--autogenerate-m"testv4"INFO[alembic.runtime.migration]ContextimplMySQLImpl.INFO[alem......
  • Docker Compose学习路线
    DockerCompose是一种用于定义和运行多容器Docker应用程序的工具。以下是一份DockerCompose的学习路线:基础知识:了解DockerCompose的概念和用途熟悉DockerCompose的基本语法和命令环境搭建:安装Docker和DockerCompose配置DockerCompose环境变量基本概念和配置:配置文件:DockerCom......