LoRA (Low-Rank Adaptation)
LoRA ajusta modelos grandes congelando sus pesos y entrenando pequeñas matrices de actualización de bajo rango, lo que reduce los parámetros entrenables, la memoria y el almacenamiento.
LoRA, abreviatura de Low-Rank Adaptation, es un método de ajuste fino eficiente en parámetros (PEFT) que adapta un modelo grande preentrenado a una tarea nueva congelando sus pesos originales y entrenando un pequeño par de matrices junto a las capas seleccionadas. Su producto es una actualización de rango bajo que se suma a los pesos congelados, por lo que solo una fracción diminuta de los parámetros recibe gradientes. Presentado por Hu et al. en Microsoft en 2021, LoRA redujo 10.000 veces los parámetros entrenables de GPT-3 175B y 3 veces la memoria de GPU necesaria para entrenar, frente al ajuste fino completo con Adam, igualando o superando la calidad del ajuste fino completo en RoBERTa, DeBERTa, GPT-2 y GPT-3. Hoy se usa ampliamente para personalizar modelos de lenguaje grandes (LLM), modelos de difusión y transformadores de visión con hardware modesto. LoRa, el protocolo de radio de largo alcance para dispositivos IoT, es un término sin relación.
Cómo funciona LoRA#
El ajuste fino modifica una matriz de pesos W preentrenada de tamaño d × k mediante una actualización ΔW. LoRA supone que esta actualización tiene un rango intrínseco bajo, por lo que puede expresarse como el producto de dos matrices estrechas: ΔW = B × A, donde A es r × k, B es d × r y el rango r es mucho menor que d o k. La salida de la capa pasa a ser h = Wx + (α / r) × BAx, donde α es una constante de escala fija. A se inicializa con valores aleatorios pequeños y B con ceros, así que el entrenamiento parte exactamente del modelo preentrenado. Durante la retropropagación, solo se actualizan A y B, lo que también elimina el estado del optimizador de todos los pesos congelados.
Para una proyección de 4096 × 4096, el ajuste fino completo entrena unos 16,8 millones de pesos, mientras que un adaptador de rango 8 entrena 8 × (4096 + 4096) = 65.536. El script de PyTorch que aparece a continuación crea un adaptador de este tipo y lo fusiona con la capa congelada:
import torch
from torch import nn
# A frozen pretrained 4096 x 4096 projection, like one in a transformer attention block
base = nn.Linear(4096, 4096).requires_grad_(False)
# LoRA's trainable rank-8 update: B @ A, scaled by alpha / r
# B starts at zero, so the adapted layer initially matches the pretrained one
r, alpha = 8, 16
A = nn.Parameter(torch.randn(r, 4096) * 0.01)
B = nn.Parameter(torch.zeros(4096, r))
trainable = A.numel() + B.numel()
total = trainable + sum(p.numel() for p in base.parameters())
print(f"Trainable: {trainable:,} of {total:,} parameters ({trainable / total:.2%})")
# After training, merge the update into the base weight so inference costs nothing extra
nn.init.normal_(B, std=0.01) # stand-in for trained values
x = torch.randn(2, 4096)
adapted = base(x) + (alpha / r) * (x @ A.T @ B.T)
merged = nn.functional.linear(x, base.weight + (alpha / r) * B @ A, base.bias)
print(f"Merged layer matches adapter output: {torch.allclose(adapted, merged, atol=1e-5)}")El adaptador entrena 65.536 de los 16.846.848 parámetros de la capa, es decir, el 0,39 %, y plegar B × A dentro de W produce las mismas salidas que ejecutar el adaptador por separado. Por tanto, los modelos LoRA fusionados se ejecutan exactamente a la misma velocidad que el original, una ventaja frente a las primeras capas de adaptador, que añaden cálculos adicionales a cada pasada hacia delante.
Uso práctico de LoRA#
El artículo original solo adaptó las proyecciones de consulta y valor de la atención del transformador, pero hoy muchas recetas se aplican a todas las capas lineales. El rango y α son los principales hiperparámetros: la biblioteca Hugging Face PEFT usa r = 8 y α = 8 de forma predeterminada. Como el modelo base permanece intacto, una implementación puede conservar una sola copia y alternar entre pequeños adaptadores específicos para cada tarea. Con rango 4 en las proyecciones de consulta y valor de GPT-3 175B, cada punto de control adaptado pasó de 350 GB a unos 35 MB, unas 10.000 veces menos.
- Modelos de lenguaje: Los equipos adaptan LLM abiertos a un ámbito, estilo o formato de instrucciones en una sola GPU, a menudo combinando LoRA con datos de ajuste de instrucciones.
- Generación de imágenes: Los archivos LoRA enseñan a Stable Diffusion y a modelos similares un personaje, producto o estilo artístico, y se comparten y combinan por separado del punto de control base.
- Modelos de visión y multimodales: Los adaptadores especializan transformadores de visión y modelos de lenguaje y visión (VLM) para imágenes médicas, industriales o de documentos sin volver a entrenar la red troncal.
Variantes#
- QLoRA: Congela el modelo base con precisión NormalFloat de 4 bits y entrena adaptadores LoRA encima. Dettmers et al. lo usaron para ajustar un modelo de 65.000 millones de parámetros en una sola GPU de 48 GB, conservando el rendimiento del ajuste fino completo de 16 bits.
- DoRA: Divide cada peso preentrenado en magnitud y dirección, y aplica LoRA solo a la dirección, lo que reduce la diferencia de precisión respecto al ajuste fino completo con el mismo coste de inferencia.
LoRA frente a términos relacionados#
- Ajuste fino eficiente en parámetros: Término general para los métodos que entrenan solo una pequeña parte del modelo. Congelar capas es la forma más sencilla, y Ultralytics YOLO lo ofrece mediante el argumento de entrenamiento
freeze, que mantiene las primeras N capas de un modelo YOLO26 con sus pesos preentrenados mientras se entrena el resto. - Ajuste fino completo: Actualiza todos los pesos y almacena una copia completa del modelo para cada tarea. En programación y matemáticas, el ajuste fino completo superó ampliamente a LoRA estándar, mientras que LoRA sufrió menos olvido catastrófico de otras capacidades del modelo base.
- Ajuste de prompts: Aprende incrustaciones de prompts blandos que se anteponen a la entrada mientras todos los pesos del modelo permanecen congelados.
- Aprendizaje por transferencia: Idea general de reutilizar conocimientos de una tarea en otra. LoRA es una forma eficiente de hacerlo.
- Fusión de modelos: Combina los pesos de modelos ajustados por separado; fusionar varios adaptadores LoRA en un único modelo base es un caso habitual.










