深度学习任务中的 Zero-shot、One-shot 和 Few-shot 是什么?

news2024/9/24 7:18:20

ShotLearning

深度学习任务中的 Zero-shot、One-shot 和 Few-shot 是什么?

在深度学习的任务中,Zero-shot、One-shot 和 Few-shot 学习是处理有限数据的三种重要方法。这些方法尤其在计算机视觉领域表现得非常突出。接下来,我们将详细探讨这三种学习方式,包括它们的定义、原理以及在计算机视觉领域的应用实例。

Zero-shot 学习(零样本学习)

定义: Zero-shot 学习是指在训练过程中完全没有见过某些类别的数据,但模型能够在测试阶段成功地对这些新类别进行分类。这个概念的核心在于模型能够利用先验知识或语义信息来推断新类别的特征。

原理: 在 Zero-shot 学习中,模型依赖于类间的语义关系或属性描述。这些描述通常是通过预训练的词嵌入(如 Word2Vec、GloVe)或其他语义空间(如视觉-语言对齐模型)来获取的。模型在训练时看到的类别与测试时的类别可能完全不同,但它们共享某些属性或特征。

公式与代码:

假设我们有一个训练好的模型,它可以根据特征向量 x x x 和类别描述 d d d 进行分类。对于测试样本,我们计算其与各个类别描述的相似度,然后选择相似度最高的类别作为预测结果。

公式表示为:
y = arg ⁡ max ⁡ c ∈ C Similarity ( f ( x ) , d c ) y = \arg\max_{c \in C} \text{Similarity}(f(x), d_c) y=argcCmaxSimilarity(f(x),dc)
其中, C C C 是所有类别的集合, f ( x ) f(x) f(x) 是特征提取函数, d c d_c dc 是类别 c c c 的描述向量。

代码示例:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

def zero_shot_classification(features, descriptions):
    similarities = cosine_similarity(features, descriptions)
    predicted_classes = np.argmax(similarities, axis=1)
    return predicted_classes

# 示例数据
features = np.array([[0.2, 0.3], [0.4, 0.5]])  # 测试样本的特征
descriptions = np.array([[0.1, 0.2], [0.5, 0.6]])  # 类别描述

predictions = zero_shot_classification(features, descriptions)
print(predictions)

计算机视觉中的例子:

假设你有一个图像分类模型,该模型在训练过程中只见过猫和狗的图像,但在测试时,你需要识别马。为了实现 Zero-shot 学习,你可以使用一个与视觉-语言模型(如 CLIP)配合的策略。模型通过图像的视觉特征与马的文字描述进行比较,判断是否为马的图像。

One-shot 学习(单样本学习)

定义: One-shot 学习是指在训练阶段,每个类别只有一个样本。模型需要能够利用这一个样本来识别和分类测试数据中的相似实例。

原理: One-shot 学习通常采用度量学习或生成模型的方法。在度量学习中,模型学会将相似类别的数据点在特征空间中聚集在一起。生成模型则通过生成新的样本来补充数据稀缺的问题。

公式与代码:

在度量学习中,使用距离度量来判断样本的类别。给定一个查询样本 x q x_q xq 和一个支持集 S S S,其中每个样本 ( x i , y i ) (x_i, y_i) (xi,yi) 只有一个样本,模型计算 x q x_q xq 到支持集中所有样本的距离,选择最近的样本类别作为预测结果。

公式表示为:
y q = arg ⁡ min ⁡ ( x i , y i ) ∈ S Distance ( x q , x i ) y_q = \arg\min_{(x_i, y_i) \in S} \text{Distance}(x_q, x_i) yq=arg(xi,yi)SminDistance(xq,xi)

代码示例:

from sklearn.metrics.pairwise import euclidean_distances

def one_shot_classification(query_feature, support_set):
    distances = euclidean_distances(query_feature.reshape(1, -1), support_set[:, :-1])
    nearest_idx = np.argmin(distances)
    return support_set[nearest_idx, -1]

# 示例数据
query_feature = np.array([0.3, 0.4])  # 查询样本的特征
support_set = np.array([[0.2, 0.3, 0], [0.4, 0.5, 1]])  # 支持集中的样本及其标签

prediction = one_shot_classification(query_feature, support_set)
print(prediction)

计算机视觉中的例子:

假设你有一个人脸识别任务,每个人只有一张样本照片。在测试阶段,当你需要识别一个新的面孔时,你可以通过将其与已知的单张样本照片进行比较,确定其身份。这种方法常用于人脸识别应用中,如手机解锁。

