🎯 Fine-Tuning

Agarrar un modelo que ya funciona y especializarlo para tu problema. La clave: saber cuándo merece la pena y cuándo no.

Especializar un modelo genérico

El fine-tuning es coger un modelo que ya sabe mucho (pre-entrenado) y darle un empujón para que sea experto en algo concreto. No empiezas desde cero — aprovechas todo lo que ya aprendió.

🏫 Analogía: un médico general que se especializa

Un médico sale de la facultad sabiendo de todo un poco (pre-training). Luego hace el MIR en endocrinología (fine-tuning): no vuelve a estudiar anatomía desde cero, sino que profundiza en hormonas, metabolismo, y casos clínicos específicos. Sigue sabiendo de todo, pero ahora es experto en algo.

¿Para qué se usa?

  • Estilo y tono: que hable como un médico, abogado, o atención al cliente
  • Vocabulario especializado: términos técnicos, jerga de dominio
  • Formato de salida: que siempre devuelva JSON, o un informe clínico estructurado
  • Corregir comportamientos: que no alucine en ciertos temas, que siga un protocolo
  • Adaptación a un idioma o cultura: español clínico, terminología local

⚔️ Generalista vs Fine-Tuning

Desde 2024 hay una discusión abierta: ¿merece la pena fine-tunear cuando los modelos generalistas son cada vez más capaces?

Ejemplo real (2025-2026): Varios papers muestran que GPT-4o, Claude Sonnet 4 o Gemini 2.5, sin ningún fine-tuning, igualan o superan a modelos fine-tuneados más pequeños (LLaMA 3 8B FT, Mistral 7B FT) en benchmarks médicos, legales y de código. ¿Por qué? Porque el pre-training de estos modelos grandes ya incluyó suficientes datos del dominio.

¿Cuándo gana el generalista?

  • Tareas estándar: responder preguntas generales, resumir, traducir
  • Conocimiento muy cubierto: medicina general, derecho básico, programación común
  • Cuando puedes dar buen contexto: si en el prompt le pones 10 ejemplos (few-shot), a menudo iguala al fine-tuning sin el coste
  • Cuando necesitas versatilidad: un solo modelo que haga de todo, no 10 modelos especializados

¿Cuándo gana el fine-tuning?

  • Formato y estructura rígida: necesitas que la salida siga exactamente un esquema (informes clínicos, formularios legales)
  • Vocabulario muy específico: jerga técnica que los modelos generalistas mezclan o ignoran
  • Latencia / coste: un modelo 7B fine-tuneado es más barato y rápido que llamar a GPT-4o cada vez
  • Privacidad / regulación: no puedes mandar datos a una API externa (GDPR, HIPAA)
  • Consistencia: el fine-tuning da respuestas más predecibles; un API externa puede cambiar de comportamiento sin avisar
Factor Generalista grande Fine-tune pequeño
Coste por consulta Alto ($3-15/1M tokens) Bajo ($0.05-0.5/1M tokens)
Latencia 500-3000ms 50-500ms
Precisión dominio Alta (si el tema es común) Muy alta (si el dataset es bueno)
Privacidad ❌ Datos salen de tu infra ✅ Todo local
Actualización Automática (el proveedor mejora) Tú mantienes el modelo
Inversión inicial €0 Horas de GPU + crear dataset
Riesgo Bajo (pagas por uso) Medio (puede no mejorar)

💡 La clave: No pienses en "fine-tuning SÍ o NO". Piensa en "¿qué me da más valor por mi tiempo y dinero?". Muchas veces, 3 prompts bien diseñados + RAG te dan el 90% del resultado sin tocar un peso.

El debate técnico

La comunidad está dividida. Por un lado, papers como "LIMA: Less Is More for Alignment" (2023) mostraron que con solo 1,000 ejemplos bien curados puedes igualar modelos fine-tuneados con cientos de miles. Por otro, "The False Promise of Fine-Tuning" y estudios posteriores (2025) muestran que el fine-tuning apenas aporta cuando el modelo base ya es muy bueno.

Papers clave

