Fine-tuning
El ajuste fino continúa el entrenamiento de un modelo preentrenado con datos específicos de una tarea para adaptarlo con muchos menos datos y recursos de computación. Incluye cómo funciona, PEFT y código.
El ajuste fino es el proceso de continuar el entrenamiento de un modelo que ya se ha entrenado con un conjunto de datos grande, actualizando algunos o todos sus pesos con un conjunto de datos más pequeño y específico para la tarea. Los pesos del modelo preentrenado ya codifican conocimientos generales, como bordes, texturas y formas en los modelos de visión, o gramática y hechos en los modelos de lenguaje grandes (LLM), por lo que el ajuste fino logra una gran precisión con muchos menos datos etiquetados y recursos de computación que el entrenamiento desde pesos aleatorios. Es la forma más habitual de llevar a cabo el aprendizaje por transferencia y así se crean la mayoría de los modelos personalizados de detección de objetos y de los asistentes conversacionales a partir de modelos fundacionales preentrenados.
Cómo funciona el ajuste fino#
Una ejecución de ajuste fino carga pesos preentrenados, sustituye o redimensiona las capas vinculadas a la tarea original, como un clasificador o una cabeza de detección, y entrena con los datos nuevos usando la función de pérdida y el optimizador habituales. Tres decisiones determinan cuánto se conserva del modelo original:
- Tasa de aprendizaje: El ajuste fino utiliza una tasa de aprendizaje menor que el preentrenamiento, normalmente después de un breve calentamiento, para que las actualizaciones refinen las características preentrenadas en lugar de sobrescribirlas. ULMFiT fue más allá con tasas de aprendizaje discriminativas, dividiendo la tasa por 2,6 por cada capa por debajo de la superior.
- Qué capas se entrenan: Congelar las primeras capas del backbone mantiene fijas las características generales, reduce el uso de memoria y disminuye el riesgo de sobreajuste con conjuntos de datos pequeños. El desbloqueo gradual entrena primero la nueva cabeza y después libera las capas más profundas.
- Duración del entrenamiento: Cuanto más tiempo entrena un modelo solo con datos nuevos, más habilidades originales pierde debido al olvido catastrófico.
La configuración adecuada depende de la memoria disponible, la cantidad de datos etiquetados y de si siguen siendo importantes las habilidades originales:
Ajuste fino completo y ajuste fino eficiente en parámetros#
El ajuste fino completo actualiza todos los pesos, lo que, en un LLM de 7.000 millones de parámetros, implica almacenar los gradientes y el estado del optimizador de 7.000 millones de valores, además de guardar una copia completa del modelo para cada tarea. El ajuste fino eficiente en parámetros (PEFT) congela los pesos preentrenados y entrena en su lugar un pequeño conjunto de parámetros añadidos o seleccionados; la biblioteca PEFT de Hugging Face implementa los métodos habituales. LoRA añade matrices entrenables de rango bajo junto a matrices de pesos congeladas y, en comparación con el ajuste fino completo de GPT-3 175B con Adam, redujo 10.000 veces los parámetros entrenables y 3 veces la memoria de la GPU. QLoRA entrena adaptadores LoRA sobre un modelo base cuantizado a 4 bits, lo que permitió ajustar un modelo de 65.000 millones de parámetros en una sola GPU de 48 GB.
Los LLM pasan por varias etapas de ajuste fino después del preentrenamiento. El ajuste con instrucciones entrena con pares de instrucciones y respuestas; después, métodos basados en preferencias, como el aprendizaje por refuerzo a partir de comentarios humanos (RLHF) y la optimización directa de preferencias (DPO), alinean las respuestas con las preferencias humanas.
Ajuste fino y términos relacionados#
- Aprendizaje por transferencia: La idea más amplia de reutilizar para otra tarea un modelo entrenado en una tarea distinta. El ajuste fino actualiza los pesos preentrenados, mientras que la extracción de características los mantiene congelados y solo entrena una cabeza nueva.
- Entrenamiento desde cero: Empieza con pesos aleatorios y requiere muchos más datos etiquetados y recursos de computación. Es adecuado para arquitecturas nuevas y dominios que apenas guardan relación con los datos de preentrenamiento disponibles.
- Sondeo lineal: Entrena únicamente un clasificador lineal con características congeladas, normalmente para medir cuánto representa ya una representación preentrenada.
- Ingeniería de prompts y generación aumentada por recuperación (RAG): Cambian el comportamiento de un LLM mediante su entrada, sin modificar los pesos.
Ajuste fino de un detector de objetos#
Llamar a train() con un checkpoint YOLO26 preentrenado y un conjunto de datos nuevo ajusta el modelo: se transfieren todos los pesos compatibles y, de forma predeterminada, cls_remap=True copia las filas del clasificador cuyos nombres de clase coinciden, así que, en el conjunto de datos African Wildlife, las salidas de elefante y cebra parten de las filas preentrenadas con COCO, mientras que las de búfalo y rinoceronte, que no están en COCO, empiezan desde cero.
from ultralytics import YOLO
# Carga pesos YOLO26n preentrenados con COCO; YOLO("yolo26n.yaml") entrenaría el modelo desde cero
model = YOLO("yolo26n.pt")
# Ajusta el modelo con 1.052 imágenes de entrenamiento de búfalos, elefantes, rinocerontes y cebras
results = model.train(data="african-wildlife.yaml", epochs=30, imgsz=640)En esta ejecución de 30 épocas, el valor predeterminado optimizer="auto" selecciona AdamW con lr0=0.00125, una tasa que calcula a partir de las 4 clases del conjunto de datos, porque la ejecución no llega a las 10.000 iteraciones.










