Due specializzazioni non si combinano soltanto perché i file sono piccoli
Un’impresa adatta lo stesso modello a due compiti e ottiene due piccoli adattatori LoRA (Low-Rank Adaptation, adattamento a rango ridotto). Sembra naturale fare la media dei loro parametri per conservare qualcosa di entrambi. Ma quali parametri stiamo mediando: l’aggiornamento effettivo del modello o i due fattori che lo rappresentano? Non è una distinzione formale. Mostreremo due adattatori con lo stesso identico aggiornamento che, mediati nel modo ingenuo, producono un aggiornamento nullo.
La domanda centrale è come combinare aggiornamenti fattorizzati senza introdurre termini estranei, e quale prezzo pagare se vogliamo mantenere il rango iniziale. L’analisi comprende matrici costruite₂ per₂, calcoli eseguiti e una compressione verificata. Non abbiamo addestrato un modello, misurato accuratezze o riprodotto un benchmark. Una ricerca ICML 2026 serve da contesto attuale, distinto dai risultati didattici propri: non chiameremo questa monografia ricerca originale.
Prima il prodotto, poi la rappresentazione compatta
Per un singolo strato lineare, chiamiamo W₀ la matrice del modello di partenza, con d righe e k colonne. LoRA rappresenta la modifica con due matrici: B ha d righe e r colonne, A ha r righe e k colonne. Il loro prodotto BA ha le stesse dimensioni di W₀, ma rango al massimo r. Il rango limita quante direzioni indipendenti possono essere espresse dall’aggiornamento; non è una misura diretta della qualità delle risposte.
s è il fattore di scala dell’adattatore. Negli esempi poniamo s uguale a 1; in un sistema reale va incluso nella modifica effettiva prima di definire la fusione. Due adattatori devono riferirsi allo stesso modello base e a strati compatibili. Non assumiamo che basti avere matrici della stessa forma per combinare modelli addestrati da basi diverse. Questa condizione è parte del problema, non una verifica che i soli file dei fattori possano sostituire.
La fattorizzazione non è unica
Consideriamo B come un modo di costruire direzioni di uscita e A come un modo di assegnare coordinate a quelle direzioni. Se cambiamo la scala di una direzione in B e compensiamo con la scala inversa in A, il prodotto non cambia. Più in generale, per una matrice invertibile Q di dimensione r per r, BQ e Q inversa A rappresentano ancora BA. Il modello vede il prodotto, non la scelta arbitraria delle coordinate interne.
Non stiamo modificando il compito né l’effetto dello strato: abbiamo soltanto descritto la stessa matrice in due modi. Un metodo che pretende di mediare gli aggiornamenti dovrebbe rispettare questa equivalenza. Se il suo risultato cambia perché abbiamo riscritto un adattatore senza alterarne il prodotto, allora quel metodo sta mediando anche una scelta di rappresentazione. Il primo esperimento isola esattamente questo problema, senza introdurre conflitto tra compiti.
Due aggiornamenti identici che diventano zero
Scegliamo un aggiornamento di rango 1 che agisce soltanto sulla prima coordinata. Il primo adattatore usa B₁=(1;0) e A₁=(1;0), con A₁ vettore riga e B₁ vettore colonna. Per il secondo invertiamo entrambi i segni. Anche il suo prodotto ha un 1 nell’angolo in alto a sinistra e zeri altrove: i due segni negativi si compensano. La media desiderata dei prodotti è dunque la stessa matrice, non zero.
Se però mediamo separatamente B₁ con B₂ e A₁ con A₂, entrambi i fattori medi diventano nulli. Il loro prodotto è zero. Una rappresentazione perfettamente equivalente del secondo adattatore ha quindi cancellato l’intero aggiornamento, benché non ci fosse nulla da mediare tra effetti diversi. È un controesempio al metodo ingenuo, non una dimostrazione che ogni forma di fusione LoRA sia impossibile.
Non serve limitarsi al cambio di segno. Nel codice moltiplichiamo B₂ per un numero c non nullo e dividiamo A₂ per c, lasciando il prodotto invariato. Con c=4, la media dei fattori produce 1,5625 nella prima posizione invece di 1; con c=−2 produce−0,125. Il metodo può dunque amplificare o perfino invertire l’aggiornamento per un cambiamento che non altera nessuno dei due adattatori nel loro effetto lineare.
L’espansione rivela i termini incrociati
Per capire la causa, prendiamo un peso w tra 0 e 1 e confrontiamo due operazioni. La media degli aggiornamenti combina wB₁ A₁ con (1−w) B₂ A₂. La media dei fattori combina prima le B e le A, poi ne moltiplica i risultati. Espandendo il prodotto compaiono B₁ A₂ e B₂ A₁: il fattore di un adattatore viene accoppiato a quello dell’altro. Inoltre i termini propri ricevono pesi al quadrato. Non stiamo calcolando la media dichiarata.
L’ultima riga è verificata nel programma per cinque valori di w. Spiega anche i casi speciali: se B₁ e B₂ sono identiche, oppure A₁ e A₂ sono identiche, la differenza si annulla. Anche w=0 o w=1 elimina la combinazione. Sono condizioni sufficienti, non una licenza per assumere fattori condivisi in adattatori addestrati indipendentemente. La forma delle matrici non dimostra che le loro coordinate siano già allineate.
La somma esatta esiste, ma il rango può crescere
Per calcolare davvero D possiamo concatenare orizzontalmente le B pesate e impilare verticalmente le A. La moltiplicazione a blocchi produce solo i prodotti corrispondenti, senza termini incrociati. Se gli adattatori hanno ranghi r₁ e r₂, il nuovo rango è al massimo r₁+r₂, oltre al limite imposto da d e k. La scala di ciascun adattatore può essere assorbita nella sua B pesata: non serve assumere che tutte le scale siano uguali.
Il prezzo è visibile nelle dimensioni: se R è la somma dei ranghi, memorizzare i due fattori richiede R(d+k) coefficienti, non r(d+k) con il rango originario r. Questo è un conteggio dei parametri, non della RAM totale o della latenza. Nel minuscolo esempio 2 per₂, un fattore di rango 2 non offre nemmeno risparmio rispetto alla matrice densa: il suo scopo è rendere verificabile l’algebra. Nei grandi strati la convenienza dipende da R rispetto a d e k.
Quando i due adattatori aggiungono direzioni indipendenti
Nel secondo esperimento vogliamo davvero combinare effetti diversi. Il primo aggiornamento è diag(2;0), il secondo diag(0;1). Con pesi uguali, la matrice desiderata è D=diag(1;0,5), di rango 2. Ogni adattatore iniziale ha rango 1, ma la media contiene due direzioni indipendenti. Questo non è un errore numerico: è un cambiamento strutturale. Un solo adattatore di rango 1 non può rappresentare esattamente quella matrice.
La media ingenua dei fattori restituisce invece l’ultima matrice: oltre a cambiare i valori diagonali, introduce coefficienti fuori diagonale che non appartenevano a nessuno dei due aggiornamenti. La concatenazione restituisce esattamente D. Per confrontare gli errori usiamo la norma di Frobenius: radice della somma dei quadrati di tutte le differenze fra coefficienti. È una distanza tra matrici, non una percentuale di accuratezza su un compito.
Tornare al rango iniziale significa scegliere che cosa perdere
La decomposizione ai valori singolari, SVD, separa una matrice in direzioni di ingresso e uscita associate a intensità non negative. Per D gli elementi singolari sono 1 e 0,5. La migliore approssimazione di rango 1 in distanza Frobenius conserva la componente 1 e scarta 0,5: diventa diag(1;0). L’errore è 0,5. Questa scelta è ottima per quella distanza; non implica che sia la scelta migliore per tutti i possibili compiti del modello.
| Metodo | Rango del risultato | Errore Frobenius |
|---|---|---|
| Media dei fattori | 1 | 0.7905694150 |
| SVD rango 1 | 1 | 0.5000000000 |
| Concatenazione esatta | 2 | 0.0000000000 |
Per leggere il limite in modo concreto, usiamo l’ingresso e₂=(0;1). L’aggiornamento desiderato risponde con (0;0,5); la versione troncata risponde con zero. Non diciamo che il modello abbia perso il 100% di accuratezza: non esiste un benchmark in questo esempio. Diciamo una cosa più precisa e verificata: l’azione lineare su quella direzione è stata completamente eliminata. Un criterio di compressione deve essere interpretato insieme agli ingressi e agli obiettivi che contano.

