LoRA (Low-Rank Adaptation)
O LoRA ajusta modelos grandes congelando seus pesos e treinando pequenas matrizes de atualização de baixa ordem, o que reduz os parâmetros treináveis, a memória e o armazenamento.
LoRA, abreviatura de adaptação de baixo posto, é um método de ajuste fino eficiente em parâmetros (PEFT) que adapta um modelo pré-treinado de grandes dimensões a uma nova tarefa, congelando os pesos originais e treinando um pequeno par de matrizes em conjunto com camadas selecionadas. O produto dessas matrizes é uma atualização de baixo posto que se adiciona aos pesos congelados; assim, apenas uma fração minúscula dos parâmetros recebe gradientes. Introduzido por Hu et al. na Microsoft em 2021, LoRA reduziu em 10.000 vezes o número de parâmetros treináveis do GPT-3 175B e em 3 vezes a memória GPU necessária para o treino, em comparação com o ajuste fino completo usando Adam, igualando ou superando a qualidade do ajuste fino completo em RoBERTa, DeBERTa, GPT-2 e GPT-3. Atualmente, é amplamente usada para personalizar modelos de linguagem de grande dimensão (LLMs), modelos de difusão e transformers de visão em hardware modesto. LoRa, o protocolo de rádio de longo alcance para dispositivos IoT, é um termo sem relação com este.
Como funciona LoRA#
O ajuste fino altera uma matriz de pesos pré-treinada W de dimensão d × k através de uma atualização ΔW. LoRA parte do princípio de que esta atualização tem um posto intrínseco baixo, pelo que pode ser escrita como o produto de duas matrizes estreitas: ΔW = B × A, em que A tem dimensão r × k, B tem dimensão d × r e o posto r é muito menor do que d ou k. A saída da camada passa a ser h = Wx + (α / r) × BAx, em que α é uma constante de escala fixa. A é inicializada com valores aleatórios pequenos e B com zeros, pelo que o treino começa exatamente a partir do modelo pré-treinado. Apenas A e B são atualizadas durante a retropropagação, o que também elimina o estado do otimizador de todos os pesos congelados.
Numa projeção de 4096 × 4096, o ajuste fino completo treina cerca de 16,8 milhões de pesos, enquanto um adaptador de posto 8 treina 8 × (4096 + 4096) = 65.536. O script PyTorch abaixo cria um adaptador deste tipo e incorpora-o na camada 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)}")O adaptador treina 65.536 dos 16.846.848 parâmetros da camada, ou seja, 0,39%, e incorporar B × A em W produz as mesmas saídas que executar o adaptador separadamente. Assim, os modelos LoRA incorporados executam exatamente à mesma velocidade que o modelo original, uma vantagem em relação às camadas adaptadoras anteriores, que acrescentavam computação a cada passagem direta.
Usar LoRA na prática#
O artigo original adaptou apenas as projeções de consulta e valor da atenção do transformer, mas muitas receitas atuais visam todas as camadas lineares. O posto e α são os principais hiperparâmetros: a biblioteca Hugging Face PEFT usa r = 8 e α = 8 por predefinição. Como o modelo base permanece intacto, uma implementação pode manter uma única cópia do modelo e alternar entre pequenos adaptadores específicos para cada tarefa. Com posto 4 nas projeções de consulta e valor do GPT-3 175B, cada ponto de controlo adaptado passou de 350 GB para cerca de 35 MB, ou seja, ficou aproximadamente 10.000 vezes menor.
- Modelos de linguagem: As equipas adaptam LLMs abertos a um domínio, estilo ou formato de instruções usando uma única GPU, muitas vezes combinando LoRA com dados de ajuste a instruções.
- Geração de imagens: Os ficheiros LoRA ensinam o Stable Diffusion e modelos semelhantes a reproduzir uma personagem, um produto ou um estilo artístico, e são partilhados e empilhados separadamente do ponto de controlo base.
- Modelos de visão e multimodais: Os adaptadores especializam transformers de visão e modelos de visão e linguagem (VLMs) para imagens médicas, industriais ou documentais, sem voltar a treinar a rede-base.
Variantes#
- QLoRA: Congela o modelo base em precisão NormalFloat de 4 bits e treina adaptadores LoRA sobre ele. Dettmers et al. usaram este método para ajustar um modelo com 65 mil milhões de parâmetros numa única GPU de 48 GB, preservando o desempenho do ajuste fino completo de 16 bits.
- DoRA: Decompõe cada peso pré-treinado em magnitude e direção e aplica LoRA apenas à direção, reduzindo a diferença de precisão em relação ao ajuste fino completo com o mesmo custo de inferência.
LoRA e termos relacionados#
- Ajuste fino eficiente em parâmetros: Termo abrangente para métodos que treinam apenas uma pequena parte de um modelo. Congelar camadas é a forma mais simples; a Ultralytics YOLO disponibiliza essa opção através do argumento de treino
freeze, que mantém as primeiras N camadas de um modelo YOLO26 com os respetivos pesos pré-treinados enquanto treina as restantes. - Ajuste fino completo: atualiza todos os pesos e armazena uma cópia completa do modelo para cada tarefa. Em programação e matemática, o ajuste fino completo superou substancialmente o LoRA padrão, enquanto o LoRA sofreu menos esquecimento catastrófico de outras habilidades do modelo base.
- Ajuste de prompts: Aprende incorporações de prompts suaves, acrescentadas ao início da entrada, enquanto todos os pesos do modelo permanecem congelados.
- Aprendizagem por transferência: Ideia geral de reutilizar conhecimento de uma tarefa noutra. LoRA é uma forma eficiente de o fazer.
- Fusão de modelos: Combina os pesos de modelos ajustados separadamente; fundir vários adaptadores LoRA num único modelo base é um caso comum.










