LoRA (Low-Rank Adaptation)
LoRA esegue il fine-tuning di modelli di grandi dimensioni congelandone i pesi e addestrando piccole matrici di aggiornamento a basso rango, riducendo così i parametri addestrabili, la memoria e lo spazio di archiviazione.
LoRA, abbreviazione di Adattamento a basso rango, è un metodo di fine-tuning efficiente in termini di parametri (PEFT) che adatta un modello preaddestrato di grandi dimensioni a un nuovo compito congelando i suoi pesi originali e addestrando una piccola coppia di matrici insieme a layer selezionati. Il loro prodotto è un aggiornamento a basso rango che viene aggiunto ai pesi congelati, quindi solo una frazione minima dei parametri riceve gradienti. Introdotto da Hu et al. di Microsoft nel 2021, LoRA ha ridotto di 10.000 volte i parametri addestrabili di GPT-3 175B e di 3 volte la memoria GPU necessaria per l'addestramento rispetto al fine-tuning completo con Adam, ottenendo al contempo risultati pari o superiori al fine-tuning completo su RoBERTa, DeBERTa, GPT-2 e GPT-3. Oggi è ampiamente usato per personalizzare modelli linguistici di grandi dimensioni (LLM), modelli di diffusione e vision transformer su hardware con risorse limitate. LoRa, il protocollo radio a lungo raggio per dispositivi IoT, è un termine non correlato.
Come funziona LoRA#
Il fine-tuning modifica una matrice dei pesi preaddestrata W di dimensioni d × k tramite un aggiornamento ΔW. LoRA presuppone che questo aggiornamento abbia un rango intrinseco basso, quindi può essere scritto come prodotto di due matrici sottili: ΔW = B × A, dove A è r × k, B è d × r e il rango r è molto più piccolo di d o k. L'output del layer diventa h = Wx + (α / r) × BAx, dove α è una costante di scala fissa. A viene inizializzata con piccoli valori casuali e B con zeri, quindi l'addestramento parte esattamente dal modello preaddestrato. Durante la retropropagazione vengono aggiornate solo A e B, eliminando anche lo stato dell'ottimizzatore per tutti i pesi congelati.
Per una proiezione 4096 × 4096, il fine-tuning completo addestra circa 16,8 milioni di pesi, mentre un adapter di rango 8 ne addestra 8 × (4096 + 4096) = 65.536. Lo script PyTorch qui sotto crea un adapter di questo tipo e lo integra nel layer congelato:
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)}")L'adapter addestra 65.536 dei 16.846.848 parametri del layer, lo 0,39%, e integrare B × A in W produce gli stessi output dell'esecuzione separata dell'adapter. I modelli LoRA integrati funzionano quindi esattamente alla stessa velocità dell'originale, un vantaggio rispetto ai precedenti layer adapter, che aggiungono calcoli a ogni passaggio in avanti.
Usare LoRA nella pratica#
Il documento originale adattava solo le proiezioni di query e value dell'attenzione del transformer, mentre oggi molte configurazioni interessano ogni layer lineare. Il rango e α sono i principali iperparametri: la libreria Hugging Face PEFT usa come valori predefiniti r = 8 e α = 8. Poiché il modello di base resta invariato, una distribuzione può conservarne una sola copia e sostituire gli adapter specifici per i singoli compiti. Con rango 4 sulle proiezioni di query e value di GPT-3 175B, ogni checkpoint adattato è passato da 350 GB a circa 35 MB, diventando circa 10.000 volte più piccolo.
- Modelli linguistici: I team adattano LLM aperti a un dominio, uno stile o un formato di istruzioni usando una sola GPU, spesso combinando LoRA con dati per l'addestramento alle istruzioni.
- Generazione di immagini: I file LoRA insegnano a Stable Diffusion e a modelli simili un personaggio, un prodotto o uno stile artistico e vengono condivisi e sovrapposti separatamente dal checkpoint di base.
- Modelli visivi e multimodali: Gli adapter specializzano i vision transformer e i modelli visione-linguaggio (VLM) per immagini mediche, industriali o di documenti senza riaddestrare il backbone.
Varianti#
- QLoRA: Congela il modello di base con precisione NormalFloat a 4 bit e addestra gli adapter LoRA sovrapposti. Dettmers et al. l'hanno usato per eseguire il fine-tuning di un modello da 65 miliardi di parametri su una singola GPU da 48 GB, mantenendo le prestazioni del fine-tuning completo a 16 bit.
- DoRA: Scompone ogni peso preaddestrato in modulo e direzione e applica LoRA solo alla direzione, riducendo il divario di accuratezza rispetto al fine-tuning completo a parità di costo d'inferenza.
LoRA e termini correlati#
- Fine-tuning efficiente in termini di parametri: Il termine ombrello per i metodi che addestrano solo una piccola parte di un modello. Congelare i layer è la forma più semplice e Ultralytics YOLO lo rende disponibile come argomento di addestramento
freeze, che mantiene i primi N layer di un modello YOLO26 ai pesi preaddestrati mentre si addestrano i restanti. - Fine-tuning completo: aggiorna ogni peso e archivia una copia del modello a dimensione intera per ogni attività. In programmazione e matematica, il fine-tuning completo ha superato nettamente LoRA standard, mentre LoRA ha limitato maggiormente la dimenticanza catastrofica delle altre capacità del modello di base.
- Prompt tuning: Apprende embedding di prompt morbidi da anteporre all'input, mantenendo congelati tutti i pesi del modello.
- Transfer learning: L'idea generale di riutilizzare le conoscenze acquisite in un compito per un altro. LoRA è un modo efficiente per farlo.
- Fusione di modelli: Combina i pesi di modelli sottoposti separatamente a fine-tuning; un caso comune consiste nel fondere diversi adapter LoRA in un unico modello di base.










