Un modelo base y una corrección por tarea
Consideremos un modelo de lenguaje que debe extraer el servicio afectado, la hora y la gravedad de un informe de incidencias. Si el informe no indica la hora, la respuesta debe dejar ese campo vacío. Al entrenar con pares de informes y respuestas esperadas, el modelo puede aprender a aplicar ese criterio a informes nuevos.
En un fine tuning completo, el optimizador puede modificar todos los parámetros del modelo. Hu y sus colaboradores propusieron otra forma de distribuir ese trabajo. En LoRA (Low-Rank Adaptation), las capas seleccionadas conservan sus pesos preentrenados y reciben dos matrices adicionales. El entrenamiento ajusta esas matrices para que, juntas, produzcan la corrección que necesita la tarea.
El modelo que extrae campos y el que clasifica incidencias pueden compartir los mismos pesos base. Cada tarea conserva su propio adaptador, que se puede guardar y versionar por separado. Para reproducir el resultado es necesario recuperar también la versión de la base con la que se entrenó.
Qué se calcula en cada capa
El diagrama del laboratorio separa dos cálculos que parten del mismo vector. En el primero, una capa lineal sin sesgo multiplica x por la matriz preentrenada W₀. Si hay n valores de entrada y m de salida, esa matriz tiene m filas y n columnas. En el segundo cálculo, el adaptador obtiene una corrección de m valores para sumarla a W₀x.
y = W₀x + (α/r) · B(Ax)ΔW = (α/r) · BAEl recorrido del adaptador va de n entradas a r valores intermedios y termina en m correcciones. Por eso A tiene dimensiones r × n y B, m × r. En el laboratorio, con rango 1, A transforma cuatro números en uno y B usa ese número en sus cuatro filas. El factor α/r multiplica el vector de corrección antes de sumarlo a la salida base.
Cada fila de A determina qué combinación de la entrada se mide. La columna correspondiente de B indica cómo repercute esa medida en cada salida. Con rango 1, las cuatro salidas del laboratorio pueden cambiar a la vez. Sin embargo, todas las correcciones son proporcionales a la misma columna de B, porque comparten el único valor que produce A.
Cuántas direcciones puede aprender la corrección
Si se mantiene fijo el adaptador y se cambia la entrada, también cambian los coeficientes de Ax. La corrección sigue siendo una combinación de las columnas de B. Por tanto, con r columnas hay como máximo r direcciones independientes en la corrección. Si las columnas son dependientes o A deja alguna sin utilizar, el rango efectivo de ΔW puede ser menor.
La misma restricción se ve al calcular BA. Cada columna de B, multiplicada por su fila correspondiente de A, aporta una matriz completa mediante un producto exterior. La suma de esas aportaciones puede cambiar todas las celdas de W₀. El límite de rango corresponde a ΔW. La matriz resultante W₀ + ΔW puede conservar rango completo.
Para una proyección de 4096 × 4096, un ajuste denso puede modificar 16.777.216 pesos. Con rango 8, cada factor contiene 4096 × 8 parámetros. La suma es 65.536, aproximadamente el 0,39 % de aquella proyección. El porcentaje para el modelo completo depende de cuántas capas se adapten y de si se entrenan otros parámetros.
Qué cambia al mover el rango y la escala
El objetivo del laboratorio es una matriz de 4 × 4 construida con cuatro direcciones ortogonales. Sus intensidades son 4, 2, 1 y 0,5, y el control de rango las incorpora en ese orden. Esta elección permite comprobar a mano qué aporta cada una. Durante un ajuste real, la función de pérdida guía el aprendizaje de los factores a partir de los ejemplos.
- Rango 1 y escala 1. Observa la esquina superior izquierda de
ΔW. Se obtiene con la primera fila de B y la primera columna de A. El cálculo da2 × 0,5 = 1. Al subir a rango 2, la segunda dirección aporta otro término y la celda pasa a1 + 1 × 0,5 = 1,5. - Elige la tercera dirección como entrada. Compara primero la salida adaptada con la salida base en rango 2. Coinciden porque esa entrada es ortogonal a las dos filas de A. En rango 3, A ya tiene una fila que detecta esa dirección y B puede generar la corrección.
- Fija el rango en 4 y alterna la escala entre 1 y 0. Con escala 1, la matriz calculada reproduce el objetivo. Con escala 0, toda la matriz de corrección se anula. A y B conservan sus valores en los dos casos. Solo cambia el multiplicador de su producto.
El porcentaje de error compara ambas matrices en conjunto. Primero se calcula la norma de Frobenius de su diferencia, es decir, la raíz de la suma de los errores al cuadrado de todas las celdas. Después se divide por la misma norma del objetivo. El indicador mide la reconstrucción de esta matriz de ejemplo. En el caso de los informes, lo que interesa medir es si el adaptador extrae correctamente los campos.
La escala del ejemplo permite contar los parámetros a simple vista. Una matriz densa de 4 × 4 tiene 16 celdas. En rango 2, A y B ya suman esas mismas 16, y en rango 4 suman 32. Para que la factorización reduzca el número de parámetros, r(m + n) tiene que ser menor que mn.
Cómo aprende el adaptador
Al inicio interesa que el modelo produzca la misma respuesta que antes de añadir LoRA. Una inicialización habitual deja B a cero y asigna valores aleatorios a A. Así, BA empieza en cero, pero B ya recibe una entrada distinta de cero para muchos ejemplos y puede aprender desde el primer paso. A comienza a recibir señal cuando B cambia. Si ambos factores arrancasen en cero, el gradiente de cada uno quedaría anulado por el otro.
En cada lote, el modelo procesa los informes y la función de pérdida compara sus predicciones con las respuestas esperadas. La retropropagación transmite esa señal a A y B. Las capas congeladas siguen interviniendo tanto en la predicción como en la propagación de la señal hacia los adaptadores anteriores. En el caso básico, el optimizador modifica únicamente los factores del adaptador.
La configuración del ajuste decide en qué proyecciones se inserta LoRA. En un Transformer pueden ser, por ejemplo, las de consulta, clave, valor y salida de la atención, o las capas lineales de la MLP. Conviene distinguir esa decisión de las otras dos que intervienen en el experimento. El rango limita las direcciones de cada corrección y la tasa de aprendizaje determina la escala de los pasos del optimizador.
Épocas y pasos del optimizador
Una época termina cuando el proceso de entrenamiento ha recorrido una vez su conjunto de datos. Configurar tres épocas permite presentar esos ejemplos tres veces. El rango, en cambio, determina la capacidad de cada actualización desde el momento en que se construye el adaptador.
Supongamos que hay 1.024 informes y se procesan 16 por lote en un dispositivo. Cada época abarca 64 lotes. Si el optimizador acumula el gradiente de cuatro lotes antes de actualizar A y B, realiza 16 actualizaciones por época. Tres épocas equivalen entonces a 48 pasos del optimizador.
Cargar un adaptador o fusionarlo con el modelo
Un adaptador debe guardarse con sus factores, su configuración y la revisión exacta del modelo base. Que dos versiones del modelo tengan capas del mismo tamaño permite cargar las matrices, pero sus pesos pueden producir respuestas diferentes. Para recuperar el comportamiento del extractor de informes también conviene conservar el tokenizador y la plantilla que se usó al preparar las entradas.
Si el sistema va a alternar entre extracción y clasificación, puede cargar cada adaptador sobre una base compartida. Si va a servir un solo ajuste, puede calcular W₀ + ΔW de antemano. Distribuir esa matriz fusionada elimina la rama adicional en ejecución y supone guardar los pesos del modelo completo. La equivalencia se obtiene al distribuir el producto (W₀ + ΔW)x en aritmética exacta.
La comprobación antes de publicar una fusión consiste en pasar las mismas entradas por ambas versiones y comparar las salidas. Las diferencias de precisión y las restricciones de algunos formatos cuantizados pueden afectar a la fusión.
Qué ahorra LoRA y qué añade la cuantización
La memoria de entrenamiento incluye los pesos base, las activaciones de la pasada hacia delante, los gradientes y los estados del optimizador. Al actualizar solo los factores, LoRA reduce las dos últimas partidas asociadas a los parámetros. El coste de las activaciones todavía depende de cuánto texto se procesa por ejemplo, del tamaño de los lotes y de si se recomputan durante la retropropagación.
Dettmers y sus colaboradores abordaron el coste de almacenar los pesos base con QLoRA. Su método conserva esa base congelada en un formato cuantizado de 4 bits y descuantiza sus pesos al tipo de cálculo para operar con ellos. La señal del error atraviesa la base hasta los factores entrenables. El rango y la cuantización actúan, por tanto, sobre partidas distintas del presupuesto de memoria.
Para comparar ambos métodos en un equipo concreto, mide la memoria máxima y el tiempo por paso con la misma longitud de secuencia y el mismo lote. El tamaño del archivo del adaptador sirve para estimar lo que habrá que almacenar o distribuir al terminar el entrenamiento.
Cómo saber si el ajuste aporta valor
Volvamos al extractor de incidencias. Una respuesta puede ser un JSON válido y asignar una hora que el informe nunca mencionó. Por eso conviene registrar por separado la validez del formato y la coincidencia de los valores extraídos. Si hay varias versiones del mismo informe, deben quedar en un solo conjunto para evitar que la evaluación repita un ejemplo visto durante el entrenamiento.
La primera medición se hace con el modelo base, usando la misma plantilla y configuración de generación que en las pruebas con LoRA. Una comparación de rangos 4, 8 y 16 puede mantener constantes los módulos adaptados y la escala α/r de LoRA clásico. Con la validación se elige una configuración y, una vez elegida, el conjunto de prueba permite estimar su rendimiento final.
Además de la puntuación, registra la memoria máxima, el tiempo y el tamaño del adaptador. Si el rango más alto acierta en entrenamiento y falla en validación, examina en qué informes se concentra la diferencia. Si todos los rangos fallan en los mismos casos, el siguiente análisis puede empezar por las etiquetas, la cobertura de los datos y las capas adaptadas.