Paper Año Hallazgo principal
LIMA 2023 1,000 ejemplos curados bastan para alinear un modelo. La calidad > cantidad.
The False Promise of Fine-Tuning 2024 Fine-tuning en dominios muy específicos apenas mejora vs prompting cuidadoso. El modelo base ya sabe la mayor parte.
Generalist vs Specialist (DeepMind) 2024 Modelos generalistas grandes igualan a especialistas en casi todos los benchmarks cuando se les da contexto suficiente.
Data-Efficient Fine-Tuning 2025 Con ~500 ejemplos bien seleccionados se obtiene el 95% de la ganancia. El resto son rendimientos decrecientes.
Fine-Tuning or Retrieval? 2025 Compara RAG vs FT en dominios con conocimiento factual: RAG gana en actualización y precisión; FT gana en consistencia de formato y latencia.
MedFT Benchmark (Stanford) 2026 En medicina, GPT-4o sin FT iguala o supera a modelos médicos fine-tuneados en 14 de 18 sub-benchmarks. Solo pierde en extracción de datos estructurados de informes.

La conclusión de estos papers no es "fine-tuning no sirve". Es: "asegúrate de que realmente lo necesitas antes de invertir". El fine-tuning sigue siendo la mejor herramienta para:

  1. Control de formato estricto — el prompting puede fallar, el fine-tuning es más robusto
  2. Reducción de costes operativos — un modelo pequeño fine-tuneado te ahorra $/mes si tienes alto volumen
  3. Adaptación a dominios ultra-específicos — jerga médica muy local, notación científica, legislación de un país concreto
  4. Offline / privacidad — cuando los datos no pueden salir de tu infraestructura

¿Por qué los generalistas ganan?

Hay una razón estructural: los modelos grandes (70B+) tienen más capacidad de representación interna. Cuando haces fine-tuning a un modelo 7B, estás reasignando parámetros limitados. El modelo 70B ya tiene espacio para representar casi cualquier dominio. El fine-tuning en un modelo pequeño es un juego de suma cero: ganas en el dominio objetivo, pero pierdes capacidad general.

Catastrophic Forgetting

Problema: al fine-tunear un modelo 7B en un dominio específico,
pierde capacidad en tareas generales.

Ejemplo medido (LLaMA 3 8B FT en código médico):
- Precisión en diagnóstico: +12%
- Precisión en programación: -8%
- Precisión en razonamiento general: -5%

Solución parcial:
- EPOCHS bajos (1-3)
- Learning rate pequeño (1e-5 a 5e-5)
- Mezclar datos del dominio original (~10-20%) en el dataset de FT
- Usar LoRA en vez de full FT

Scaling Laws del fine-tuning

Los papers de Kaplan (2020) y Chinchilla (2022) mostraron leyes de escalado para pre-training. Para fine-tuning, las leyes son diferentes:

Ganancia ~ (dataset_size)^0.3 × (model_size)^(-0.2)

Implicaciones:
1. Modelos más grandes necesitan MÁS datos de FT para ver mejora
   (porque ya saben más, el margen de mejora es menor)
2. Con pocos datos (<1,000 ejemplos), los modelos pequeños mejoran más
   relativamente, pero los grandes parten de más arriba
3. El rendimiento decreciente llega rápido: ~500 ejemplos → 95% de la mejora

🔧 Técnicas: Full FT → LoRA → QLoRA

Hay tres formas principales de fine-tunear un modelo. De más a menos coste:

🔴 Full Fine-Tuning

Actualizas todos los parámetros del modelo. Resultado: virtualmente un modelo nuevo. Coste: necesitas GPUs múltiples (ej: 8× A100 para un 7B), semanas de entrenamiento. Solo viable para empresas con presupuesto.

🟡 LoRA (Low-Rank Adaptation)

Congelas el modelo original y añades pequeños adaptadores entrenables. Es como poner pegatinas sobre el modelo: el original se queda igual, solo cambian las pegatinas. Resultado: un fichero de ~10-100 MB que puedes distribuir. Entrenable en una GPU de consumo (RTX 3090/4090).

🟢 QLoRA

Igual que LoRA, pero el modelo base se carga en 4 bits (cuantizado). Esto reduce la VRAM necesaria drásticamente: un modelo 70B que normalmente necesita ~140 GB cabe en una sola GPU de 48 GB (A6000). Pierdes un 1-2% de precisión respecto a LoRA, pero entrenas en hardware que ya tienes.

Técnica Parámetros entrenables VRAM (7B) VRAM (70B) Pérdida precisión
Full FT 100% (~7B) ~60 GB ~500 GB 0%
LoRA ~0.1-1% ~16 GB ~140 GB <1%
QLoRA ~0.1-1% ~6 GB ~48 GB ~1-2%

💡 Para el 99% de los casos prácticos, LoRA o QLoRA son suficientes. El Full FT solo tiene sentido cuando necesitas cambiar el comportamiento fundamental del modelo (nuevo vocabulario, nuevo idioma no soportado, o destilar conocimiento de un modelo grande a uno pequeño).

