AI知识补全(十四):零样本学习与少样本学习是什么?

news2025/4/3 6:25:35

名人说:一笑出门去,千里落花风。——辛弃疾《水调歌头·我饮不须劝》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)


上一篇:AI知识补全(十三):注意力机制与Transformer架构是什么?

目录

    • 一、引言
    • 二、核心概念解析
      • 1. 零样本学习(Zero-Shot Learning)
      • 2. 少样本学习(Few-Shot Learning)
      • 3. 关键区别与联系
    • 三、工作原理与实现方法
      • 1. 零样本学习的工作原理
      • 2. 少样本学习的工作原理
      • 3. Python实现示例
    • 四、应用场景与挑战
      • 1. 应用场景
      • 2. 挑战与解决方向
    • 五、最新研究进展与趋势
    • 六、实践建议与总结
      • 1. 实践建议
      • 2. 总结
    • 参考文献

很高兴你打开了这篇博客,更多AI知识,请关注我、订阅专栏《AI大白话》,内容持续更新中…

一、引言

在传统机器学习和深度学习领域,模型的训练通常依赖于大量标注数据。例如,要训练一个能识别猫和狗的图像分类器,我们需要收集数千甚至数万张带标签的猫狗图片。然而,在现实世界中,我们经常面临数据稀缺的问题,特别是对于稀有类别或新兴领域。

在这里插入图片描述
图片来源:菜鸟教程

此时,零样本学习(Zero-Shot Learning, ZSL) 和 少样本学习(Few-Shot Learning, FSL)这两种技术应运而生,它们旨在解决数据稀缺条件下的机器学习问题,使模型能够像人类一样,通过少量甚至零样本就能识别新的类别或完成新的任务。这些方法在2023-2024年间得到了显著的发展和应用,尤其在大型语言模型和计算机视觉领域表现突出。

本文将深入探讨零样本学习和少样本学习的核心概念、工作原理、实现方法以及最新应用,帮助读者全面理解这两种前沿学习范式。

二、核心概念解析

1. 零样本学习(Zero-Shot Learning)

零样本学习是指模型能够识别训练过程中从未见过的类别。

例如,假设我们有一个模型已经学习了猫和狗的特征,但从未见过老虎的图像。通过零样本学习,模型可以利用老虎的语义描述(如"类似猫的大型条纹动物")来识别老虎,即使它从未在训练数据中出现过。

零样本学习的根本目的是解决类别从未出现在训练集中的情况,让模型具有推理能力,实现真正的智能。其中"零次"(Zero-shot)是指对于要分类的类别对象,一次也不进行学习。

2. 少样本学习(Few-Shot Learning)

少样本学习是指模型通过极少量的样本(通常为1-5个)来学习识别新类别的能力。在N-way K-shot问题设定中,N表示类别数,K表示每个类别的样本数。当K=1时,称为一次学习(One-Shot Learning);当K为2-5时,称为少样本学习(Few-Shot Learning)

少样本学习一般通过元学习(Meta Learning)实现,也被称为"学会学习(Learning to Learn)"。在meta training阶段,将数据集分解为不同的meta task,学习在类别变化情况下的泛化能力;在meta testing阶段,面对全新的类别,不需要变动已有模型就可以完成分类。

3. 关键区别与联系

在这里插入图片描述

零样本学习与少样本学习有着本质区别,但它们都是为了解决数据稀缺问题而设计的。

  • 零样本学习具有极高的灵活性,允许模型不需要额外训练就能处理广泛的任务,尤其适用于缺乏特定训练数据或需要快速实验的场景。
  • 少样本学习则在可获得有限训练样本的情况下提供了更好的性能,适合需要任务特定定制或训练数据受限的情况。

三、工作原理与实现方法

1. 零样本学习的工作原理

在这里插入图片描述

零样本学习的核心思想是建立已知类别(seen classes)和未知类别(unseen classes)之间的桥梁。而这座桥梁就是语义知识。通过学习视觉特征与语义属性之间的映射关系,模型能够推断出从未见过的类别。

零样本学习的实现方法主要包括:

  1. 语义嵌入方法:建立视觉特征空间语义属性空间之间的映射关系。

  2. 属性预测方法:先训练一个预测模型,该模型可以将视觉数据映射到语义表示数据。之后,只要知道新对象的语义描述,就可以识别新的对象。

  3. 生成式方法:如AFC-GAN(Alleviating Feature Confusion for Generative Zero-shot Learning)等,通过生成式模型来解决特征混淆问题。