Few-shot 学习(小样本学习)

定义: Few-shot 学习是指在训练阶段,每个类别只有少量样本(通常是几个)。模型需要能够从这些有限的样本中学会有效的分类。

原理: Few-shot 学习方法通常包括数据增强、迁移学习和模型正则化等技术。常见的方法有匹配网络(Matching Networks)、原型网络(Prototypical Networks)和关系网络(Relation Networks)。

公式与代码:

在原型网络中,模型首先计算每个类别的原型(即类别样本的均值),然后计算测试样本与这些原型的距离。

公式表示为:
y q = arg ⁡ min ⁡ c ∈ C Distance ( f ( x q ) , Prototype c ) y_q = \arg\min_{c \in C} \text{Distance}(f(x_q), \text{Prototype}_c) yq=argcCminDistance(f(xq),Prototypec)
其中, Prototype c \text{Prototype}_c Prototypec 是类别 c c c 的原型向量。

代码示例:

def prototype_network_classification(query_feature, prototypes):
    distances = euclidean_distances(query_feature.reshape(1, -1), prototypes)
    nearest_idx = np.argmin(distances)
    return nearest_idx

# 示例数据
query_feature = np.array([0.3, 0.4])  # 查询样本的特征
prototypes = np.array([[0.2, 0.3], [0.4, 0.5]])  # 类别原型

prediction = prototype_network_classification(query_feature, prototypes)
print(prediction)

计算机视觉中的例子:

在手写数字识别任务中,如果你只有每个数字(0到9)的一些样本,Few-shot 学习可以帮助你在这些有限样本的基础上进行分类。例如,如果你有每个数字只有5张样本照片,模型可以通过学习这些少量样本来识别新的手写数字。

总结

Zero-shot、One-shot 和 Few-shot 学习是处理数据稀缺问题的有效策略。在计算机视觉领域,它们为不同的数据场景提供了灵活的解决方案。Zero-shot 学习依赖于语义描述和先验知识,One-shot 学习依赖于度量学习和生成模型,而 Few-shot 学习则利用数据增强和模型正则化技术。通过了解这些方法的原理和应用场景,我们可以更好地设计和优化深度学习模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ML】self-supervised Learning for speech and Image

【ML】self-supervised Learning for speech and Image 1. self-supervised Learning for speech and Image1.1 自监督学习在语音处理领域的方法及其特点1.2 自监督学习在图像处理领域的方法及其特点 2. Predictive Approach2.1 特点2.2 适用场景 3. contrastive Learning4. 语…

鸿蒙开发5.0【Debug调试】运维

Debug 介绍 本示例通过使用ohos.hidebug接口来获取当前应用内存使用情况。 )效果预览 使用说明 1.点击界面右上方Debug图标,弹出Debug信息界面,显示当前应用内存使用情况; 2.再次点击右上方Debug图标,Debug信息界面消失。 具…

Zed : 一款不容错过的编码神器

简介 “Code at the speed of thought“ — 用过之后都说好,名副其实~ 不过,请记住它的定位是“编辑器、编辑器、编辑器”(重要的事情说三遍) 一切皆可配置 步入正题,开始配置~! 配…

嵌入式学习之文件IO和标准IO

IO概述 I/O是Input/Output的缩写,指的是输入/输出。在计算机科学和工程领域,I/O是指计算机系统与外部环境或内部组件之间进行数据交换的过程和机制。 用户I/O 用户通过输入设备与计算机交互。例如,通过键盘输入文字、通过鼠标点击界面等。…

2007-2023年上市公司金融化程度测算数据(含原始数据+计算代码+计算结果)

2007-2023年上市公司金融化程度测算数据(含原始数据计算代码计算结果) 1、时间:2007-2023年 2、指标:行业代码、行业名称、stkcd、year、证券简称、是否发生ST或ST或PT、是否发生暂停上市、股票简称、成立日期、交易性金融资产、…

西门子s7通信协议

目录 西门子s7通信协议 S7协议帧结构 s7协议的使用 连接 COTP连接(第一次握手)报文 S7连接(第二次握手)报文 使用tcp五次握手进行连接 读取和写入报文格式 数据的读取 接收数据的响应 数据的写入 完整代码 西门子s7通信协议 S7C…

精通C++ STL(四):vector的模拟实现

