Few-Shot Learning explicado de forma sencilla (con diagramas y código real)
Few Shot Learning: lo esencial en un artículo — código real, diagramas y pasos concretos, extractos de un curso de 35 lecciones.
Una guía que va al grano: Few Shot Learning diseccionado con diagramas, ejemplos concretos y comandos probados. Todo proviene de un curso estructurado de 11 capítulos — aquí lo mejor.
- Introducción e Instalación
- Por qué el few-shot
- Fundamentos del meta-learning
- Métricas y benchmarks
- Siamese Networks
La atención para el few-shot
Objetivos pedagógicos
La intuición de la atención
La atención, en deep learning, es la idea de que un modelo puede asignar un peso diferente a cada elemento de un conjunto según el contexto. Cuando lees una frase, tu cerebro no presta la misma atención a cada palabra; se concentra en las palabras importantes.
La analogía de la clase
Imagina una clase escolar donde cada alumno da su opinión sobre la respuesta a una pregunta. En lugar de tomar la opinión del mejor (Siamese), o el promedio de todos (ProtoNet), se pondera: un alumno que parece «cercano» al tema tiene más voz.
Siamese
Se toma el ejemplo más cercano, se ignora el resto. 1 voto, 0 abstenciones.
ProtoNet
Se hace el promedio uniforme de los ejemplos de una clase. Voto equitativo, sin matices.
Matching Net
Se da a cada ejemplo un peso según su similitud con la query. Voto ponderado.
Fórmula de la predicción
Para una query q y un soporte {(x_i, y_i)}:
El modelo predice entonces una distribución de probabilidades, suma de todas las contribuciones ponderadas de cada ejemplo del soporte.
Atención suave vs dura
| Tipo | Comportamiento | Uso few-shot |
|---|---|---|
| Dura (hard) | Elige UN ejemplo (argmax) | Equivalente a Siamese |
| Suave (soft) | Pondera todos los ejemplos | Matching Networks |
El contexto: la influencia de los demás ejemplos
Un matiz importante de Matching Networks: el codificador puede tener en cuenta el contexto completo del soporte (y no cada imagen de forma aislada). Es la idea del Full Context Embedding (FCE).
Comparación con ProtoNet
| Aspecto | Matching Net | ProtoNet |
|---|---|---|
| Representación de una clase | Mantiene todos los ejemplos | Un solo prototipo |
| Mecanismo | Atención ponderada | Distancia al prototipo |
| Contexto | Sí (FCE opcional) | No |
| Rendimiento K=1 (Omniglot) | ~98% | ~98% |
| Rendimiento K=5 (Omniglot) | ~99% | ~99.5% |
| Complejidad del código | Más elevada | Muy simple |
El artículo fundador
Casos de uso reales del few-shot
Objetivos pedagógicos
Caso 1 — Medicina: enfermedades raras
Una enfermedad se considera rara en Europa cuando afecta a menos de 1 persona de cada 2 000. Hay más de 7 000 enfermedades raras catalogadas, pero cada una suele contar con solo unas decenas de casos documentados por imagen médica.
Problema concreto
Un radiólogo ve pasar una lesión que solo ha visto 3 veces en su carrera. Le gustaría que su IA de asistencia compare esta imagen con todas las lesiones similares ya anotadas en el mundo.
Aportación del few-shot
Un modelo que aprende un espacio de embeddings sobre imágenes comunes y luego recupera los casos más cercanos en una base de lesiones raras. Incluso 5 ejemplos bastan para activar una clase.
Caso 2 — Biodiversidad: especies raras
La aplicación iNaturalist cataloga cientos de miles de especies, pero muchas de ellas solo tienen entre 5 y 20 fotos en toda la base mundial (una mariposa descubierta recientemente, un milpiés endémico de un solo bosque…).
Caso 3 — Industria: control de calidad en defectos raros
Imaginemos una cadena de producción de tarjetas electrónicas. La gran mayoría de las tarjetas están sanas; los defectos que pasan por control visual son 2 tarjetas de cada 100 000. En 6 meses se tienen 4 fotos de una «soldadura fría» y 1 foto de un «pad arrancado».
| Enfoque | Resultado | Problema |
|---|---|---|
| CNN clásico multiclase | ~30% f1 en defectos raros | Demasiados pocos ejemplos |
| Detección de anomalías | Detecta ruido adicional | Demasiado sensible a variaciones |
| Few-shot (ProtoNet) | ~88% f1 con 5 ej. | Por ahora, lo mejor |
Caso 4 — NLP: intenciones de clientes de nicho
Un chatbot de asistencia bancaria debe comprender intenciones muy específicas («cierre de cuenta antes de 30 días», «levantamiento parcial de hipoteca») que a veces tienen menos de 50 ejemplos en los logs.
# Few-shot con LLM para clasificar una intención prompt = """ Eres un clasificador de intenciones bancarias. Aquí tienes 5 ejemplos: "Quiero cerrar mi cuenta este mes" -> CLOTURE_RAPIDE "Deseo reducir mi préstamo hipotecario parcialmente" -> MAINLEVEE_PARTIELLE "¿Está en curso mi expediente de crédito?" -> SUIVI_CREDIT "Quiero cerrar mis cuentas rápido" -> CLOTURE_RAPIDE "Quiero liberar parte de mi hipoteca" -> MAINLEVEE_PARTIELLE Pregunta: "¿Cómo cerrar con urgencia?" Respuesta:""" # → el LLM responde CLOTURE_RAPIDE, sin entrenamiento
Caso 5 — Finanzas: nuevos tipos de fraude
Los estafadores inventan constantemente nuevos esquemas. Cuando un banco detecta un nuevo patrón de fraude, suele tener solo 10 a 30 transacciones etiquetadas antes de que el patrón desaparezca o cambie.
Problema
Es imposible reentrenar un modelo clásico para cada nuevo esquema: sería demasiado lento y el esquema ya habría cambiado.
Solución few-shot
Un modelo de embeddings de transacciones compara en tiempo real la nueva transacción con las 10 fraudes conocidas del esquema actual.
In-context learning con GPT
Objetivos pedagógicos
La idea revolucionaria de GPT-3
Antes de 2020, hacer few-shot requería entrenar un modelo específico (ProtoNet, MAML, etc.). En 2020, OpenAI publica GPT-3 y demuestra que un gran modelo de lenguaje preentrenado puede hacer few-shot sin entrenamiento adicional. Basta con poner los ejemplos en el prompt.
Un ejemplo concreto
prompt = """ Traduce del francés al inglés. Francés: Le chat dort sur le canapé. Inglés : The cat is sleeping on the sofa. Francés: Je vais au marché. Inglés : I am going to the market. Francés: Il fait beau aujourd'hui. Inglés :""" # Respuesta esperada de GPT-4: # « It is sunny today. »
Sin ninguna fase de fine-tuning, solo con dos ejemplos en el prompt, GPT-4 ha comprendido la tarea de traducción y produce la respuesta correcta.
Zero-shot vs One-shot vs Few-shot prompting
| Modo | Contenido del prompt | Ejemplo |
|---|---|---|
| Zero-shot | Solo instrucción | « Traduce: Bonjour » |
| One-shot | Instrucción + 1 ejemplo | « Traduce. ‘Merci’ -> ‘Thank you’. ‘Bonjour’ -> » |
| Few-shot | Instrucción + 3 a 10 ejemplos | (Como arriba con más ejemplos) |
El artículo que lo cambió todo: Brown 2020
¿Por qué funciona?
Nadie tiene una respuesta completa. Varias teorías se complementan:
1. Reconocimiento de patrones
El modelo ha visto millones de listas «Q: ... Respuesta: ...» durante el preentrenamiento y reconoce el formato.
2. Meta-learning implícito
Durante el preentrenamiento, el modelo aprendió a aprender nuevas tareas a medida que consume texto.
3. Induction heads
El análisis de los Transformers revela circuitos internos («induction heads») especializados en copiar patrones vistos previamente.
¿Cuándo usar in-context learning?
| Situación | Recomendación |
|---|---|
| Muy pocos datos (1-30 ejemplos) | In-context learning con LLM |
| Muchos datos (1000+ ejemplos) | Fine-tuning clásico |
| Sin internet / on-premise | ProtoNet o MAML local |
| Latencia crítica (< 10 ms) | Modelo local entrenado |
| Costo de API demasiado alto | Fine-tuning o ProtoNet |
Código Python: llamar a la API de OpenAI en few-shot
from openai import OpenAI client = OpenAI() few_shot_examples = [ {"role": "system", "content": "Eres un clasificador de sentimiento."}, {"role": "user", "content": "¡Me encanta esta película!"}, {"role": "assistant", "content": "POSITIVO"}, {"role": "user", "content": "Fue aburrido."}, {"role": "assistant", "content": "NEGATIVO"}, {"role": "user", "content": "Meh, sin más."}, {"role": "assistant", "content": "NEUTRO"}, ] def classify(text): msgs = few_shot_examples + [{"role": "user", "content": text}] resp = client.chat.completions.create( model="gpt-4o-mini", messages=msgs, temperature=0, ) return resp.choices[0].message.content print(classify("¡La historia es cautivadora!")) # → POSITIVO
Este artículo cubre los extractos más útiles — el curso completo Few Shot Learning (11 capítulos, 35 lecciones, ejercicios corregidos y proyecto final) te lleva hasta el final.
./acceder-al-curso-completo curso gratuito: Ingeniería de promptsFAQ
¿Cuánto tiempo se necesita para aprender Few Shot Learning?
¿Se necesitan requisitos previos?
¿Por dónde empezar concretamente?
📬 ¿Quieres recibir este tipo de guía cada semana? Suscríbete gratis — código real, cero palabrería.