2. 少样本学习的工作原理

在这里插入图片描述

少样本学习通常采用元学习(Meta-Learning)框架,在训练过程中模拟少样本学习的场景。

meta-training阶段,模型学习类别变化情况下的泛化能力;在meta-testing阶段,模型可以快速适应新的类别。训练数据通常被组织成多个"元任务"(meta-task),每个任务包含支持集(support set)和查询集(query set)。

少样本学习的主要实现方法包括:

  1. 度量学习方法

    • 原型网络(Prototypical Networks):将每个类别表示为一个原型(prototype),通常是该类所有样本的特征向量的平均值。在测试时,将输入样本的特征向量与各类别原型进行比较,计算相似度或距离。

    • 匹配网络(Matching Networks):通过注意力机制,查看支持集中最相似的类别,并比较查询样本与支持集的相似度和差异性。训练和测试都基于n-shot, k-way任务,使模型能以端到端方式优化目标任务。

    • 关系网络(Relation Networks):学习比较查询图像和支持集图像之间的关系得分

  2. 基于梯度的元学习方法

    • 模型无关元学习(MAML, Model-Agnostic Meta-Learning):学习一个适合快速适应的初始化参数,在少量梯度更新后能够快速适应新任务。
  3. 基于记忆的方法

    • 记忆增强神经网络:利用外部记忆模块存储历史知识,辅助少样本学习。

3. Python实现示例

下面是一个使用 PyTorch 实现原型网络进行少样本学习的简化代码示例:

import torch
import torch.nn as nn
import torch.nn.functional as F

class PrototypicalNetwork(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(PrototypicalNetwork, self).__init__()
        # 简单的特征提取器
        self.encoder = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU(),
            nn.Linear(hidden_size, hidden_size),
            nn.ReLU()
        )
    
    def forward(self, support_set, support_labels, query_set):
        # 支持集的类别数
        n_classes = len(torch.unique(support_labels))
        
        # 编码支持集和查询集
        support_features = self.encoder(support_set)
        query_features = self.encoder(query_set)
        
        # 计算每个类的原型(平均特征向量)
        prototypes = torch.zeros(n_classes, support_features.size(1))
        for i in range(n_classes):
            mask = support_labels == i
            prototypes[i] = support_features[mask].mean(0)
        
        # 计算查询样本与每个原型的欧氏距离
        dists = torch.cdist(query_features, prototypes)
        
        # 距离越小,相似度越高,转换为对数概率
        logits = -dists
        
        return logits
    
    def predict(self, support_set, support_labels, query_set):
        logits = self.forward(support_set, support_labels, query_set)
        _, preds = torch.max(logits, 1)
        return preds

# 使用示例
def few_shot_demo():
    # 假设有一个2-way 3-shot任务
    input_size = 28*28  # 例如MNIST图像
    hidden_size = 64
    model = PrototypicalNetwork(input_size, hidden_size)
    
    # 支持集: 2个类别,每类3个样本
    support_set = torch.randn(6, input_size)
    support_labels = torch.tensor([0, 0, 0, 1, 1, 1])
    
    # 查询集: 需要分类的新样本
    query_set = torch.randn(2, input_size)
    
    # 预测
    predictions = model.predict(support_set, support_labels, query_set)
    print(f"预测类别: {predictions}")

if __name__ == "__main__":
    few_shot_demo()

而对于零样本学习,可以使用预训练的视觉-语言模型如CLIP(Contrastive Language-Image Pre-training),通过文本描述来识别新类别:

import torch
import clip
from PIL import Image