LoRA en detalle

Idea matemática:

  W' = W + ΔW

  Donde W es la matriz de pesos original (congelada).
  En vez de aprender ΔW (que tiene el mismo tamaño que W),
  LoRA lo descompone en:

  ΔW = B × A

  Donde:
  - B es una matriz de tamaño (d × r)
  - A es una matriz de tamaño (r × k)
  - r es el rango (típicamente 4, 8, 16, 64)
  - r << min(d, k)

  Ejemplo: W es 4096 × 4096 (~16.8M parámetros)
  Con r=8: B=4096×8, A=8×4096 → ~65,536 parámetros
  Reducción: 16.8M → 65K (256× menos)

Hiperparámetros clave

Parámetro Qué controla Valor típico Efecto
r Rango de la adaptación 8-16 (pequeños), 32-64 (grandes) r↑ = más capacidad = más riesgo de overfitting
alpha Escala de la adaptación 16-32 alpha/r ≈ learning rate efectivo
dropout Regularización 0.05-0.1 Previene overfitting con datasets pequeños
target_modules Qué capas adaptar q_proj, v_proj (atención) Añadir FFN mejora para tareas de formato

Variantes modernas

Técnica Diferencia con LoRA Cuándo usarla
DoRA Descompone en magnitud + dirección (como WeightDecay) Cuando necesitas más precisión que LoRA (+1-2%) sin aumentar r
VeRA Comparte matrices A/B entre capas, entrena vectores pequeños Cuando tienes muchos modelos fine-tuneados (reducción de almacenamiento)
PiSSA Inicializa los adaptadores con SVD del modelo base Cuando el dataset es muy pequeño (<200 ejemplos)
LoRA-XS Adaptadores aún más pequeños que LoRA Cuando cada MB cuenta (edge, mobile)

QLoRA: cuantización + LoRA

QLoRA = Base model en NF4 (4-bit NormalFloat) + LoRA en BFloat16

Ahorro de VRAM:
  - Modelo 70B en FP16: 140 GB  → no cabe en ninguna GPU single
  - Modelo 70B en NF4:  35 GB  → cabe en A6000 (48 GB) o 2× RTX 4090
  - Modelo 7B en NF4:   3.5 GB → cabe en cualquier GPU

Overhead del adaptador LoRA (BF16):
  - r=16 en q_proj+v_proj+o_proj+gate_up_proj: ~33M parámetros
  - ≈ 66 MB adicionales (en BF16)

Pérdida de precisión por cuantización NF4:
  - Perplexity: +0.5-1.0 vs FP16
  - Precisión en benchmark: -0.5% a -2%
  - En la práctica: apenas perceptible para la mayoría de tareas

Métrica de eficiencia

Eficiencia de fine-tuning = mejora en benchmark / VRAM-usada

Full FT en 7B: mejora +8%, VRAM 60 GB → 0.13 ptos/GB
LoRA en 7B:    mejora +7%, VRAM 16 GB → 0.44 ptos/GB
QLoRA en 7B:   mejora +6.5%, VRAM 6 GB → 1.08 ptos/GB

QLoRA es ~8× más eficiente que Full FT por GB de VRAM.

🧭 Marco de decisión

Antes de fine-tunear, pregúntate esto en orden:

Paso 1: ¿Lo puedes hacer con prompting?

Prueba primero con el mejor modelo que puedas pagar (GPT-4o, Claude Sonnet 4, Gemini 2.5) y dale 3-5 ejemplos en el prompt (few-shot). Si funciona, no necesitas fine-tuning.

✅ Funciona → Usa prompting | ❌ No funciona → Paso 2

Paso 2: ¿Es un problema de conocimiento o de formato?

Si el modelo no sabe algo (información nueva, tus datos) → **RAG**. Si el modelo sabe pero no lo expresa como quieres (tono, estructura, vocabulario) → **fine-tuning**.

📖 Falta conocimiento → RAG | 🎯 Fallo de estilo/forma → FT

Paso 3: ¿Puedo usar un modelo local con RAG?

Con modelos como LLaMA 3.1 8B, Mistral Small 3.1 o Qwen 2.5 7B, bien prompteados + RAG, consigues resultados sorprendentes. Si esto cubre tu caso, no necesitas fine-tuning.

✅ Suficiente → Local + RAG | ❌ Insuficiente → Paso 4

Paso 4: Fine-tuning