Comprimere senza costruire subito la matrice densa
Esattezza della somma e costo della sua rappresentazione sono due questioni separate. Se il rango concatenato R è piccolo rispetto a d e k, possiamo lavorare su fattori sottili. Una decomposizione QR scrive ciascun fattore come una base con colonne ortonormali moltiplicata per una matrice compatta. Ortonormale significa che le direzioni della base sono perpendicolari e hanno lunghezza 1; passare in queste coordinate conserva le distanze euclidee nel sottospazio rappresentato.
Quando R non supera d e k, il nucleo Rb × Ra trasposta ha dimensione R per R. Possiamo calcolare la sua SVD, conservare r componenti e riportarle nelle basi Qb e Qa. Il programma verifica che questa procedura produca la stessa matrice troncata della SVD di D nel nostro esempio. Non abbiamo implementato il metodo CtM del paper: questo è un controllo del percorso QR-nucleo per la somma esatta seguita da compressione.
Per fattori densi sottili, il costo aritmetico indicativo delle due QR cresce come(d+k) R²e quello della SVD del nucleo come R³, sotto le dimensioni appena dichiarate. Non trasformiamo questi ordini in millisecondi o risparmio di memoria misurato: non abbiamo eseguito un modello grande. Quando R cresce, anche il nucleo perde la sua convenienza. La forma fattorizzata evita alcuni costi, ma non rende gratuita la composizione di un numero arbitrario di adattatori.
Il contesto2026: scegliere il sottospazio prima della fusione
Compress then Merge di Zhengbao He e colleghi è registrato negli atti ICML 2026, PMLR 306, pagine 41212–41243. Per l’analisi abbiamo letto la versione arXiv 2606.03723 v 1 del 2 giugno 2026, nelle sezioni sul metodo e sul protocollo sperimentale, e verificato separatamente la pubblicazione negli atti. Il lavoro distingue la scelta di sottospazi condivisi dal successivo operatore di fusione; il rango d’uscita è imposto dalla costruzione, non recuperato soltanto dopo la fusione.
Questo riferimento non autorizza a trasferire i risultati al nostro caso aziendale. Il protocollo letto usa adattatori di rango 16 su CLIP ViT-B/32 per otto compiti visivi e LLaMA3-8B per sei compiti di inferenza del linguaggio naturale (NLI), che valutano relazioni fra frasi, con scelta degli iperparametri su validazione e valutazione test normalizzata al singolo adattatore. Non abbiamo riprodotto questi esperimenti. Una garanzia sul rango della matrice non è una garanzia universale sulle capacità; selezionare i sottospazi resta una scelta da valutare sui compiti pertinenti.
Che cosa abbiamo dimostrato e che cosa resta da misurare
I nostri risultati separano tre problemi spesso confusi: la correttezza algebrica della media, la capacità di rappresentare la matrice risultante al rango desiderato e la qualità del modello sui dati. Il controesempio di segno riguarda il primo; la matrice diagonale di rango 2 riguarda il secondo. Il terzo richiederebbe dataset, baseline, configurazione di adattamento e valutazione indipendente. Nessuno dei due esempi può da solo dimostrare un miglioramento delle risposte di un modello reale.
Gli esempi non contengono pesi di un prodotto EL-AI, né dati di clienti. Il codice usa Python e NumPy con matrici fissate, senza casualità; conserva risultati e tolleranza 10⁻¹². Nel frammento, le tre asserzioni confrontano l’effetto desiderato, il risultato sbagliato e la concatenazione corretta. Controllare soltanto le dimensioni dei fattori avrebbe lasciato passare il problema: sono i prodotti e le proprietà dichiarate a costituire il riferimento del test.
La risposta iniziale è quindi netta: mediare i fattori non equivale in generale a mediare gli aggiornamenti, perché compaiono termini incrociati e conta una rappresentazione non unica. La concatenazione offre una costruzione esatta, ma può aumentare il rango. Comprimerla richiede scegliere una perdita accettabile, che l’errore Frobenius da solo non traduce in utilità aziendale. Prima di combinare capacità, dobbiamo sapere quale operazione matematica il software sta effettivamente eseguendo.
Fonti e lettura correlata
LoRA: rango, geometria dell’adattamento e limiti misurabili
import numpy as np
B1=np.array([[1.],[0.]])
A1=np.array([[1.,0.]])
B2=-B1; A2=-A1
expected=(B1@A1+B2@A2)/2
factor_average=((B1+B2)/2)@((A1+A2)/2)
assert np.allclose(expected,[[1,0],[0,0]])
assert np.allclose(factor_average,0)
Bcat=np.concatenate([B1/2,B2/2],axis=1)
Acat=np.concatenate([A1,A2],axis=0)
assert np.allclose(Bcat@Acat,expected)
print(expected, factor_average)
Codice, dati e istruzioni · JSON. Calcoli didattici eseguiti con Python 3.14.0; figure con Matplotlib 3.11.2. Analisi con assistenza AI, senza dichiarare peer review o revisione umana. Copertina originale ImageGen, illustrativa: non documenta persone, sedi o installazioni EL-AI. Fonti consultate il 21 ottobre 2026.