def zero_shot_demo(image_path, candidate_labels):
    # 加载CLIP模型
    device = "cuda" if torch.cuda.is_available() else "cpu"
    model, preprocess = clip.load("ViT-B/32", device=device)
    
    # 预处理图像
    image = preprocess(Image.open(image_path)).unsqueeze(0).to(device)
    
    # 构建文本提示
    text_prompts = [f"a photo of a {label}" for label in candidate_labels]
    text = clip.tokenize(text_prompts).to(device)
    
    # 计算图像和文本特征
    with torch.no_grad():
        image_features = model.encode_image(image)
        text_features = model.encode_text(text)
        
        # 归一化特征
        image_features /= image_features.norm(dim=-1, keepdim=True)
        text_features /= text_features.norm(dim=-1, keepdim=True)
        
        # 计算相似度
        similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
        
    # 获取最匹配的类别
    values, indices = similarity[0].topk(len(candidate_labels))
    
    # 打印结果
    for value, index in zip(values, indices):
        print(f"{candidate_labels[index]:>16s}: {100 * value.item():.2f}%")

# 使用示例
if __name__ == "__main__":
    # 在零样本设置下识别动物
    image_path = "tiger.jpg"  # 假设有一张老虎的图片
    candidate_labels = ["cat", "dog", "tiger", "elephant", "zebra"]
    zero_shot_demo(image_path, candidate_labels)

四、应用场景与挑战

1. 应用场景

在这里插入图片描述

零样本学习和少样本学习在多个领域都有广泛应用,尤其在数据收集困难标注成本高昂的场景中显示出巨大价值。

  1. 计算机视觉领域

    • 图像分类:识别稀有或新物种,如在生物多样性研究中识别罕见植物或动物。
    • 物体检测:在有限样本条件下检测新类别物体。
    • 图像分割:实现对新类别的语义分割。
    • 病理图像分析:识别罕见疾病的病理特征。
  2. 自然语言处理领域

    • 文本分类:对新话题或领域的文本进行分类。
    • 命名实体识别:识别新类型的命名实体。
    • 情感分析:分析针对新产品或话题的情感表达。
    • 问答系统:回答关于新领域的问题。
  3. 多模态应用

    • 图像-文本跨模态任务:如CLIP模型通过学习图像和文本之间的对应关系,实现零样本图像识别。
    • 视觉问答:回答关于图像中未见物体的问题。
  4. 特殊应用领域

    • 药物发现:预测新化合物的性质和功效。
    • 稀有事件检测:如网络安全中的异常行为识别。
    • 个性化推荐:在冷启动问题中推荐新物品。

2. 挑战与解决方向

尽管零样本学习和少样本学习在近年来取得了显著进展,但仍面临一些关键挑战:

  1. 领域偏移问题:模型在训练域和测试域之间存在分布差异,影响泛化性能。

    • 解决方向:领域适应技术不确定性建模
  2. 特征表示学习

    • 解决方向:自监督学习对比学习预训练模型微调
  3. 数据增强与生成

    • 解决方向:生成模型如GANs用于样本生成,解决样本稀缺问题。
  4. 元学习算法效率

    • 解决方向:优化元学习算法,提高模型收敛速度和稳定性。
  5. 可解释性

    • 解决方向:开发更透明的模型架构,提高模型决策的可解释性。

五、最新研究进展与趋势

近年来,零样本学习和少样本学习领域取得了显著进展,特别是与大型预训练模型结合后展现出更强大的能力。下面是一些值得关注的研究趋势:

  1. 大型语言模型的少样本能力

    • 大型语言模型(LLMs)本身就是强大的少样本学习器。在预训练阶段,这些模型隐式地从大量文本数据中学习了各种任务,增强了它们在少量示例条件下解决多样化任务的能力。
    • 结合提示工程(Prompting)的方法在少样本学习中表现尤为出色。
  2. 跨模态学习

    • CLIP(Contrastive Language-Image Pre-training)等模型通过大规模预训练,建立了文本和图像之间的联系,使零样本图像分类成为可能。
  3. 自监督与对比学习

    • 无需大量标注数据,通过自监督方式学习有效的特征表示,提升零样本和少样本学习性能。
  4. 元学习方法改进

    • 改进的MAML原型网络等元学习方法,降低计算成本并提高性能。
  5. 生成模型辅助

    • 生成模型用于数据增强特征模拟,缓解样本稀缺问题。
  6. 多模态融合

    • 结合视觉、文本、音频等多种模态信息,提升零样本和少样本学习的泛化能力。
  7. 应用于边缘设备

    • 轻量级零样本和少样本学习模型,适用于计算资源有限的边缘设备。

六、实践建议与总结

1. 实践建议

