ELAI S.r.l.

Speculative decoding: perché correggere un rifiuto non significa ricampionare dal target

Distribuzioni, controesempio, 200.000 prove e modello di costo: quando lo speculative decoding conserva le probabilità e quando accelera davvero.

Speculative decoding: perché correggere un rifiuto non significa ricampionare dal target

Analisi tecnica · Inferenza AI · 24 settembre 2026

Abstract: due garanzie da separare

Lo speculative decoding anticipa token con un modello economico e ne verifica un blocco con il modello target. La domanda decisiva è duplice: quale correzione preserva la distribuzione del target, e quando il lavoro anticipato riduce davvero il tempo? Sviluppiamo un esempio categoriale completo, un controesempio alla correzione ingenua e un modello di costo. Il risultato è netto: esattezza del campionamento e accelerazione sono proprietà diverse, con ipotesi diverse.

Il contributo di questo articolo è didattico e analitico: calcoli esatti su tre simboli, 200.000 prove Monte Carlo e una scansione di parametri, eseguiti con Python. Non abbiamo misurato un LLM, una GPU o un servizio EL-AI. Sono richieste probabilità elementari, somme finite e familiarità con la generazione autoregressiva; non serve conoscere l’addestramento dei Transformer.

1. Il contratto probabilistico

Fissiamo un prefisso già confermato e un vocabolario finito V. p(x) è la probabilità del prossimo token assegnata dal target; q(x) è quella del draft. Entrambe sono non negative e sommano a uno. Sono le distribuzioni effettivamente usate per campionare, dopo temperatura, maschere e troncamenti: usare logits non normalizzati nel rapporto di accettazione cambia il problema. Un token deve rappresentare lo stesso evento nei due vocabolari.

Preservare p significa che, ripetendo idealmente il processo, ogni evento conserva la propria probabilità. Non significa ottenere la stessa stringa con lo stesso seed: due implementazioni possono consumare numeri casuali in ordine diverso. E non significa migliorare la verità delle risposte: se il target assegna probabilità a un’affermazione errata, un campionatore esatto conserva anche quella possibilità. La garanzia riguarda la legge statistica, non la correttezza semantica.

2. Contabilità della massa, prima del codice

La regola fondamentale è proposta e dimostrata da Leviathan, Kalman e Matias (ICML 2023, sezioni 2–3 e appendice A.1): estrarre x da q, accettarlo con probabilità min(1,p(x)/q(x)) e, al rifiuto, campionare dal residuo positivo normalizzato di p−q. L’esempio seguente ne ricostruisce la contabilità con numeri scelti per questo articolo.

p = (0.50, 0.30, 0.20) q = (0.20, 0.50, 0.30) a(x) = min(1, p(x)/q(x)) a = (1, 0.60, 2/3)

Chiamiamo i simboli A, B e C. A è proposto nel 20% dei casi e sempre accettato: contribuisce 0,20. B è proposto con probabilità 0,50 ma accettato solo nel 60% di quelle proposte: contribuisce 0,30. Per C il contributo è 0,30×2/3=0,20. La massa accettata complessiva è 0,70. Mancano 0,30 per ottenere una distribuzione completa, e tutta la carenza rispetto al target riguarda A.

m(x) = q(x)a(x) = min(p(x),q(x)) A = Σx m(x) = 0.70; Z = 1−A = 0.30 r(x) = max(p(x)−q(x),0)/Z r = (1, 0, 0) P(output=x) = m(x)+Zr(x) = p(x)

Qui A nella formula indica il tasso totale di accettazione, mentre A come etichetta indica il primo simbolo: i ruoli vanno tenuti distinti. Z è la probabilità di rifiuto e r è una distribuzione condizionata al rifiuto. Non bisogna sommare direttamente m+r: m è una massa non normalizzata, r somma già a uno. Occorre pesare r per Z. Questo piccolo controllo impedisce un errore frequente nelle implementazioni dimostrative.

Due casi limite chiariscono la costruzione. Se p=q, Z=0: tutte le proposte sono accettate e il ramo del residuo non deve essere valutato, evitando 0/0. Se q assegna zero a un evento che p considera possibile, quell’evento non viene proposto ma può comparire nel residuo. Non si divide per q=0 su un token realmente estratto da q. Una maschera incompatibile applicata soltanto dopo la correzione può invece cancellare massa e rompere il contratto.

3. Il controesempio: «se rifiuto, riparto da p»

