La dualità: Mamba-2 e Mamba-3#
Nella sezione precedente abbiamo visto Mamba (che da qui in avanti chiameremo Mamba-1, per distinguerlo dai suoi successori) pagare un prezzo per la sua stessa forza. Lasciando decidere all’ingresso quanto scrivere e quanto dimenticare, il sistema è diventato selettivo, ma ha perso la regola fissa, e con essa il filtro unico che permetteva di addestrarlo tutto in una volta. Al suo posto è rimasto lo scan: la catena svolta a gruppi invece che in fila, veloce, ma con un difetto nascosto.
Il difetto sta nel tipo di conti che lo scan fa fare. Una scheda grafica sa fare due cose, e non le fa affatto alla stessa velocità. La prima è prendere due numeri, moltiplicarli, e ripetere: operazioni minute, una per volta, ciascuna con i suoi due numeri da andare a prendere in memoria. La seconda è moltiplicare fra loro due tabelle di numeri (in matematica una tabella di numeri si chiama matrice, e da qui in poi le due parole vogliono dire la stessa cosa), che è un’operazione sola con dentro migliaia di moltiplicazioni tutte uguali, disposte in un ordine noto in anticipo: si caricano i numeri una volta e si fa tutto il lavoro sul posto. Per questa seconda operazione, e solo per questa, le schede moderne hanno un reparto dedicato, i tensor core, ed è lì che sta la stragrande maggioranza della loro potenza. Lo scan di Mamba-1 fa conti del primo tipo, e quel reparto lo lascia quasi spento.
L’intuizione di Mamba-2, di Tri Dao e Albert Gu [DG24], è insieme teorica e pratica, ed è quella che chiude il cerchio del capitolo. Teorica: gli State Space Model e l’attenzione non sono due famiglie distinte, ma due viste della stessa cosa. Pratica: da quella equivalenza discende un algoritmo che si scrive come una sequenza di moltiplicazioni di matrici, cioè che riporta il calcolo proprio sul reparto dove sta quasi tutta la potenza della scheda.
State Space Duality: un SSM è un’attenzione#
Il risultato, detto in una riga, è questo: una macchina a spazio degli stati, purché si accetti di semplificarne un pezzo, non somiglia all’attenzione, è l’attenzione. Più precisamente un’attenzione mascherata, cioè un’attenzione a cui è vietato guardare avanti, che confronta ogni parola solo con quelle che l’hanno preceduta. Gli autori chiamano questo fatto State Space Duality (SSD), la dualità fra spazio degli stati e attenzione.
Il titolo del loro articolo è programmatico, Transformers are SSMs, ed è il rovescio della medaglia di quello che avevamo incontrato nel capitolo sull’attenzione lineare, Transformers are RNNs [KVPF20]. Lì avevamo tolto dall’attenzione il pezzo che costava di più e trovato sotto una rete ricorrente a stato fisso; qui si parte dall’altro capo, da un sistema dinamico misurato a intervalli, e si arriva all’attenzione.
Una dualità l’abbiamo già incontrata: la stessa funzione calcolata «passo dopo passo» (ricorrente) oppure «tutta insieme» (convoluzione o attenzione). Quella che arriva adesso è più profonda, e riguarda due oggetti che avevamo trattato come parenti lontani.
In due valli vicine si parlano quelli che tutti danno per due dialetti diversi. Di qua si dice «uno stato che evolve nel tempo», ed è la lingua degli State Space Model, venuta dalla teoria del controllo. Di là si dice «una tabella che confronta ogni parola con ogni altra», ed è la lingua dell’attenzione, venuta dalla traduzione automatica. Mamba-2 mette i due vocabolari uno accanto all’altro, e per ogni parola dell’uno trova quella dell’altro. L’etichetta sotto cui una parola viene archiviata nel foglio, di là si chiama chiave; l’informazione archiviata si chiama valore; la domanda con cui più tardi la si va a ripescare si chiama query; e il numero che a ogni passo fa sbiadire il foglio dice, di là, quanto una parola vecchia conta ancora adesso. Alla fine del confronto non restano due lingue, ma una sola scritta con due alfabeti.
Il vocabolario combacia a una condizione, ed è la rinuncia che Mamba-2 accetta: si prende la versione più semplice del foglio, quella in cui tutte le sue caselle sbiadiscono alla stessa velocità invece che ognuna alla propria. Con una velocità diversa per ogni casella, di là mancherebbe la parola per dirlo, e la frase resterebbe intraducibile.
Tradotta la frase, lo stesso conto si fa in due modi: passo dopo passo, aggiornando il foglio una parola per volta, oppure tutto insieme, formando la grande tabella dei confronti. La tabella non si riempie tutta, però. La metà che confronterebbe una parola con quelle che vengono dopo di lei resta a zero, perché nessuno può leggere il futuro; e ogni confronto che resta viene moltiplicato per quanto del ricordo è sopravvissuto da lì fin qui, così le parole lontane pesano meno di quelle vicine. Il secondo modo è quello che le GPU adorano.
Riprendiamo la convenzione del capitolo: lo stato \(\mathbf{S}_t\) è una memoria chiave→valore, aggiornata per prodotto esterno e letta con la query. Nel capitolo sull’attenzione lineare avevamo messo in fila lo «zoo» delle ricorrenze, e la riga di Mamba-2 era il decadimento scalare
con transizione \(\alpha_t \mathbf{I}\) (uno scalare per l’identità). Qui, e solo qui, il lato da cui la transizione moltiplica lo stato non conta: uno scalare commuta, mentre un fattore diagonale o di rango uno andrebbe scritto a destra, come vedremo nell’ultima sezione. La SSD mostra che questa è precisamente la forma cui si riduce un SSM quando si impone \(\mathbf{A} = a\mathbf{I}\), con \(a\) scalare fisso (uno per testa): la discretizzazione fa il resto, perché la transizione discreta diventa \(\bar{\mathbf{A}}_t = a_t \mathbf{I}\) con \(a_t = e^{\Delta_t a}\), data-dipendente attraverso \(\Delta_t\). Basta identificare i ruoli. Lo stato dell’SSM per una testa a dimensione \(P\) è la matrice \(\mathbf{S}_t \in \mathbb{R}^{P\times N}\); la matrice d’ingresso \(\mathbf{B}_t\in\mathbb{R}^{N}\) fa da chiave \(\mathbf{k}_t\), l’ingresso \(\mathbf{x}_t\in\mathbb{R}^{P}\) fa da valore \(\mathbf{v}_t\), la matrice d’uscita \(\mathbf{C}_t\in\mathbb{R}^{N}\) fa da query \(\mathbf{q}_t\), e lo scalare \(a_t\) è il gate \(\alpha_t\). La ricorrenza dell’SSM,
è la stessa riga della tabella. Un avvertimento sulla scrittura, perché altrimenti stona con il resto del capitolo: qui \(\mathbf{B}_t\) è già la matrice discretizzata, quella che altrove scriviamo \(\bar{\mathbf{B}}_t\), e il passo \(\Delta_t\) sta dentro, non davanti. È la convenzione del paper SSD, che dichiara in una nota di aver dato ai parametri discreti le lettere dei continui per alleggerire la notazione; più avanti, quando ricomparirà \(\bar{\mathbf{B}}_t = \Delta_t \mathbf{B}_t\), saremo tornati alle lettere del capitolo.
Srotolando la ricorrenza dallo stato iniziale nullo, l’uscita al passo \(i\) è
dove il fattore \(\prod_{k} a_k\) è quanto è sopravvissuto, dal passo \(j\) al passo \(i\), di ciò che era stato scritto. Raccogliamo tutti i passi in una sola matrice. Impilando le query \(\mathbf{C}_i\), le chiavi \(\mathbf{B}_j\) e i valori \(\mathbf{x}_j\) nelle righe di \(\mathbf{C}\), \(\mathbf{B}\), \(\mathbf{X}\), l’intera sequenza di uscite si scrive
dove \(\mathbf{C} \mathbf{B}^\top\) è la matrice \(L\times L\) (lunghezza per lunghezza) di tutte le affinità query–chiave, esattamente \(\mathbf{Q}\mathbf{K}^\top\) dell’attenzione; \(\odot\) è il prodotto elemento per elemento; e \(\mathbf{M}\) è una maschera causale con decadimento: azzera il futuro (triangolo superiore) e pesa il passato con i prodotti degli scalari \(a_t\). Il paper di Mamba-2 chiama \(\mathbf{L}\) questa maschera; qui la chiamiamo \(\mathbf{M}\) perché in tutto il libro \(L\) è la lunghezza della sequenza, e le due cose comparirebbero nella stessa formula. Questa è, alla lettera, un’attenzione mascherata: la stessa \(\mathrm{softmax}(\mathbf{Q}\mathbf{K}^\top/\sqrt{d_k})\mathbf{V}\) dei Transformer [VSP+17], con la softmax rimpiazzata dalla maschera \(\mathbf{M}\). La matrice \(\mathbf{M}\) ha una struttura particolare, detta 1-semiseparabile: ogni sua sottomatrice interamente contenuta nel triangolo inferiore ha rango al più uno, perché ogni elemento si fattorizza nei prodotti cumulati degli \(a_t\). È questa struttura a fare da ponte: i sistemi a spazio di stati con transizione scalare sono le attenzioni con maschera semiseparabile.
Il risultato ha una lettura da esplicitare, perché è il perno di due capitoli. Nel capitolo sull’attenzione lineare avevamo messo in fila una piccola collezione di architetture (uno «zoo», lo avevamo chiamato) che avevano tutte lo stesso corpo (una memoria di taglia fissa, addestrata in parallelo e usata passo dopo passo) e differivano in una cosa sola: come il passato sbiadisce quando arriva il presente. C’era chi non dimentica niente, chi sbiadisce tutta la memoria della stessa quantità, chi la sbiadisce casella per casella, e chi cancella di mira la vecchia voce che sta per essere riscritta. Mamba-2 occupa il gradino che sbiadisce tutto in blocco. Arrivando dai sistemi dinamici invece che dall’attenzione, ci ritroviamo esattamente lì: è la prova che le due strade (quella partita dall’attenzione e quella partita dai sistemi dinamici di Kálmán) portavano alla stessa città. La stessa funzione ha una forma ricorrente, che costa quanto la lunghezza del testo (la vista «SSM»), e una forma a tabella, la grande griglia dei confronti fra tutte le coppie di parole, mascherata perché ciascuna guardi solo all’indietro (la vista «attenzione»). Non è un’analogia: è un’uguaglianza.
Perché conviene: i tensor core#
La dualità sarebbe solo un’eleganza teorica se non pagasse in velocità. Paga, e la chiave è una rinuncia apparentemente minima. In Mamba-1 ogni casella della memoria sbiadiva a velocità propria; Mamba-2 impone che sbiadiscano tutti alla stessa. Sembra una perdita di espressività, cioè di cose che il modello sa distinguere, ed è invece ciò che rende l’algoritmo esprimibile come pura moltiplicazione di matrici.
Un’officina ha un attrezzo formidabile e specializzato: una pressa che stampa una lastra intera in un colpo solo, purché il pezzo abbia una certa forma. Finché lavori a mano, pezzo per pezzo, la pressa resta ferma e tu vai lentissimo. Se accetti di dare ai pezzi quella forma standard, puoi usarla, e vai molto più veloce.
I tensor core della GPU sono quella pressa: sanno fare una cosa sola, moltiplicare tabelle di numeri, e la fanno a velocità impressionante. Lo scan di Mamba-1, fatto di operazioni una-alla-volta, li teneva spenti. La piccola rinuncia di Mamba-2 dà ai conti la «forma standard» che la pressa accetta: il modello lavora a corsie (ogni corsia ha il suo pezzo di memoria), e invece di lasciare che ogni corsia dimentichi a modo suo, si chiede a un intero gruppo di corsie di dimenticare tutte alla stessa velocità. Basta questo, e il calcolo di tutto il gruppo diventa un prodotto fra tabelle: la pressa si accende.
La pressa, intanto, non toglie lavoro: batte tutta la lastra in una volta, comprese le zone dove non c’era niente da stampare, e di colpi ne dà anche più di quanti ne avresti dati tu andando a mano. Va più veloce lo stesso, perché li dà tutti insieme e tutti uguali, senza fermarsi a cercare il pezzo dopo. Quello che cambia è la forma del lavoro, ed è la forma che la macchina digerisce.
In più, potendo permettersi una memoria più capiente senza pagarla in velocità, Mamba-2 allarga il foglio di ogni corsia (da una manciata di caselle a diverse decine o centinaia) e organizza le corsie in gruppi, che chiama teste, esattamente come l’attenzione. Con più caselle il foglio tiene separate più voci: se ne scrivono tante senza che si pestino i piedi, e a rileggerle si ripesca quella giusta invece di una via di mezzo fra due.
Un’avvertenza, la stessa del capitolo precedente: la grande tabella dei confronti non si forma mai per intero, perché su un testo lungo sarebbe di nuovo la tabella da cui eravamo scappati. Si lavora a blocchi: dentro un blocco di poche centinaia di parole la tabella è piccola e si fa tutta insieme, e da un blocco al successivo passa soltanto il riassunto. Tabella dentro il blocco, riassunto da un blocco all’altro: è così che il lavoro resta proporzionale alla lunghezza e la pressa lavora lo stesso.
La rinuncia, in formule: la matrice di stato \(\mathbf{A}\), diagonale, non ha più \(N\) valori distinti per canale ma un solo scalare ripetuto, \(\mathbf{A} = a\mathbf{I}\), da cui una transizione discreta \(\bar{\mathbf{A}}_t = a_t \mathbf{I}\).
Il motivo per cui il matmul batte lo scan è nell’hardware. Un tensor core esegue un piccolo prodotto matrice–matrice per ciclo: su una GPU moderna è lì che risiede la stragrande maggioranza dei FLOP disponibili. Un selective scan come quello di Mamba-1 è invece una ricorrenza associativa fatta di moltiplicazioni elemento per elemento e somme: parallelizzabile in \(O(\log L)\) passi, ma su unità generiche, molto meno dense di FLOP. Sta usando la frazione lenta della GPU.
Con la transizione \(\bar{\mathbf{A}}_t = a_t \mathbf{I}\) l’algoritmo pratico non forma davvero l’intera matrice lunghezza per lunghezza (sarebbe \(O(L^2)\) in memoria). Si adotta una decomposizione a blocchi (chunked scan): la sequenza si spezza in blocchi di lunghezza \(Q\) (la lettera è quella del paper, e non c’entra con le query \(\mathbf{Q}\), che essendo una matrice restano in grassetto); dentro ciascun blocco si calcola la forma quadratica, attention-like, come un prodotto di matrici sui tensor core; tra un blocco e il successivo si passa solo lo stato riassuntivo, con un termine di rango basso, in forma ricorrente. Si interpola così tra le due viste della dualità: quadratica dentro il blocco, lineare tra i blocchi.
Sul costo conviene essere precisi, perché è qui che si annida il malinteso. Il conto torna lineare nella lunghezza: \(O\big(L\,Q\,(N+P) + L\,N\,P\big)\) con blocchi di lunghezza \(Q\), stato \(N\) e dimensione di testa \(P\), che nel caso del Teorema 6.1 del paper (\(P = N\), blocchi dell’ordine di \(N\)) diventa \(O(L\,N^2)\). Rispetto alla forma quadratica, che di operazioni ne fa \(O\big(L^2 (N+P)\big)\), è un guadagno enorme; rispetto alla ricorrenza pura non si risparmia nulla, anzi con blocchi lunghi si fanno più operazioni. Il punto sta nel farne di un tipo diverso, non nel farne meno: tutte moltiplicazioni di matrici, cioè lavoro che la pressa accetta. Ne seguono due conseguenze di progetto: la struttura è multi-head come l’attenzione (dimensione di testa \(P\) tipicamente \(64\) o \(128\)), e lo stato può crescere di un ordine di grandezza (da \(N=16\) in Mamba-1 a \(N\) dell’ordine di \(64\)–\(256\) e oltre in Mamba-2), perché una memoria più grande, ora, non costa in velocità. Uno stato più capiente è direttamente più memoria associativa: meno crosstalk, richiamo più preciso.
Mamba-1 aveva reso l’SSM selettivo pagando con lo scan. Mamba-2 recupera il parallelismo pieno delle matrici accettando una transizione di stato più semplice, e può permetterselo proprio perché la dualità gli garantisce che quella forma più semplice è ancora un’attenzione. È il compromesso tipico di questa famiglia: qualche grado di libertà in meno sulla transizione, in cambio di forme parallele che sfruttano le GPU.
Mamba-3#
L’ultimo anello di questa catena è Mamba-3, di Lahoti, Li e colleghi con Dao e Gu, che a ICLR 2026 è finito fra i pochi lavori esposti dal palco invece che a un poster, in gergo un Oral [LLC+26]. Trattandosi di un lavoro recente conviene leggerlo per ciò che aggiunge di qualitativo più che per le cifre puntuali, ancora da assestare. Le novità rispetto a Mamba-2 sono tre, e tutte lavorano sul come lo stato evolve, non sulla struttura generale.
La prima riguarda la discretizzazione, cioè il modo di trasformare il sistema continuo in una ricorrenza, che avevamo introdotto all’inizio del capitolo.
Ricordiamo il problema: un sistema che scorre nel tempo va «campionato» a intervalli, e bisogna indovinare cosa succede tra un campione e l’altro. Il punto delicato è quanta parte di ciò che entra in quel tratto finisce nella memoria. Torniamo al rubinetto: più a lungo lo tieni aperto e più forte lo apri, più acqua entra, e la quantità è la superficie della figura che ha per base la durata del tratto e per altezza l’apertura. Mamba-1 e Mamba-2 usano una sola altezza, l’apertura del campione che stanno leggendo: quella figura è un rettangolo, ed è il conto sbrigativo, il valore di adesso moltiplicato per la durata, come se fosse stato quello per tutto il tratto. Rapido, ma con un errore che a ogni passo si accumula.
Mamba-3 rifà lo stesso conto a trapezi, cioè guardando tutte e due le aperture, quella di adesso e quella del campione precedente: si tira un segmento fra i due valori e si misura la superficie che gli sta sotto. Con una correzione che la vasca impone da sé: l’acqua entrata all’inizio del tratto ha avuto tutto il tratto per defluire dallo scarico, quindi di quella si conta soltanto la parte ancora dentro. E c’è una furbizia in più, la mossa di sempre di Mamba: quanto contano i due estremi non è deciso una volta per tutte a metà e metà, lo decide il modello a ogni passo, in base a ciò che legge (il trapezio della geometria, quello che fa la media, è il caso particolare in cui i due estremi pesano uguale). Precisione e libertà, però, tirano da parti opposte: il conto è davvero più preciso solo se i due estremi pesano quasi uguale, e niente obbliga il modello a starci. Gli autori hanno provato a inchiodarlo lì, e i risultati sono peggiorati di poco, ma sono peggiorati: quello che si guadagna è una regola più ricca, che il modello dosa come gli conviene, più che un errore più piccolo. C’è poi una conseguenza pratica che nasce dalla forma della regola, non da quanto è precisa. Mamba-1 e Mamba-2 avevano bisogno, prima del cuore selettivo, di una piccola convoluzione causale (un mini-filtro che mescola qualche parola vicina) per funzionare bene. Ma il conto a due estremi guarda già due campioni vicini, quello di adesso e quello di prima, cioè fa da sé una parte del mescolamento che il filtro forniva: con quello, e con un ritocco in più (un numero fisso aggiunto ai due pezzi che scrivono nella memoria e la rileggono), il filtro diventa opzionale e il modello lavora bene anche senza. Una regola migliore per fare i conti, e una stampella in meno.
Mamba e Mamba-2 discretizzano la transizione con lo zero-order hold, che per la parte di stato è esatto (\(\bar{\mathbf{A}}_t = \exp(\Delta_t \mathbf{A})\), come visto a inizio capitolo); il termine d’ingresso, però, viene semplificato al prim’ordine (Eulero): \(\bar{\mathbf{B}}_t = \Delta_t \mathbf{B}_t\), con un errore locale dell’ordine di \(O(\Delta_t^2)\) sul passo. È su questo pezzo che interviene Mamba-3, con una discretizzazione esponenziale-trapezoidale: un’integrazione del second’ordine che stima il contributo dell’ingresso con una combinazione convessa dei valori agli estremi dell’intervallo,
dove il peso \(\lambda_t \in [0,1]\) è uno scalare deciso dai dati, token per token, esattamente come \(\Delta_t\) (e \(\mathbf{A}_t\) è la transizione al passo \(t\), che il paper indicizza per generalità: in Mamba-2 era \(a\mathbf{I}\) con \(a\) fisso, e la dipendenza dal token passava tutta per \(\Delta_t\)). La regola classica del trapezio (la media dei due estremi) è il caso \(\lambda_t = 1/2\) e la regola di Eulero di Mamba-2 è il caso \(\lambda_t = 1\): sono due casi particolari di una famiglia, non l’alternativa secca fra due metodi. Sotto le ipotesi di regolarità che il paper enuncia (ingresso, \(\mathbf{A}\) e \(\mathbf{B}\) di classe \(C^3\) sul passo, e \(\lambda_t\) dentro un intervallo limitato) l’errore locale scende a \(O(\Delta_t^3)\) a condizione che \(\lambda_t\) resti vicino a \(1/2\) (precisamente \(\lambda_t = 1/2 + O(\Delta_t)\)); fuori da quella condizione il metodo resta del prim’ordine, con una costante che cresce come \(\lvert 1/2 - \lambda_t \rvert\) e che ai due estremi \(\lambda_t \in \{0, 1\}\) vale quanto quella di Eulero. Il paper riporta che imporre quella condizione peggiora i risultati empirici: il modello preferisce dosare il peso a modo suo, e il second’ordine, da solo, non è quello che paga. Non è la trasformazione bilineare di S4, che approssima l’esponenziale di \(\mathbf{A}\): qui il trapezio agisce sul termine d’ingresso data-dipendente, mentre la transizione resta esponenziale. E la transizione resta esatta finché \(\mathbf{A}\) non dipende dal token: in Mamba-3, dove dipende, il paper approssima separatamente i due integrali, e il second’ordine riguarda il solo termine d’ingresso. La conseguenza riportata nel paper è che la short causal convolution posta prima dell’SSM (presente in tutti i blocchi Mamba precedenti come stabilizzatore) diventa opzionale: insieme a un termine di bias esplicito su \(\mathbf{B}\) e \(\mathbf{C}\), la discretizzazione più fine recupera l’effetto di mescolamento locale che quel filtro forniva; il paper avverte che i due oggetti restano distinti, perché la convoluzione corta agisce su \(x_t\) fuori dalla ricorrenza e questa sul prodotto \(\mathbf{B}_t x_t\) dentro. Vanno insieme, i due ingredienti, e il paper li toglie uno per volta: con la discretizzazione nuova ma senza i bias la qualità cala, e senza nessuno dei due cala ancora.
Il peso \(\lambda_t\) decide quanto contano i due estremi dell’intervallo, ed è lui a separare il conto sbrigativo da quello fine. Allontanarsene costa quasi uguale dalle due parti: il peso zero, quello che guarda soltanto il campione precedente, sbaglia quanto il peso uno di Mamba-2 a meno di un decimo, e la stima migliore sta in mezzo (Fig. 17.5).
Fig. 17.5 Su una curva di prova, inventata apposta, con un passo tenuto largo perché il gesto si veda. A sinistra quanto entra in un passo, e le tre altezze con cui tre pesi diversi lo stimano; a destra lo scarto medio per ogni peso fra zero e uno. È una conca con il fondo quasi a metà, e i due estremi sbagliano quasi uguale. Il fondo, però, non è dove Mamba-3 tiene il peso: inchiodarlo lì, dice il paper, peggiora i risultati. E il vantaggio del fondo dipende dal passo: qui è di quasi cinque volte, e cresce al ridursi del passo, che nel modello non è una costante scelta da fuori ma una manopola che il modello gira da sé, token per token.#
La seconda novità è la più concettuale, ed è quella che riaggancia questo capitolo ai Transformer.
Fino a qui lo stato di un SSM è stato una collezione di numeri che possono solo crescere o sbiadire: salire di volume e poi spegnersi, come l’eco nella valle. Mamba-3 permette allo stato di ruotare, non solo di affievolirsi. È come passare da una manopola del volume a una lancetta che può girare su un quadrante: oltre a «quanto forte», ora c’è un «dove sto puntando».
Perché serve? Ci sono compiti in cui la risposta dipende dal contare o dal tenere il segno: capire se il numero di parentesi aperte è pari o dispari, tenere il conto di qualcosa che si ripete a cicli (come le ore su un quadrante, dove dopo il dodici si ricomincia), seguire uno stato che si alterna. Una memoria che sa solo sbiadire fatica; una che sa ruotare può, letteralmente, «girare la lancetta» a ogni passo e ricordare a che punto del ciclo si trova. Sulle parentesi si vede bene: basta che a ogni parentesi la lancetta faccia mezzo giro, e dopo un numero pari di parentesi è tornata esattamente al punto di partenza, dopo un numero dispari è dalla parte opposta del quadrante. Le due situazioni si distinguono a colpo d’occhio, mentre una memoria che può solo affievolirsi non ha modo di tenerle separate. Gli ingegneri lo chiamano state tracking, tenere traccia dello stato, ed è storicamente un punto debole delle ricorrenze lineari.
E qui torna il filo con i Transformer, che è la ragione per cui questa è la più concettuale delle tre novità. Dentro un modello ogni parola è una fila di numeri, che si può guardare come una freccia; e anche i Transformer, per dire a che punto della frase sta una parola, fanno ruotare la sua freccia di un angolo che cresce con la posizione. La differenza è che lì la rotazione viene aggiunta apposta da fuori, mentre qui nasce da sola dal modo in cui la memoria evolve; e l’angolo, invece di dipendere solo da quanto si è andati avanti, dipende da ciò che si sta leggendo.
Mamba-3 introduce transizioni a valori complessi: la dinamica dello stato non è più un semplice decadimento reale, ma una moltiplicazione per un numero complesso, che ha un modulo (il decadimento, come prima) e una fase (una rotazione). Nel piano complesso, moltiplicare per \(e^{i\theta}\) è ruotare di un angolo \(\theta\); ripetendo il passo, lo stato percorre un cerchio. È esattamente ciò che serve per rappresentare fenomeni periodici (parità, aritmetica modulare) che un decadimento puramente reale non può codificare, e il paper documenta un netto miglioramento sui compiti di state tracking.
Il legame con i Transformer è preciso. Il paper mostra che l’SSM complesso con discretizzazione trapezoidale equivale a un RoPE data-dipendente applicato alle matrici \(\mathbf{B}\) e \(\mathbf{C}\). RoPE (la Rotary Position Embedding della struttura del Transformer) inietta la posizione ruotando query e key di un angolo proporzionale all’indice del token, e nel prodotto scalare le due rotazioni si compongono, così che ai punteggi arrivi solo la distanza fra le posizioni. Qui accade lo stesso, con due differenze: le rotazioni si applicano alle controparti SSM di key e query (\(\mathbf{B}\) e \(\mathbf{C}\)), e l’angolo non dipende solo dalla posizione ma dai dati, perché il passo \(\Delta\) è selettivo. È l’ennesimo ponte tra le due famiglie: la codifica posizionale rotazionale dei Transformer riemerge, spontaneamente, come la fase di una dinamica di stato complessa.
La terza novità è più ingegneristica.
Ogni corsia del modello tiene un foglio tutto suo, e i fogli non si parlano fra loro. Mamba-3 ne mette invece uno solo, non più grande di prima, in comune fra più corsie. Il vantaggio sta nel modo di lavorare delle schede grafiche: andare a prendere i dati in memoria costa più che farci i conti sopra, quindi conviene, a ogni viaggio, portare a casa più lavoro utile. Con il foglio condiviso ogni lettura serve più corsie in un colpo solo, e il risultato pratico è una qualità un po’ migliore senza rallentare la generazione: l’attesa tra una parola prodotta e la successiva resta la stessa.
Mamba-2 e i suoi predecessori sono, nella loro forma base, sistemi a singolo ingresso e singola uscita (SISO): ogni canale evolve con un proprio stato, indipendente, e \(\mathbf{B}_t\) e \(\mathbf{C}_t\) sono vettori. Mamba-3 propone una formulazione MIMO (multi-input multi-output, come per S5), in cui più ingressi e più uscite condividono lo stesso stato attraverso matrici \(\mathbf{B}\) e \(\mathbf{C}\) non più vettoriali ma di rango maggiore. L’effetto tecnico è aumentare l’intensità aritmetica (il numero di operazioni per ogni byte letto dalla memoria) che è proprio ciò che tiene occupati i tensor core: si fa più lavoro utile per ogni accesso in memoria. Il guadagno pratico riportato è qualità migliore senza aumentare la latenza di decodifica, cioè senza rallentare la generazione token per token.
Trattandosi di un lavoro recente ci fermiamo alle novità qualitative: la direzione è chiara (stato più accurato, più espressivo e meglio calibrato sull’hardware), mentre i numeri esatti andranno confermati man mano che il modello viene ripreso e riprodotto.
Da S4 a Mamba-3: cosa è cambiato#
Conviene, a questo punto, riavvolgere l’intero arco, perché ogni tappa ha smontato un pezzo diverso del problema e la somma racconta una storia pulita.
Si parte da S4: una macchina che tratta ogni parola con la stessa regola, con i numeri di partenza scelti bene (è la ricetta di HiPPO) perché la memoria sia lunga, e con una forma regolare che rende i conti veloci. Il suo pregio è anche il suo limite: siccome la regola non cambia mai, lo stesso calcolo si può fare in due modi (passo dopo passo oppure tutto insieme), ma la macchina non può scegliere cosa ricordare in base a quel che legge.
Arriva Mamba-1, che rompe la regola fissa: quanto scrivere e quanto dimenticare lo decide la parola in arrivo. Il sistema diventa selettivo e sa separare il rilevante dal riempimento, ma perde il filtro unico e deve affidarsi allo scan: veloce, e però lontano dal reparto della scheda grafica dove sta quasi tutta la potenza.
Poi Mamba-2, che riconcilia le due famiglie del libro. Nella sua versione più semplice (tutte le corsie di un gruppo dimenticano alla stessa velocità) questa macchina è un’attenzione che guarda solo all’indietro, e scritta così il suo calcolo diventa una moltiplicazione di tabelle: la pressa si accende, la memoria può crescere, e le corsie si organizzano in gruppi come le teste dell’attenzione. È il punto in cui le due strade di questi due capitoli (attenzione lineare e sistemi dinamici) si rivelano una sola.
Infine Mamba-3, che non cambia l’impianto ma ne raffina il funzionamento interno: i conti sull’intervallo rifatti guardando tutti e due gli estremi invece del solo valore di adesso, con il peso dei due deciso volta per volta dal modello (e il mini-filtro che stava prima del cuore selettivo diventa opzionale), una memoria che oltre a sbiadire sa ruotare come una lancetta su un quadrante (utile per contare e tenere il segno, ed è la stessa idea con cui i Transformer codificano la posizione), e un foglio condiviso fra più corsie, che spreme meglio l’hardware. Da una macchina che tratta tutti allo stesso modo e ricorda a lungo, a una che sceglie, poi riconciliata con l’attenzione e resa veloce, poi affinata nel modo in cui la memoria evolve: è la parabola di una singola, ostinata idea (comprimere il passato in un riassunto che non cresce mai) che a ogni passo si avvicina un po’ di più al meglio dei Transformer senza rinunciare al costo lineare.
Da ricordare
Mamba-2 nasce da un problema pratico: dentro la scheda grafica c’è una pressa specializzata che sa fare una cosa sola, moltiplicare matrici, ed è lì che sta quasi tutta la potenza disponibile. Il calcolo passo dopo passo di Mamba-1, fatto di operazioni minute, la lasciava spenta.
La dualità stato-attenzione (Dao e Gu, 2024) è il ponte esplicito con il capitolo sull’attenzione: appena si sceglie la versione più semplice dello stato (tutte le corsie di una testa sbiadiscono allo stesso ritmo), un SSM è un’attenzione che guarda solo all’indietro, dove ogni confronto fra due parole è pesato da quanto è sopravvissuto nel frattempo. Due dialetti della stessa lingua: lo stesso conto si fa passo dopo passo, oppure formando la grande tabella dei confronti.
È lo stesso gradino che nello «zoo» delle ricorrenze del capitolo precedente portava già il nome di Mamba-2: le due strade, dall’attenzione e dai sistemi dinamici, arrivano allo stesso posto.
Quella piccola rinuncia (le corsie di uno stesso gruppo dimenticano tutte alla stessa velocità) dà ai conti la forma che la pressa accetta: tutto diventa moltiplicazione di tabelle. Non si fanno meno operazioni, se ne fanno di un tipo che la macchina digerisce meglio. In più la memoria si organizza a gruppi (le teste, come nell’attenzione) e il foglio di ogni corsia può diventare molto più capiente.
Mamba-3 (Lahoti et al., 2026) non cambia l’impianto, ne raffina la dinamica con tre mosse: i conti sull’intervallo rifatti guardando tutti e due gli estremi invece del solo valore di adesso, con il peso dei due deciso volta per volta dal modello, e quello che si guadagna è una regola più ricca più che un errore più piccolo, perché allontanarsi da metà costa quasi uguale dalle due parti (e il mini-filtro che stava prima del cuore selettivo diventa opzionale, perché il conto a due estremi mescola già i campioni vicini, purché si aggiunga il numero fisso che l’accompagna); uno stato che oltre a sbiadire sa ruotare, come una lancetta su un quadrante, utile per contare e tenere il segno; e un foglio di memoria condiviso fra più corsie, che dà più qualità senza rallentare la generazione. Lavoro recente: la direzione è solida, le cifre da confermare.
L’arco S4 → Mamba → Mamba-2 → Mamba-3: da un sistema che tratta ogni token con la stessa regola e ricorda a lungo, a uno che sceglie cosa ricordare, a uno riconciliato con l’attenzione e veloce, a uno raffinato nel modo in cui la memoria evolve (sempre la stessa idea: comprimere il passato in un riassunto che non cresce mai).
Da ricordare
Mamba-2 nasce da un problema pratico: lo scan di Mamba-1 non usa i tensor core della GPU, l’hardware dedicato a moltiplicare matrici, e lascia gran parte della potenza inutilizzata.
La State Space Duality (Dao e Gu, ICML 2024) è il ponte esplicito con il capitolo sull’attenzione: un SSM con \(\mathbf{A} = a\mathbf{I}\), cioè con transizione discreta \(\bar{\mathbf{A}}_t = a_t \mathbf{I}\) (uno scalare per l’identità), è esattamente un’attenzione mascherata, \(\mathbf{Y} = (\mathbf{M} \odot \mathbf{C}\mathbf{B}^\top)\mathbf{X}\) con maschera causale \(\mathbf{M}\) \(1\)-semiseparabile (il paper la chiama \(\mathbf{L}\); qui \(L\) è la lunghezza). La stessa funzione ha una forma lineare/ricorrente \(O(L)\) e una quadratica/attention-like.
È lo stesso gradino (il decadimento scalare \(\alpha_t \mathbf{I}\)) che occupava la riga «Mamba-2» nello «zoo» delle ricorrenze lineari: le due strade, dall’attenzione e dai sistemi dinamici, arrivano allo stesso posto.
La restrizione \(\mathbf{A} = a\mathbf{I}\) (diagonale tutta uguale, mentre Mamba-1 aveva valori distinti) rende il calcolo pura moltiplicazione di matrici, con costo \(O(L\,Q\,(N+P) + L\,N\,P)\) a blocchi di lunghezza \(Q\): non meno operazioni della ricorrenza pura, ma operazioni che stanno sui tensor core. Ne seguono la struttura multi-head e uno stato molto più grande (da \(N=16\) a \(64\)–\(256\) e oltre).
Mamba-3 (Lahoti et al., ICLR 2026, Oral) raffina la dinamica con tre mosse: discretizzazione esponenziale-trapezoidale (combinazione convessa degli estremi con peso \(\lambda_t\) data-dipendente; il trapezio classico è \(\lambda_t=1/2\), Eulero è \(\lambda_t=1\)), che è una famiglia e non un metodo: il second’ordine vale solo se \(\lambda_t\) resta vicino a \(1/2\), e fuori di lì si torna al prim’ordine con la costante di Eulero ai due estremi, sicché quello che si guadagna è una regola più ricca più che un errore più piccolo. Insieme a un bias esplicito su \(\mathbf{B}\) e \(\mathbf{C}\) rende opzionale la convoluzione causale corta; stato complesso con aggiornamenti rotazionali (migliore state tracking, con un legame formale al RoPE data-dipendente su \(\mathbf{B}\) e \(\mathbf{C}\)); e formulazione MIMO (più qualità senza aumentare la latenza di decodifica). Lavoro recente: novità qualitative solide, cifre da confermare.
L’arco S4 → Mamba → Mamba-2 → Mamba-3: da tempo-invariante a lungo raggio, a selettivo, a riconciliato con l’attenzione e veloce, a raffinato nella dinamica (sempre la stessa idea di comprimere il passato in uno stato di dimensione fissa).