目录 vector各函数接口总览 vector当中的成员变量介绍 默认成员函数 构造函数1 构造函数2 构造函数3 拷贝构造函数 赋值运算符重载函数 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size和capacity reserve resize empty 修改容器内容相关函数 push_back po…

pyttsx3自动化脚本经典案例

pyttsx 是一个 Python 库,可以将文本转换为语音。它支持多个语音引擎,并且可以在 Windows、Linux 和 macOS 等不同平台上运行。 pyttsx 可以用来做什么? 将文本转换成语音输出,例如将电子书朗读出来。 在语音助手或者聊天机器人中…

Linux 快速构建LAMP环境

目录 部署方式: 基础环境准备: 1.安装Apache服务 (1)安装Apache (2)安装一些Apache的扩展包 2.安装PHP语言 (1)下载php软件仓库 (2)指定php安装版本…

Linux-vim编辑器以及权限-04

我们为什么要把这两个单独拎出来讲呢?大家应该需要知道权限是什么,我们的linux是多用户多任务的,所以可能有许多用户可以操作,万一他们把重要的文件删了呢,所以要给他设置权限,而我们的vim编辑器也是非常重要的,用来编辑我们的文本信息,第二章我们讲到了vi,他们两个…

并行训练技术概述

继续开一个新专栏,这里主要收集一些并行训练的相关内容。 文章目录 并行/分布式训练概述为什么需要?如何实施? 并行/分布式训练概述 首先想要说明的是,并行训练和分布式训练的概念其实都能讲,但前者可能更侧重于技术实…

李晨晨的嵌入式学习 DAY21

今天主要也是对昨天学习的进行了补充 一,时间函数 1.time函数 函数原型:time_t time(time_t *tloc); 功能:获取当前时间(自1970年1月1日(称为Unix纪元或Epoch)以来的秒数,即Unix时间戳&#x…

群晖NAS安装Video Station结合内网穿透实现远程访问本地存储的影音文件

文章目录 前言1.使用环境要求:2.下载群晖video station:3.公网访问本地群晖video station:4.公网条件下访问本地群晖video station5.公网条件下使用移动端(安卓,ios等系统)访问本地群晖video station 前言 …

使用 Arduino 串行绘图仪可视化实时数据

使用 Arduino 串行绘图仪可视化实时数据 Using The Arduino Serial Plotter To Visualize Real Time Data 参考: Arduino Docs: Using the Serial Plotter Tool (IDE v2) Arduino Docs:使用串行绘图仪工具 (IDE v2) The ADC-10-…

8.1 迭代器的概念与使用:走进 Python 的迭代世界

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

jwt伪造身份组组组合拳艰难通关

前言 现在的攻防演练不再像以往那样一个漏洞直捣黄龙,而是需要各种组合拳才能信手沾来,但是有时候使尽浑身解数也不能诚心如意。 前期信息收集 首先是拿到靶标的清单 访问系统的界面,没有什么能利用的功能点 首先进行目录扫描,…

IO/作业/2024/8/8

1第一题 #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #include <wait.h> #include <signal.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/socket.h>…

如何禁用外来U盘,保护企业电脑不被“插”一刀?

在数字时代&#xff0c;U盘就像是随身携带的小型保险箱&#xff0c;但它也可能变成一个潜伏的危险品。想象一下&#xff0c;有一天你的同事无意间把一个带有病毒的U盘插进了你的电脑&#xff0c;结果你辛辛苦苦做出来的项目文件就那么瞬间被格式化了…… 为了避免这种情况的发…

CUTLASS 2.x CUTLASS 3.x Intro 学习笔记

CUTLASS GEMM模板中有大量可以调节和设置的模板参数&#xff0c;这些参数的设置会高度影响Kernel性能。这个分享将为大家介绍从2.x到3.x&#xff0c;CUTLASS kernel实现的变化&#xff0c;这些参数的原理和选择的最佳实践。Slides来自BiliBili NVIDIA英伟达频道 上传的《Tensor…

python-热杆上的蚂蚁(赛氪OJ)

[题目描述] 有一个不断升温的杆子&#xff0c;上面有若干个蚂蚁&#xff0c;蚂蚁们需要尽快爬出这个杆子&#xff0c;否则就会因为高温而被烧死。 这里假设每只蚂蚁行走的最大速度是 1cm/s 。 当一只蚂蚁走到杆的尽头时&#xff0c;就会立即从秆上掉落&#xff0c;从而逃离热杆…