Ya has descartado prompting, RAG, y modelos locales. Ahora sí. Empieza con QLoRA y un dataset pequeño (~200-500 ejemplos). Si ves mejora, escala.

🟢 QLoRA con r=8, 500 ejemplos, 3 epochs → prueba

🧠 Regla de oro: El fine-tuning es el último recurso, no el primero. Cada capa de abstracción (prompt → few-shot → RAG → FT) cuesta más tiempo y dinero. Empieza por lo más barato y escala solo si es necesario.

Árbol de decisión técnico

¿Necesitas mejorar el modelo?
├── ¿El problema es que NO SABE algo?
│   ├── ¿Está en tus documentos/BD? → RAG
│   └── ¿No está en ninguna parte? → Fine-tuning o pre-training continuo
│
├── ¿El problema es que SABE pero RESPONDE MAL?
│   ├── ¿Falla el formato/estructura? → Fine-tuning
│   ├── ¿Falla el tono/estilo? → Fine-tuning (o system prompt bien hecho)
│   └── ¿Falla en precisión factual? → RAG (probablemente el modelo alucina)
│
├── ¿El problema es COSTE/LATENCIA?
│   ├── ¿Usas API externa cara? → Fine-tunear modelo pequeño local
│   └── ¿Latencia alta? → Fine-tunear modelo pequeño local
│
├── ¿El problema es PRIVACIDAD?
│   └── ¿No puedes mandar datos a API? → Modelo local (con o sin FT)
│
└── ¿El problema es CONSISTENCIA?
    └── ¿El API externa cambia sin avisar? → Fine-tunear modelo pequeño

Checklist antes de fine-tunear

  • ✅ Dataset mínimo viable: 200-500 pares (instrucción, respuesta ideal). Si no tienes esto, no empieces.
  • ✅ Prueba sin FT: ¿Has probado few-shot con 5 ejemplos en el prompt? ¿Y con RAG?
  • ✅ Evaluación antes/después: Define 20-50 casos de prueba ANTES de fine-tunear. Si no puedes medir mejora, no sabrás si funcionó.
  • ✅ Baseline: Mide cómo responde el modelo base (sin FT) a esos casos. Si ya acierta el 90%, no necesitas FT.
  • ✅ Presupuesto de GPU: ¿Tienes acceso a GPU para entrenar? ¿Cuántas horas/dinero estás dispuesto a invertir?
  • ✅ Mantenimiento: ¿Actualizarás el dataset cuando el dominio cambie? El FT no es "una vez y olvidar".

⚠️ Error común: Gente que fine-tunea un modelo 7B con 100 ejemplos y espera que milagrosamente sepa responder como GPT-4. El fine-tuning no es magia. Si el modelo base no tiene el conocimiento, el FT no lo va a inventar — solo va a reordenar lo que ya sabe.

Estrategia de fine-tuning para producción

1. Baseline: prompting + RAG

Mide precisión, latencia y coste del modelo base con prompting cuidadoso y RAG. Esto es tu suelo. Si el FT no mejora esto significativamente, no lo implementes.

2. Iteración ultra-rápida

Fase 1 — Prueba de concepto (1 hora, en Colab o GPU local):
  - 50-100 ejemplos
  - QLoRA r=8
  - 1 epoch
  - ¿Mejora apreciable? → Fase 2
  - ¿No mejora? → Revisa el dataset o abandona FT

Fase 2 — Validación (1 día):
  - 200-500 ejemplos curados
  - QLoRA r=16
  - 3 epochs con early stopping
  - Evalúa contra el baseline
  - ¿Mejora >5%? → Fase 3
  - ¿Mejora <5%? → Probablemente no merece la pena

Fase 3 — Producción:
  - Dataset final: 500-2000 ejemplos
  - LoRA r=32 (o DoRA si necesitas más precisión)
  - 3-5 epochs
  - Evalúa en hold-out set
  - Despliega + monitoriza

2. Estrategias avanzadas

Técnica Para qué sirve
Curriculum FT Empieza con ejemplos fáciles, termina con difíciles. Mejora convergencia.
Data Augmentation Genera variaciones sintéticas de tus ejemplos (con un modelo grande) para aumentar el dataset.
Multi-task FT Entrena varias habilidades a la vez (formato + tono + precisión) en un solo paso.
DPO / ORPO En vez de imitar respuestas, aprende a preferir unas sobre otras. Mejor para alineamiento.
Merging Fusiona varios adaptadores LoRA entrenados para distintas tareas en uno solo (model merging).