40 · Transfer learning y fine-tuning
Pre-entrena una vez (caro), adapta muchas veces (barato). La extracción de características congela el backbone y entrena una cabeza diminuta; el fine-tuning completo actualiza cada peso — cada uno encaja con un régimen de datos distinto.
El transfer learning reutiliza un backbone pre-entrenado: o lo CONGELAS y entrenas solo una pequeña cabeza nueva (extracción de características) o actualizas TODOS los pesos (fine-tuning completo). El régimen de datos decide cuál.
Sin esto:
Nadie entrena LLM desde cero por tarea — eso cuesta millones. El transfer learning es el flujo de trabajo cotidiano: toma un modelo pre-entrenado y adáptalo de forma barata a tu problema.
La lección 38 estableció la asimetría clave: el pre-entrenamiento es caro (billones de tokens, meses-GPU, millones de dólares), pero adaptar un modelo pre-entrenado a una tarea específica es barato. El transfer learning es el flujo de trabajo que explota esto — pre-entrena una vez, adapta muchas veces. Nunca entrenas el modelo gigante desde cero para tu problema; partes de un backbone pre-entrenado compartido y lo ajustas.
Hay dos estrategias principales, y la elección depende de cuántos datos etiquetados tengas:
-
Extracción de características (congelar el backbone). Mantén todos los pesos pre-entrenados CONGELADOS — trátalos como un extractor de características fijo — y entrena solo una pequeña cabeza (head) nueva encima (por ejemplo, un clasificador lineal que mapea la salida del backbone a tus clases). Solo se actualizan el puñado de parámetros de la cabeza. Esto es rápido, ligero en memoria y resistente al sobreajuste, porque las potentes características pre-entrenadas no pueden dañarse.
-
Fine-tuning completo (actualizar todos los pesos). Descongela todo el modelo y deja que los gradientes fluyan por TODO él, empujando suavemente cada peso pre-entrenado hacia tu tarea. Esto puede exprimir la mejor precisión cuando tienes suficientes datos etiquetados, pero actualiza cientos de millones de parámetros y arriesga el sobreajuste (y el "olvido catastrófico") en datasets pequeños.
El modelo mental: la extracción de características reutiliza el conocimiento pre-entrenado tal cual y solo aprende cómo LEERLO para tu tarea; el fine-tuning completo reconfigura el conocimiento mismo. La celda de abajo hace concreta la diferencia en el número de parámetros — es enorme.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Flujo de HuggingFace: AutoModelForSequenceClassification.from_pretrained, requires_grad=False opcional para congelar, Trainer.train() con LR pequeño (2e-5) y warmup.
¿Cuándo deberías congelar el backbone y entrenar solo una cabeza nueva?
- El transfer learning reutiliza un backbone pre-entrenado en lugar de entrenar desde cero: pre-entrena una vez (caro), adapta muchas veces (barato).
- La extracción de características congela el backbone y entrena solo una cabeza diminuta (a menudo <0.01% de los parámetros) — rápida y resistente al sobreajuste; el fine-tuning completo actualiza todos los pesos para mayor precisión cuando hay datos abundantes.
- El fine-tuning completo con pocos datos arriesga el sobreajuste y el olvido catastrófico; ajusta con un learning rate pequeño (p. ej. 2e-5) y warmup para preservar el conocimiento pre-entrenado.
Casi todo proyecto aplicado de NLP/visión es un proyecto de transfer learning: descarga un modelo pre-entrenado del HuggingFace Hub y ajústalo (o extrae características) con tus datos.
Si lo quitas: Pensarías que cada tarea nueva necesita un modelo entrenado desde cero — y o quemarías cómputo enorme o, con pocos datos, fracasarías por completo sin la ventaja del pre-entrenamiento.