对于希望在项目中应用零样本学习和少样本学习技术的开发者,以下是一些实用建议:

  1. 选择合适的方法

    • 根据数据可用性选择零样本或少样本学习。
    • 完全没有新类别样本,考虑零样本学习;如有少量样本,考虑少样本学习。
  2. 充分利用预训练模型

    • 使用开源预训练模型(如CLIPBERT等)作为基础,可以大幅提升性能。
  3. 数据增强技术

    • 通过数据增强扩充有限样本,如旋转、缩放、添加噪声等。
  4. 模型选择与实现

    • 可以利用如下开源库:Pytorch-MetaLearn2LearnTorchmeta等,它们提供了元学习和少样本学习的实现框架。
  5. 评估方法

    • 使用标准的N-way K-shot评估方法,确保结果可比较。
    • 注意训练和测试类别的完全分离,避免信息泄露。

2. 总结

零样本学习和少样本学习代表了机器学习向人类学习方式迈进的重要一步。

人类能够从很少的例子中快速学习新概念,而这些技术正试图在人工智能系统中复制这种能力。随着研究的深入和技术的成熟,零样本学习和少样本学习将在数据稀缺场景中发挥越来越重要的作用,推动人工智能向更加通用和灵活的方向发展。

未来,随着更多创新算法的提出和大规模预训练模型的普及,我们有望看到零样本学习和少样本学习在更广泛的领域得到应用,解决更多实际问题,让人工智能真正具备"举一反三"的能力

参考文献

  1. Palatucci, M., Pomerleau, D., Hinton, G. E., & Mitchell, T. M. (2009). Zero-shot learning with semantic output codes.
  2. Lampert, C. H., Nickisch, H., & Harmeling, S. (2014). Attribute-based classification for zero-shot visual object categorization.
  3. Snell, J., Swersky, K., & Zemel, R. (2017). Prototypical networks for few-shot learning.
  4. Finn, C., Abbeel, P., & Levine, S. (2017). Model-agnostic meta-learning for fast adaptation of deep networks.
  5. Radford, A., Kim, J. W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., … & Sutskever, I. (2021). Learning transferable visual models from natural language supervision.

本文介绍了零样本学习少样本学习的基本概念、工作原理、实现方法和应用场景,希望能对读者理解这两种前沿学习范式有所帮助。随着人工智能技术的不断发展,我们期待看到更多创新和突破,使机器真正具备人类般的学习能力。

创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

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

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

相关文章

如何用Postman实现自动化测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这里简单演示在postman中怎样实现自动化测试(不涉及到用户登录的token认证) 导入测试用例文件,测试web接口 postman使用流程…

LeetCode Hot100 刷题笔记(9)—— 二分查找、技巧

目录 前言 一、二分查找 1. 搜索插入位置 2. 搜索二维矩阵 3. 在排序数组中查找元素的第一个和最后一个位置 4. 搜索旋转排序数组 5. 寻找旋转排序数组中的最小值 6. 寻找两个正序数组的中位数 二、技巧 1. 只出现一次的数字 2. 多数元素 3. 颜色分类 4. 下一个排列 5. 寻找重复…

Ubuntu 系统上完全卸载 Docker

以下是在 Ubuntu 系统上完全卸载 Docker 的分步指南 一.卸载验证 二.卸载步骤 1.停止 Docker 服务 sudo systemctl stop docker.socket sudo systemctl stop docker.service2.卸载 Docker 软件包 # 移除 Docker 核心组件 sudo apt-get purge -y \docker-ce \docker-ce-cli …

Python----计算机视觉处理(Opencv:道路检测之道路透视变换)

一、透视变换 对于道路检测来说,为了方便车辆进行行驶,道路上都有车道线,为了更加方便对道路线进行检测,首先我们要把到路线平视图转变为俯视图,以便后期处理更加方便,如下图所示,该为虚拟场景的…

为什么 ThreadLocalMap 的 key 是弱引用 value是强引用

问题一:为什么 ThreadLocalMap 的 key 是弱引用? 【假设 Entry 的 key 是对 ThreadLocal 对象的强引用】:这个 Entry 又持有 ThreadLocal 对象和 value 对象的强引用。如果在其他地方都没有对这个 ThreadLocla 对象的引用了、然后在使用 Thr…

AI 能解开内容的「不可能三角」吗?