Sembra ragionevole usare il target come ripiego. Ma con questa specifica regola di accettazione è sbagliato: il ramo accettato ha già riempito tutta la massa richiesta per B e C. Estrarre ancora da p al rifiuto aggiunge loro ulteriore probabilità e lascia A sottorappresentato. La distribuzione finale diventa (0,35; 0,39; 0,26). Una frase plausibile non permette di vedere questa distorsione; una contabilità su tre eventi sì.

wrong(x) = min(p(x),q(x)) + Zp(x) wrong−p = (−0.15, +0.09, +0.06) TV(wrong,p) = ½Σx |wrong(x)−p(x)| = 0.15

La distanza di variazione totale TV misura il massimo disaccordo di probabilità su un insieme di eventi. Nel nostro esempio basta l’insieme {A}: 0,50 contro 0,35, differenza 0,15. Non è un errore di arrotondamento. Anche aumentando indefinitamente il numero di campioni, la versione sbagliata converge alla distribuzione sbagliata. Aumentare il test senza controllare la legge limite rende soltanto più precisa una risposta distorta.

4. Esperimento riproducibile e lettura dell’errore

Abbiamo eseguito 200.000 prove con Python 3.14.0, generatore random.Random e seed 20260923. Ogni prova condivide proposta e decisione di accettazione fra le due varianti; al rifiuto ciascuna usa la propria distribuzione di recupero. Questo rende il confronto controllato ma i conteggi fra varianti non indipendenti. La tabella riporta frequenze, non stime di qualità linguistica. Nessun corpus è coinvolto.

SimboloTargetCorretto, osservatoErrato, limiteErrato, osservato
A0.50.500090.350.35005
B0.30.298440.390.38831
C0.20.201470.260.26164

Le frequenze corrette si discostano dal target di meno di 0,0016 in questo run. Per A, l’errore standard marginale della frequenza è circa √(0,5×0,5/200000)=0,00112; questo ordine di grandezza rende leggibili le oscillazioni, senza trasformare un singolo run in una prova matematica. Lo script controlla anche l’identità esatta della massa entro tolleranza numerica. La dimostrazione giustifica il metodo; Monte Carlo intercetta errori nel codice.

Questo frammento calcola le due leggi senza simulare. Nel pacchetto allegato si trovano il campionatore completo, i controlli e la generazione delle figure. Tutti gli esperimenti sono didattici e sono stati preparati con assistenza AI; non attestiamo una revisione scientifica umana né una validazione aziendale.

p = [.5, .3, .2]
q = [.2, .5, .3]
m = [min(x,y) for x,y in zip(p,q)]
z = 1-sum(m)
r = [max(x-y,0)/z for x,y in zip(p,q)]
print([a+z*b for a,b in zip(m,r)])
print([a+z*b for a,b in zip(m,p)])

5. Dal token al blocco: il prefisso è parte dello stato

Una bozza di lunghezza γ contiene proposte autoregressive: ogni probabilità dipende dai token precedenti. Il target valuta le posizioni della bozza rispettando la causalità, poi si conserva soltanto il prefisso accettato. Dopo il primo rifiuto, le proposte successive dipendono da un token che non farà parte del testo: riutilizzarle senza ricalcolo significherebbe interrogare una distribuzione condizionata sul prefisso sbagliato. Anche la cache deve scartare la coda non confermata.

Il parallelismo riguarda la valutazione delle probabilità su una sequenza già proposta, non la scomparsa delle dipendenze autoregressive. Se tutte le proposte vengono accettate, si aggiunge un token dal target; altrimenti si aggiunge quello corretto dal residuo. Un ciclo produce così da uno a γ+1 token, salvo arresti anticipati come il token di fine sequenza. Contare la bozza intera come output utile gonfia artificialmente il throughput.

6. Quando allungare la bozza conviene

Consideriamo ora un modello di costo separato. Supponiamo accettazioni indipendenti con probabilità costante α, nessun arresto anticipato e un costo di verifica del blocco uguale a un passo ordinario del target, T. Un token del draft costa cT. Queste ipotesi servono a isolare il compromesso; non sono misure del nostro computer. La probabilità di conservare almeno i proposte consecutive è α elevato a i. Sommando le probabilità di coda otteniamo il numero atteso E di token emessi.

Eγ = 1 + α + α² + … + α^γ Sγ = Eγ / (1+cγ) Eγ+1 = Eγ + α^(γ+1) Sγ+1 > Sγ ⇔ α^(γ+1)(1+cγ) > cEγ

