One-Shot Learning
单样本学习通常通过比较嵌入,仅凭一个带标签的示例就能识别新类别。内容涵盖孪生网络、用途和代码。
单样本学习的任务是根据一个带标签的示例识别新类别。传统的图像分类模型每个类别需要数百张带标签的图像,并且每新增一个类别就要重新训练;而人通常只看一次就能认出一张新面孔或一种新商品。单样本系统通过复用从许多已学习类别中获得的知识来接近这种能力:在这些类别上训练的网络会将图像映射到嵌入空间,使同类图像彼此接近,因此只需一个示例就能确定新类别的位置。人脸验证、签名检查和商品识别都采用这种方式;在大型语言模型 (LLM)中,单样本提示则会在提示词中向模型提供一个任务示例。
单样本学习的工作原理#
大多数单样本系统会用比较取代分类。神经网络会对存储的示例和每个新的查询执行特征提取,然后通过两个嵌入之间的距离(例如欧氏距离或余弦相似度)判断它们是否匹配。孪生神经网络通过两个共享相同权重的分支将这一机制形式化。Jane Bromley、Yann LeCun 及其同事在 1993 年使用这种网络验证签名;Gregory Koch 及其同事则在 2015 年训练了这种网络,使其只需看过新字母表中每个字符的一个示例,就能对手写字符进行分类:
嵌入网络会预先在许多其他类别上使用对比损失或三元组损失进行训练,使同一类别的图像彼此靠近、不同类别的图像彼此远离,因此学到的距离度量能够泛化到之后才出现的类别。元学习方法(例如 Matching Networks)会通过数千个模拟的单样本任务进行训练,每个任务包含多个类别各自的一个示例,让模型准确练习它将要面对的问题。
使用嵌入进行单样本分类#
Ultralytics YOLO26分类模型会通过 embed() 返回图像嵌入,该模块会将分类头前一层的输出池化为每张图像对应的一个向量。下面的示例使用这些嵌入构建一个适用于 CIFAR-10 的 10 类单样本分类器:每个类别仅存储一张图像作为唯一的带标签数据,每个查询都会采用与之最相似的存储图像的标签:
from pathlib import Path
import torch
import torch.nn.functional as F
from torchvision.datasets.utils import download_and_extract_archive
from ultralytics import YOLO
# CIFAR-10 test images, one folder per class
download_and_extract_archive("https://github.com/ultralytics/assets/releases/download/v0.0.0/cifar10.zip", "data")
images = [sorted(folder.glob("*.png")) for folder in sorted(Path("data/cifar10/test").iterdir()) if folder.is_dir()]
model = YOLO("yolo26n-cls.pt")
# Support set: the first image of each class is its only labeled example (one shot)
shots = torch.stack([model.embed(paths[0], verbose=False)[0] for paths in images])
# Query set: the next 50 images of each class, each labeled with the class of its most similar shot
correct = 0
for label, paths in enumerate(images):
for path in paths[1:51]:
query = model.embed(path, verbose=False)[0]
correct += F.cosine_similarity(shots, query.unsqueeze(0)).argmax().item() == label
print(f"10-way 1-shot accuracy: {correct / 500:.1%} (random guessing: 10%)")模型从未在 CIFAR-10 上训练过,因此打印出的准确率衡量的是每个类别仅用一个示例时,该类别在 YOLO26 嵌入空间中的定义效果;要添加第十一个类别,只需再存储一个嵌入。
应用场景#
- 人脸验证:自动边境闸机会将实时摄像头图像与护照芯片中存储的唯一照片进行比较;手机和门禁系统则会将每次尝试与登记时记录的人脸进行匹配。
- 零售商品识别:商店不断上架新商品,每件商品只需一张目录照片,系统就能在货架上识别该商品,无需重新训练。
- 单样本模仿学习:机器人只需观看一次演示,就能学会执行任务的新实例,例如按照新的顺序堆叠积木。
挑战#
单个示例无法展现一个类别的变化情况,因此,在光线不佳、角度异常或物体部分遮挡时拍摄的参考照片,会成为后续所有比较的不良依据。匹配阈值决定误接受和误拒绝之间的平衡,必须针对每个应用使用验证样本对进行调优;此外,在一个领域(例如日常照片)上训练的嵌入,在另一个领域(例如医学图像)中区分类别的效果会较差。