3月21日,以“‘AI商业’进化论”为主题的行业峰会在中欧国际工商学院上海校区成功举行,并发布人工智能与商业创新白皮书。本次活动由中欧国际工商学院与特赞科技Tezign联合主办,中欧特赞人工智能与商业创新研究基金承办,中欧AI与营…

计算机网络 OSI参考模型

目录 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

探索新一代大模型代理(LLM agent)及其架构

在人工智能大模型(AI)的浪潮中,2023年我们见证了检索增强生成(Retrieval Augmented Generation, RAG)的兴起,而2024年则无疑成为了“代理”agent的元年。各大AI企业纷纷投身于聊天机器人代理的研发中,工具如MultiOn通过与外部网站的连接实现了…

AI应用案例(1)——智能工牌和会话质检

今天开辟一个新的模块,自己平时也搜集一些典型的行业应用案例,不如就记录到C站,同时和大家也是个分享好了。 今天分享的企业和产品,是循环智能的智能工牌。 这个产品应用场景清晰,针对的行业痛点合理,解决…

HMTL+JS+CSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式

HMTLJSCSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式(可以穿墙死不了,从左边进去可以从右边出来),显示当前分数和最高分,吃到的球颜色可以叠加到蛇身体上 为了适配手机端…

内网渗透——红日靶场二

目录 一、前期准备 DC机配置 PC机配置 WEB机配置 将PC机和WEB机的IP地址进行更改 开启WEB服务 二、外网探测 1.使用nmap扫描 2.目录扫描 3.漏洞扫描 (1)CVE-2017-3506(getshell失败) (2)CVE-201…

【Unity】处理文字显示不全的问题

1.选中字体文件,检查 MultiAtlasTeextures 是否勾选,未勾选的话,先勾选保存后查看是否显示正常 2.勾选后未正常显示,则在搜索框中输入未显示的文本,确认字体图集是否包含该文本,然后点击Update Atlas Textu…

汽车诊断开发入门以及OBD检测

一、OBD 概述 定义:OBD 即 On - Board Diagnostics,车载自动诊断系统。它能实时监测车辆各项系统和部件状态,以此帮助诊断故障并预警。设计初衷与发展:最初设计目的是控制汽车尾气排放,确保符合环境标准。随着技术进步…

Ingredient-oriented Multi-Degradation Learning for Image Restoration论文阅读

摘要:重点在于关联多个任务本质的联系。 不同恢复任务的关联性很重要。 揭示退化现象的内在机理联系很有意义。 多合一的方法能在单一模型中处理多种退化问题,可扩展性较差。 成分导向范式挖掘不同图像退化现象背后的物理规律或特征模式。 成分导向退化重…

java项目挂机自动重启操作指南

前段时间有个伙伴问我,java项目挂机怎么自动重启。。。。。。今天就写一个 .sh脚本来实现应用挂机的自动重启功能 #!/bin/bash # 查询mita的进程个数 countps -ef | grep mita.jar | grep -v "grep" | wc -l # echo $count nowtimedate "%Y-%m-%d %H…

Vue el-table-column内el-tooltip识别换行符 \n

结构&#xff1a; <el-table-column prop"callSummary" width"300" label"摘要"><template slot-scope"scope"><el-tooltip class"item" effect"dark" placement"top"><div v-ht…

【C++指南】一文总结C++二叉搜索树

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C二叉搜索树的实现。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给…

【报告】内镜视频图像分析Foundation Model

来源&#xff1a;医疗基础模型 仅供个人学习&#xff0c;侵权请联系我删除

使用HTML5和CSS3实现炫酷的3D立方体动画

使用HTML5和CSS3实现炫酷的3D立方体动画 项目介绍 本文将详细介绍如何使用HTML5和CSS3技术实现一个交互式3D立方体动画。这个项目不仅展示了现代Web前端技术的强大功能&#xff0c;还能帮助读者深入理解CSS3的3D变换和动画特性。 技术栈 HTML5CSS3 (transform-style, persp…

MySQL数据库和表的操作之SQL语句

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 MySQL数据库和表的操作 关系型数据库&#xff0c;都是遵循SQL语法进行数据查询和管理的。 SQL语句 什么是sql SQL&#xff1a;结构化查询语言(Structured Query Language)&…