L’ultima disuguaglianza nasce moltiplicando i denominatori positivi delle due accelerazioni. A sinistra c’è il contributo marginale del nuovo tentativo; a destra il prezzo da pagare per ottenerlo. Con α<1, il beneficio marginale cala geometricamente, mentre il costo di un passo draft resta positivo. Non esiste quindi una ragione generale per spingere γ al massimo disponibile. Nel limite α=0 il draft non produce token utili, ma il suo costo resta.

La scansione eseguita considera γ da 1 a 16, α in {0,3; 0,7; 0,9} e c in {0,05; 0,20}. A α=0,7 il massimo nella griglia è γ=6 con c=0,05: E=3,058819 e S≈2,353. Se il draft costa quattro volte tanto, il massimo si sposta a γ=3 e S≈1,583. Lo stesso accordo probabilistico non implica lo stesso guadagno temporale. Questi sono massimi della griglia e del modello, non configurazioni ottime certificate per un server.

In alto: leggi esatte del target e della correzione errata. In basso: accelerazione teorica nella scansione eseguita; nessuna misura hardware. Linee continue c=0,05, tratteggiate c=0,20.
In alto: leggi esatte del target e della correzione errata. In basso: accelerazione teorica nella scansione eseguita; nessuna misura hardware. Linee continue c=0,05, tratteggiate c=0,20.

7. Dove il modello semplificato smette di bastare

Se la verifica di γ token costa g(γ)T, basta sostituire il denominatore con g(γ)+cγ, più gli overhead normalizzati. Per esempio, con α=0,7, γ=6 e c=0,05, il numeratore resta 3,058819; se g=3 il rapporto scende a circa 0,927. Il metodo è allora più lento, pur campionando esattamente. Il fatto che ogni ciclo emetta almeno un token limita il numero di chiamate seriali, non il tempo di quelle chiamate.

Anche α costante è una semplificazione. Un nome proprio, una formula o un passaggio di lingua possono cambiare l’accordo fra modelli. In generale E è la somma delle probabilità congiunte di accettare i primi i token, più uno; sostituire quelle probabilità con potenze della media ignora dipendenze e selezione dei prefissi. Due carichi con la stessa accettazione media possono avere distribuzioni delle lunghezze accettate differenti. Registrare soltanto α nasconde questa differenza.

8. Dalla ricerca alle misure necessarie

Il lavoro ICML del 2023 misurava, fra gli altri esperimenti, T5-XXL con draft più piccoli su traduzione e riassunto, batch uno e TPU-v4. È un riferimento storico, non una previsione per hardware attuale. Per la direzione recente abbiamo consultato Learning to Draft, versione arXiv v1 del 2 marzo 2026, metodi e risultati: propone politiche di profondità e dimensione di verifica ottimizzate rispetto al tempo, anziché alla sola lunghezza accettata.

Quest’ultimo studio usa due politiche addestrate con PPO e valuta più modelli e compiti; il confronto con una ricerca su griglia è particolarmente rilevante per separare adattamento e semplice scelta di parametri migliori. Qui non ne riproduciamo il benchmark e non estendiamo le sue conclusioni a tutti i sistemi. La tabella dei risultati mostra anche casi con maggiore velocità e minore lunghezza accettata: un invito a misurare il denominatore, oltre al numeratore.

Per un servizio multilingue conviene separare test in italiano, inglese, cinese e spagnolo, mantenendo confrontabili richieste e lunghezze. Misurare tempo al primo token, latenza inter-token, tempo complessivo, throughput aggregato, memoria e percentili sotto carico. Un miglioramento batch uno può scomparire con richieste concorrenti: il draft occupa risorse che altri utenti avrebbero usato. Riportare modello, versione, precisione, sampling, hardware e distribuzione dei prompt rende il confronto interpretabile.

Per EL-AI questo è un possibile criterio di valutazione dell’inferenza, non l’annuncio di una funzionalità già implementata. La conclusione tecnica è più utile di una promessa di velocità: prima verificare che la correzione conservi la legge desiderata, poi cercare il punto di lavoro che riduce il costo sul carico reale. Le due verifiche richiedono strumenti diversi e nessuna può sostituire l’altra.

Fonti e materiali riproducibili

Leviathan, Kalman, Matias (2023), Fast Inference from Transformers via Speculative Decoding, ICML / PMLR 202, 19274–19286. Learning to Draft: Adaptive Speculative Decoding with Reinforcement Learning, arXiv:2603.01639v1 (2026).

Fonti consultate il 24 settembre 2026; per il secondo lavoro si cita specificamente la versione preprint letta. Scarica codice, risultati e istruzioni. Risultati JSON. Copertina originale generata con ImageGen, illustrativa: non raffigura un’installazione EL-AI.