One-Shot Learning
El aprendizaje one-shot reconoce una clase nueva a partir de un único ejemplo etiquetado, normalmente mediante la comparación de embeddings. Descubre las redes siamesas, sus usos y el código.
El aprendizaje one-shot consiste en reconocer una clase nueva a partir de un único ejemplo etiquetado. Un modelo convencional de clasificación de imágenes necesita cientos de imágenes etiquetadas por clase y volver a entrenarse cada vez que se añade una clase, mientras que una persona suele reconocer una cara o un producto nuevos después de verlos una sola vez. Los sistemas one-shot se acercan a esa capacidad reutilizando el conocimiento de muchas clases aprendidas previamente: una red entrenada con esas clases asigna imágenes a embeddings en los que las imágenes de una misma cosa quedan próximas entre sí, de modo que basta un único ejemplo para indicar dónde se encuentra una clase nueva. La verificación facial, la comprobación de firmas y el reconocimiento de productos funcionan así; en los modelos de lenguaje grandes (LLMs), una indicación one-shot proporciona al modelo un único ejemplo resuelto de una tarea en su prompt.
Cómo funciona el aprendizaje one-shot#
La mayoría de los sistemas one-shot sustituyen la clasificación por la comparación. Una red neuronal realiza extracción de características en el ejemplo almacenado y en cada nueva consulta, y una distancia entre ambos embeddings, como la distancia euclídea o la similitud coseno, determina si coinciden. Una red neuronal siamesa formaliza este proceso con dos ramas que comparten los mismos pesos. Jane Bromley, Yann LeCun y sus colegas utilizaron una para verificar firmas en 1993, y Gregory Koch y sus colegas entrenaron una en 2015 para clasificar caracteres manuscritos de alfabetos nuevos después de ver un ejemplo de cada uno:
La red de embeddings se entrena previamente con muchas otras clases mediante funciones de pérdida contrastivas o triplete, que acercan las imágenes de una misma clase y alejan las de clases distintas, de modo que la distancia aprendida se generaliza a clases que aparecen más adelante. Los métodos de metaaprendizaje, como las redes de correspondencia, se entrenan con miles de tareas one-shot simuladas, cada una con un ejemplo de varias clases, para que el modelo practique exactamente el problema al que se enfrentará.
Clasificación one-shot con embeddings#
Los modelos de clasificación Ultralytics YOLO26 devuelven embeddings de imagen mediante embed(), que agrupa la salida de la capa anterior a la head de clasificación en un vector por imagen. Este ejemplo crea un clasificador one-shot de 10 clases para CIFAR-10 a partir de esos embeddings: los únicos datos etiquetados son una imagen almacenada por clase, y cada consulta recibe la etiqueta de la imagen almacenada más similar:
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%)")El modelo nunca se entrena con CIFAR-10, así que la precisión impresa mide hasta qué punto un ejemplo por clase define esa clase en el espacio de embeddings de YOLO26; para añadir una undécima clase bastaría con almacenar un embedding más.
Aplicaciones#
- Verificación facial: Las puertas fronterizas automatizadas comparan la imagen de una cámara en directo con la única foto almacenada en el chip del pasaporte, y los teléfonos y sistemas de control de acceso comparan cada intento con el rostro registrado durante el alta.
- Reconocimiento de productos en comercios: Las tiendas incorporan productos nuevos constantemente, y una única foto de catálogo por artículo permite que un sistema lo reconozca en la estantería sin volver a entrenarse.
- Aprendizaje por imitación one-shot: Entrena robots para realizar una nueva variante de una tarea, como apilar bloques en un orden nuevo, después de observar una única demostración.
Retos#
Un solo ejemplo no muestra cómo varía una clase, por lo que una foto de referencia tomada con poca luz, desde un ángulo inusual o con el objeto parcialmente oculto proporciona una referencia deficiente para todas las comparaciones posteriores. El umbral de coincidencia determina el equilibrio entre falsos positivos y falsos negativos, y debe ajustarse con pares de validación para cada aplicación; además, un embedding entrenado en un dominio, como el de las fotos cotidianas, separa peor las clases en otro dominio, como el de las imágenes médicas.
Aprendizaje one-shot frente a términos relacionados#
- Aprendizaje few-shot: El problema general de aprender con unos pocos ejemplos etiquetados por clase. El aprendizaje one-shot es el caso con exactamente uno, escrito 1-shot en la notación N-way K-shot.
- Aprendizaje zero-shot: Reconoce clases sin ningún ejemplo, a partir de una descripción textual o de atributos.
- Aprendizaje por transferencia: Reutiliza un modelo preentrenado para una tarea nueva, normalmente mediante ajuste fino con muchos ejemplos etiquetados. Los sistemas one-shot también se basan en características transferidas, pero las comparan directamente sin actualizar ningún peso.
- Detección de anomalías: Aprende cómo es lo normal y señala todo lo que se aleja de ello; responde si un elemento es inusual, en lugar de indicar a qué clase pertenece.










