Paithon Book Paithon Book
Esegui il codice

Da mille passi a uno: insegnare a saltare#

Un maestro di scacchi che calcola dieci mosse avanti e un principiante che ne calcola due giocano lo stesso gioco con costi diversissimi. Se però il maestro gioca un migliaio di partite e il principiante le studia tutte, può arrivare a riconoscere le posizioni e a fare la mossa giusta senza calcolare niente: ha sostituito il ragionamento con la memoria della sua conclusione.

Con i modelli di diffusione si fa lo stesso: un modello che integra la traiettoria in molti passi, il maestro, insegna a un altro, lo studente, a produrre lo stesso risultato in pochi passi o in uno. Il procedimento si chiama distillazione, come nella sezione sul modello piccolo che imita, con una differenza: là a rimpicciolire era la rete, qui la rete resta grande uguale e a ridursi è il numero di passi. Qui non si percorre meglio la traiettoria, che era la strada della sezione sui campionatori veloci e ha un limite pratico: si cambia invece l’oggetto che si impara. Non tutti i metodi che seguono hanno un maestro da imitare, ma tutti fanno questo, e oggi un’immagine può uscire da una sola valutazione della rete.

Insegnare a fare in un passo quello che il maestro fa in due#

Il metodo più diretto, la distillazione progressiva, è anche il primo che ha funzionato, e sta in una riga: si prende il modello che sa fare mille passi e, in un punto qualsiasi del percorso, gli si fanno fare due passi consecutivi; poi si addestra un secondo modello ad arrivare nello stesso posto con un passo solo. Imparato questo su tutti i tratti del percorso, il secondo modello sa fare in cinquecento passi il lavoro che il primo faceva in mille.

E poi lo si rifà. Il secondo modello diventa il maestro, un terzo impara a dimezzarlo ancora, e si scende a duecentocinquanta. Ogni giro dimezza, quindi dieci giri portano da mille a uno. Il conto è quello del foglio piegato a metà: poche piegature, e gli strati sono tantissimi.

Ogni giro è un addestramento a sé, non una rifinitura, con il maestro da interrogare due volte per ogni esempio. I giri non si accorciano (gli ultimi due, anzi, durano il doppio), e il bilancio torna lo stesso per due ragioni: ogni esempio chiede al maestro soltanto due passi, per quanti passi sappia fare, e per passare da mille a uno bastano una decina di giri. Così Salimans e Ho riportano che il costo per arrivare a quattro passi non supera quello di addestrare il modello di partenza. Il metodo converte tempo di generazione in tempo di addestramento, a un cambio conveniente, e per questo si è diffuso.

Inoltre, il modo in cui la rete descrive la propria risposta diventa decisivo. Chiedendole «qual era il disturbo?» si ottiene una risposta da cui l’immagine va ancora ricavata, e all’inizio del ritorno quel passaggio è disastroso: lì dell’immagine è rimasto quasi niente, quindi per tirarla fuori bisogna dividere per quel quasi niente, e ogni errore sul disturbo viene moltiplicato. All’altro capo succede il rovescio: lì di disturbo ne è rimasto quasi niente, e chi risponde «com’era l’immagine pulita?» lascia da ricavare il disturbo, dividendo di nuovo per quel quasi niente. Chi fa passi lunghi attraversa tutti e due gli estremi in un colpo solo, e gli serve una descrizione adatta a tutti e due: la velocità, la quarta domanda della sezione sul limite continuo, che mescola disturbo e immagine pulita ed è nata per questo, insieme a questo metodo.

La progressive distillation [SH22] addestra uno studente \(\boldsymbol{\epsilon}_\phi\) a riprodurre in un passo il risultato di due passi del maestro \(\boldsymbol{\epsilon}_\theta\). Detto \(\Psi^{(2)}_{t\to t''}\) il risultato di due passi DDIM del maestro da \(t\) a \(t''\) passando per \(t'\), il bersaglio dello studente è

\[ \mathbf{x}_{t''}^{\text{obiettivo}} = \Psi^{(2)}_{t\to t''}(\mathbf{x}_t), \qquad \mathcal{L}(\phi) = \mathbb{E}\Big[w(t)\big\lVert \Psi^{(1)}_{t\to t''}(\mathbf{x}_t;\phi) - \mathbf{x}_{t''}^{\text{obiettivo}}\big\rVert^2\Big] . \]

Il peso \(w(t)\) dipende da come si scrive la perdita. Salimans e Ho la scrivono nello spazio del dato, \(w(\lambda_t)\lVert\tilde{\mathbf{x}} - \hat{\mathbf{x}}_\phi(\mathbf{x}_t)\rVert^2\), con il bersaglio \(\tilde{\mathbf{x}}\) scelto in modo che un passo DDIM dello studente da \(\mathbf{x}_t\) atterri su \(\Psi^{(2)}_{t\to t''}(\mathbf{x}_t)\); scrivere la perdita sul punto d’arrivo, come sopra, equivale a moltiplicarla per \((\alpha_{t''} - \sigma_{t''}\alpha_t/\sigma_t)^2\). Come peso nello spazio del dato confrontano lo SNR troncato, \(\max(\alpha_t^2/\sigma_t^2, 1)\), e lo SNR più uno, \(1 + \alpha_t^2/\sigma_t^2\), che è quello implicito nella \(\mathbf{v}\)-prediction. Nelle loro prove funzionano tutte le combinazioni proposte, tranne la predizione di \(\boldsymbol{\epsilon}\) pesata con lo SNR troncato, che diverge.

Terminata l’iterazione, lo studente diventa il maestro e si ripete: \(K\) iterazioni riducono i passi di un fattore \(2^K\), quindi dieci iterazioni portano da \(1024\) a \(1\).

La parametrizzazione è decisiva. Infatti, con passi lunghi, a \(t\) grande è l’immagine ricavata dal rumore predetto ad avere varianza esplosiva, perché lì \(\alpha_t\to 0\) e ricostruire \(\hat{\mathbf{x}}_0 = (\mathbf{x}_t-\sigma_t\hat{\boldsymbol{\epsilon}})/\alpha_t\) amplifica ogni errore di \(\hat{\boldsymbol{\epsilon}}\) di \(1/\alpha_t\); all’altro estremo vale il contrario. La \(\mathbf{v}\)-prediction, \(\hat{\mathbf{v}} = \alpha_t \boldsymbol{\epsilon}-\sigma_t\mathbf{x}_0\), nasce in questo articolo e per questa ragione: resta ben condizionata a entrambi gli estremi, dove le altre degenerano. Gli autori riportano che anche la predizione diretta di \(\mathbf{x}_0\) funziona nella distillazione; la \(\mathbf{v}\) è quella che si è imposta.

Altrettanto essenziale è il programma di rumore a SNR terminale nullo. Se all’ultimo passo \(\alpha_T\) non è zero, il modello a un passo riceve un ingresso che contiene ancora un residuo di segnale, che in generazione non c’è: la discrepanza fra addestramento e uso è invisibile con mille passi e diventa dominante con uno.

Il limite del metodo è strutturale: lo studente insegue le traiettorie del maestro, quindi ne eredita gli errori e niente lo spinge oltre. Il tetto è la qualità del maestro, e ogni iterazione se ne allontana un poco, perché ogni nuovo studente somma il proprio errore di approssimazione a quello ereditato: la perdita resta piccola finché i passi sono qualche unità, e diventa netta scendendo a due e a uno.

Far combaciare le distribuzioni invece delle traiettorie#

Inseguire le traiettorie ha un difetto. Se per imparare a disegnare copi i tratti di un maestro, uno per uno e nell’ordine in cui li fa, quando il maestro sbaglia un tratto tu lo copi, e il tuo massimo è la sua bravura. Al committente però interessa il disegno finito, non la sequenza dei tratti: se ne arrivi con uno altrettanto bello per un’altra strada, va bene uguale, e magari meglio.

Da qui la seconda famiglia di metodi. Invece di chiedere allo studente di ripercorrere il cammino del maestro, gli si chiede che le immagini che produce siano distribuite come quelle del maestro. È una richiesta più debole sui singoli casi e più forte nell’insieme, e ha una conseguenza notevole: uno studente così può risultare migliore del maestro, perché non è obbligato a riprodurne gli errori.

Come si misuri se due insiemi di immagini sono distribuiti allo stesso modo è il problema tecnico, e le risposte sono due. La prima usa un giudice che impara a distinguere le immagini vere da quelle dello studente, che è l’idea delle reti avversarie. La seconda, più stabile, confronta le due distribuzioni attraverso il loro verso della salita, il punteggio, quello che in ogni punto indica da che parte le immagini si fanno più credibili: si tiene un modello che conosce il verso della salita dei dati veri (è il maestro stesso) e uno che impara quello delle immagini dello studente, e si spinge lo studente finché i due non indicano dappertutto la stessa direzione. Il modo in cui lo si spinge ha però una preferenza: punisce lo studente quando disegna dove il maestro non disegnerebbe mai, molto più di quando dimentica un tipo di immagine che il maestro sa fare. Le due risposte si usano spesso insieme, e il giudice serve a portare lo studente a guardare anche le fotografie vere.

La distillazione per corrispondenza di distribuzione sostituisce l’errore sulle traiettorie con una divergenza fra la distribuzione \(p_\phi\) dello studente e quella \(p_\theta\) del maestro. La formulazione più usata, la distribution matching distillation di Yin e colleghi [YGZ+24], minimizza la KL inversa fra le due distribuzioni diffuse allo stesso livello di rumore \(t\), mediata su \(t\) (sui dati puliti i due punteggi non si saprebbero stimare, sulle versioni diffuse sì),

\[ D_{\mathrm{KL}}\big(p_\phi \,\|\, p_\theta\big), \]

il cui gradiente rispetto ai parametri dello studente dipende dalle due distribuzioni solo attraverso i loro punteggi:

\[ \nabla_\phi D_{\mathrm{KL}} = -\,\mathbb{E}\Big[\big(\nabla\log p_\theta(\mathbf{x}) - \nabla\log p_\phi(\mathbf{x})\big)^\top \frac{\partial \mathbf{x}}{\partial \phi}\Big] . \]

Il primo punteggio è il maestro; il secondo si stima con un modello di diffusione ausiliario addestrato in linea sui campioni dello studente. Il gradiente si annulla quando i due punteggi coincidono, cioè quando le due distribuzioni sono uguali. La direzione della KL conta: quella inversa penalizza lo studente che mette massa dove il maestro non ne ha, e lascia quasi impunito quello che ignora qualche modo del maestro. È mode-seeking, e spiega perché questi metodi concentrano la distribuzione, con qualità alta e copertura più bassa. In DMD la stabilità la dà una perdita di regressione su coppie rumore-immagine generate in anticipo dal maestro: per CIFAR-10 si generano con meno dell’uno per cento del calcolo di addestramento, per Stable Diffusion 1.5 sono dodici milioni, e legano lo studente alle traiettorie del maestro. DMD2 [YGP+24] toglie la regressione e rimedia all’instabilità aggiornando il modello del punteggio dello studente più spesso del generatore (two time-scale update rule); aggiunge poi una perdita avversaria con un discriminatore che confronta i campioni dello studente con immagini vere, così che lo studente impari anche dai dati e non solo dal punteggio, imperfetto, del maestro. Ne esce uno studente a un passo con FID \(1{,}28\) su ImageNet \(64\times64\), che supera il maestro. La adversarial diffusion distillation di Sauer e colleghi [SLBR24] fa del discriminatore il pezzo principale: lo studente, inizializzato dal maestro, è giudicato da un discriminatore che lavora sulle caratteristiche di una rete visiva preaddestrata e congelata, è tenuto vicino al maestro da una perdita di distillazione del punteggio, e genera in un numero di passi fra uno e quattro.

La differenza sostanziale rispetto alla distillazione progressiva è che il vincolo riguarda la distribuzione, non la traiettoria. Ne segue che lo studente può superare il maestro, cosa impossibile per costruzione nella famiglia precedente, e lo si è osservato: modelli a uno o due passi che battono il maestro a molti passi su punteggi percettivi, pur avendo una copertura delle modalità peggiore. Il costo è un addestramento con tre reti in gioco, con la stabilità che ne consegue.

La condizione di consistenza#

C’è un modo di ottenere il salto senza avere un maestro da imitare, e nasce da un’osservazione tanto semplice che sembra inutile finché non la si guarda bene.

Prendi una traiettoria, quella che va da un certo rumore a una certa immagine. Adesso mettiti in un punto qualsiasi di quella traiettoria, a metà, a un quarto, ovunque. La domanda «dove va a finire questo percorso?» ha sempre la stessa risposta, perché il percorso è uno solo. Punti diversi, istanti diversi, stessa destinazione.

Sembra un’ovvietà e invece è una richiesta fortissima quando la si impone a una funzione da imparare. Si chiede a una rete di rispondere «dove si va a finire da qui», e si pretende che risponda la stessa cosa per tutti i punti di una stessa traiettoria. Una rete che soddisfa questa richiesta è, per definizione, un generatore a un passo: le si dà un rumore qualsiasi e risponde direttamente l’immagine. Una rete così si chiama consistency model, modello di consistenza.

La cosa notevole è che la richiesta si può imporre senza sapere quale sia la risposta giusta. Basta prendere due punti vicini della stessa traiettoria e chiedere che la rete risponda uguale su tutti e due; ripetuto su tante coppie, questo incolla insieme la risposta lungo tutta la traiettoria. Se i due punti vicini li ricava un maestro con un suo passo, la rete non ha modo di uscire più precisa di quel passo. L’ancora che impedisce alla rete di rispondere sempre la stessa cosa (una risposta che soddisferebbe la richiesta e sarebbe inutile) è il punto di arrivo, dove la risposta giusta si conosce: a rumore zero, l’immagine è quella che si sta guardando.

Sia \(\{\mathbf{x}_t\}\) la soluzione della PF-ODE. Si cerca una funzione \(\mathbf{f}_\phi(\mathbf{x},t)\) che soddisfi la condizione di autoconsistenza

\[ \mathbf{f}_\phi(\mathbf{x}_t,t) = \mathbf{f}_\phi(\mathbf{x}_s,s) \quad\text{per ogni } s,t \text{ sulla stessa traiettoria}, \]

con la condizione al contorno \(\mathbf{f}_\phi(\mathbf{x},\varepsilon) = \mathbf{x}\), dove \(\varepsilon\) è un istante piccolo e fissato in cui la traiettoria si ferma invece di arrivare a zero (e non ha niente a che vedere con il rumore \(\boldsymbol{\epsilon}\)). La condizione si impone per costruzione, con una parametrizzazione del tipo

\[ \mathbf{f}_\phi(\mathbf{x},t) = c_{\text{skip}}(t)\,\mathbf{x} + c_{\text{out}}(t)\,F_\phi(\mathbf{x},t), \qquad c_{\text{skip}}(\varepsilon)=1,\; c_{\text{out}}(\varepsilon)=0 . \]

Senza la condizione al contorno la funzione costante soddisferebbe la consistenza ed è la soluzione degenere.

Sono i consistency model [SDCS23], e si addestrano in due modi. La distillazione di consistenza usa un maestro per fare il passo \(t\to s\) (il punto raggiunto è \(\hat{\mathbf{x}}_s\)) e impone \(\mathbf{f}_\phi(\mathbf{x}_t,t)\approx \mathbf{f}_{\phi^-}(\hat{\mathbf{x}}_s,s)\), minimizzando \(\mathbb{E}\big[w(t)\,d\big(\mathbf{f}_\phi(\mathbf{x}_t,t),\mathbf{f}_{\phi^-}(\hat{\mathbf{x}}_s,s)\big)\big]\) con \(d\) una distanza (nel lavoro originale la migliore è LPIPS). Qui \(\phi^-\) è una copia a media mobile dei parametri che fa da bersaglio, e che stabilizza sensibilmente l’addestramento per la stessa ragione della rete-target del Deep Q-Network, cioè che la stima non deve inseguire un bersaglio che si muove insieme a lei (là la copia è periodica invece che a media mobile). Se la perdita è nulla (con \(\phi^-=\phi\)), \(\mathbf{f}_\phi\) è lipschitziana in \(\mathbf{x}\) e il solutore del maestro ha errore locale \(O(\Delta t^{p+1})\), con \(\Delta t\) il passo massimo della griglia di tempi, la funzione appresa dista dalla mappa esatta \(O(\Delta t^{p})\) (teorema 1 di Song e colleghi): la garanzia è quella del solutore del maestro, e non di più. L’addestramento di consistenza fa a meno del maestro sostituendo il passo con uno stimatore non distorto del punteggio ricavato dal rumore iniettato, e addestra da zero. In questo regime la copia a media mobile si è poi rivelata d’intralcio: nella versione migliorata di Song e Dhariwal [SD24] il bersaglio è la rete stessa con il gradiente fermato, insieme a una perdita di Pseudo-Huber e a un programma di rumore lognormale, e l’addestramento da zero supera la distillazione a uno e a due passi.

Il campionamento a un passo è \(\mathbf{x}_\varepsilon = \mathbf{f}_\phi(\mathbf{x}_T,T)\). Quello a pochi passi alterna salto e re-iniezione di rumore: si salta a \(\hat{\mathbf{x}}_0\), si riporta il risultato a un livello di rumore intermedio \(\tau_k\), preso da una sequenza decrescente fissata in partenza, sommando rumore campionato, e si salta di nuovo. Due o quattro iterazioni di questo tipo recuperano gran parte del divario con il maestro, e questo è il regime d’uso di questi modelli.

Il quadro che tiene insieme tutto: imparare la mappa, non la velocità#

La distillazione progressiva e i consistency model sembrano trucchi diversi, e guardati da un passo indietro sono lo stesso procedimento. La famiglia che fa combaciare le distribuzioni resta fuori per sua natura: il suo studente non impara dove porta la strada del maestro, impara una strada qualsiasi, purché le destinazioni, prese tutte insieme, si distribuiscano come le sue.

Un modello di diffusione ordinario impara la velocità istantanea: dove andare adesso, per un tratto piccolissimo. Per sapere dove si finisce bisogna sommare tanti di quei tratti uno dopo l’altro, cioè fare tanti passi (questa somma, in matematica, si chiama integrale). Le altre due famiglie imparano invece qualcosa che contiene già la somma fatta: la destinazione, oppure la velocità media su un tratto lungo.

La velocità media spiega il guadagno. Ad esempio, andando da Milano a Roma la velocità istantanea cambia di continuo, e per sapere dove si arriva bisogna seguirla minuto per minuto; ma se qualcuno ti dice la velocità media dell’intero viaggio, la destinazione la calcoli con una moltiplicazione. Un passo solo, e il risultato è esatto invece che approssimato, perché la media è definita così.

Da qui la famiglia generale, che invece di una destinazione sola impara la mappa fra due istanti qualsiasi: dove si arriva partendo da qui a quest’ora e viaggiando fino a quell’altra. Chi impara questa mappa può fare un passo solo, due, o venti, con lo stesso modello, e scegliere di volta in volta quanto pagare. I metodi che portano nomi diversi negli articoli sono casi particolari di questa: la destinazione finale, o il tratto lungo, o quello corto.

Il quadro unificante è quello delle mappe di flusso (flow maps) [BAVE25]. Un modello di diffusione ordinario apprende il campo istantaneo \(\mathbf{u}_t(\mathbf{x})\), e la generazione richiede di integrarlo. I metodi a pochi passi apprendono invece direttamente l’operatore di soluzione

\[ \Phi_{t\to s}(\mathbf{x}) := \mathbf{x} + \int_t^s \mathbf{u}_r(\mathbf{x}_r)\,\mathrm{d}r , \]

o una sua restrizione. Le famiglie si collocano così:

metodo

che cosa apprende

diffusione, flow matching

\(\mathbf{u}_t\), la velocità istantanea

consistency model

\(\Phi_{t\to 0}\), la sola destinazione

consistency trajectory model

\(\Phi_{t\to s}\) per \(s\) qualsiasi

mean flow

\(\bar{\mathbf{u}}(\mathbf{x},t,s) := \frac{1}{s-t}\int_t^s \mathbf{u}_r\,\mathrm{d}r\)

L’ultima riga rende evidente perché un passo basti: per definizione \(\Phi_{t\to s}(\mathbf{x}) = \mathbf{x} + (s-t)\,\bar{\mathbf{u}}\), quindi un singolo passo di Eulero con la velocità media è esatto, mentre lo stesso passo con la velocità istantanea ha errore \(O((s-t)^2)\). Tutto il guadagno sta in questa sostituzione, e tutto il costo sta nel fatto che \(\bar{\mathbf{u}}\) dipende da due tempi invece che da uno, quindi la rete ha un ingresso in più e un problema più difficile da approssimare. Il consistency trajectory model è di Kim e colleghi [KLL+24]; il mean flow è di Geng e colleghi [GDB+25], del 2025, e il suo posto nella pratica è ancora da stabilire.

La consistenza in tempo continuo si scrive come una condizione differenziale sulla mappa, \(\frac{\mathrm{d}}{\mathrm{d}t}\Phi_{t\to s}(\mathbf{x}_t)=\mathbf{0}\) lungo la traiettoria, che sviluppata dà \(\partial_t\Phi + (\nabla_{\mathbf{x}}\Phi)\,\mathbf{u}_t = \mathbf{0}\): un prodotto Jacobiano-vettore, calcolabile con la differenziazione automatica in avanti a costo di una passata in più. È la forma in cui i metodi più recenti addestrano senza discretizzare [LSK+26].

Le due identità su cui poggiano i generatori a un passo si controllano in dieci righe, sullo stesso banco di prova dei campionatori veloci: la consistenza (fermarsi a metà strada e ripartire porta allo stesso posto) e l’esattezza del passo singolo con la velocità media.

import numpy as np

MODI = np.array([-1.5, 1.5])
T_MIN = 1e-3
B_MIN, B_MAX = 0.1, 20.0
beta = lambda t: B_MIN + t * (B_MAX - B_MIN)
alpha = lambda t: np.exp(-0.5 * (B_MIN * t + 0.5 * (B_MAX - B_MIN) * t**2))
sigma = lambda t: np.sqrt(1 - alpha(t)**2)

def eps(x, t):
    a, s = alpha(t), sigma(t)
    d = x[:, None] - a * MODI[None, :]
    w = np.exp(-0.5 * (d / s)**2)
    w /= w.sum(axis=1, keepdims=True)
    return (w * d).sum(axis=1) / s

campo = lambda x, t: -0.5 * beta(t) * x + 0.5 * beta(t) / sigma(t) * eps(x, t)

def percorri(x, da, a, passi=400):
    ts = np.linspace(da, a, passi + 1)
    for k in range(passi):
        x = x + (ts[k + 1] - ts[k]) * campo(x, ts[k])
    return x

rng = np.random.default_rng(0)
z = rng.normal(size=8)

destinazione = percorri(z.copy(), 1.0, T_MIN)     # f(z, 1): dove si va a finire
print(np.round(destinazione, 4))
# -> [ 1.4842 -1.4845  1.4995  1.4829 -1.4972  1.493   1.5109  1.5051]

# autoconsistenza: fermarsi lungo la strada e ripartire da li'
for t_meta in (0.6, 0.3, 0.1):
    a_meta = percorri(z.copy(), 1.0, t_meta)
    scarto = np.abs(percorri(a_meta, t_meta, T_MIN) - destinazione).max()
    print(t_meta, round(float(scarto), 6))
# -> 0.6 0.000888
# -> 0.3 0.001641
# -> 0.1 0.002068

Gli scarti sono dell’ordine del millesimo, e sono l’errore dei passi grossolani usati per la prova: la consistenza vale sulla traiettoria vera. È la proprietà che una rete addestrata a rispettarla eredita, e che la rende un generatore a un passo.

velocita_media = (destinazione - z) / (T_MIN - 1.0)
print(np.round(z + (T_MIN - 1.0) * velocita_media, 4))
# -> [ 1.4842 -1.4845  1.4995  1.4829 -1.4972  1.493   1.5109  1.5051]

print(np.round(z + (T_MIN - 1.0) * campo(z, 1.0), 4))
# -> [ 0.1258 -0.1322  0.6408  0.105  -0.536   0.3618  1.3047  0.9476]

La prima riga non verifica niente: la velocità media è stata ricavata dalla destinazione, quindi un passo con essa la riproduce per identità algebrica, \(\mathbf{z} + (s-t)\,(\Phi - \mathbf{z})/(s-t) = \Phi\). Stampa la definizione, e fissa che cosa una rete a un passo deve imparare. La seconda è la misura vera: lo stesso passo con la velocità istantanea finisce ovunque tranne che sui due modi. La difficoltà non sta nel campionare, sta nell’imparare quella media.

Che cosa si perde#

I modelli a pochi passi hanno dei costi che i confronti pubblicati non sempre mettono in evidenza.

Il primo è la varietà, e la perdita dipende dal criterio più che dal numero di passi. I metodi che fanno combaciare le distribuzioni minimizzano una KL inversa o una perdita avversaria, che puniscono lo studente quando genera dove il maestro non ha massa più di quando ne ignora una parte: la distribuzione che ne esce è più concentrata, con buona qualità visiva e meno tipi di immagine diversi. Per la distillazione progressiva e i consistency model, che inseguono la traiettoria, una sola valutazione si paga piuttosto nella qualità del singolo campione, che a un passo scende.

Il secondo è la controllabilità. Le tecniche della sezione su guida e allineamento agiscono modificando la direzione a ogni passo; con un passo solo il punto in cui intervenire è uno, e la guida va incorporata nella distillazione invece che applicata al momento. È il motivo per cui un modello distillato arriva spesso con il peso della guida già fissata dentro.

Il terzo è che il confronto onesto si fa a parità di valutazioni della rete, e non a parità di passi. Un metodo a due passi che ne usa due per passo costa quanto uno a quattro passi, e le tabelle degli articoli non sempre lo dichiarano.

Da ricordare

  • Il primo metodo è la distillazione progressiva: uno studente impara a fare in un passo il lavoro che il maestro fa in due, poi diventa maestro a sua volta. Dieci giri portano da mille passi a uno, e arrivare a quattro passi costa quanto addestrare il modello di partenza; lo studente però non può superare il maestro, perché ne copia i tratti.

  • La seconda chiede un requisito più debole sul singolo caso e più forte nell’insieme: che le immagini prodotte siano distribuite come quelle del maestro. Così lo studente può risultare migliore, perché non è obbligato a copiarne gli errori; in cambio tende a dimenticare qualche tipo di immagine, perché il modo in cui lo si corregge punisce più chi disegna dove il maestro non disegnerebbe che chi dimentica.

  • La terza parte da un’ovvietà: da qualunque punto di una traiettoria, la destinazione è la stessa. Chiedere a una rete di rispondere sempre la stessa cosa lungo una traiettoria la trasforma in un generatore a un passo, e l’ancora che impedisce la risposta banale è il punto di arrivo, dove la risposta si conosce.

  • Tutte e tre sostituiscono la velocità istantanea con qualcosa che contiene già l’integrale, cioè la destinazione o la velocità media sul tratto. Un passo con la velocità media è esatto per definizione; con quella istantanea non lo è, e lo mostra il calcolo.

  • I costi: meno varietà nelle immagini (soprattutto per chi fa combaciare le distribuzioni; chi insegue le traiettorie perde piuttosto in qualità della singola immagine), guida più difficile da applicare dopo, e confronti che vanno letti a parità di valutazioni della rete e non di passi.

Da ricordare

  • Distillazione progressiva: lo studente riproduce in un passo due passi DDIM del maestro, e si itera; \(K\) iterazioni dividono i passi per \(2^K\). Vuole una parametrizzazione ben condizionata a entrambi gli estremi, di solito la \(\mathbf{v}\)-prediction, e un programma di rumore a SNR terminale nullo; ha come tetto la qualità del maestro.

  • Corrispondenza di distribuzione: si minimizza \(D_{\mathrm{KL}}(p_\phi\|p_\theta)\), il cui gradiente dipende dalle due distribuzioni solo attraverso i punteggi; il secondo si stima con un modello ausiliario addestrato in linea. Il vincolo è distribuzionale, quindi lo studente può superare il maestro; la KL inversa è mode-seeking, e concentra la distribuzione. DMD2 toglie la regressione sulle coppie del maestro, aggiorna il punteggio dello studente più spesso del generatore e aggiunge una perdita avversaria su immagini vere.

  • Consistency model: \(\mathbf{f}_\phi(\mathbf{x}_t,t)= \mathbf{f}_\phi(\mathbf{x}_s,s)\) lungo la PF-ODE, con \(\mathbf{f}_\phi(\mathbf{x},\varepsilon)=\mathbf{x}\) imposta dalla parametrizzazione \(c_{\text{skip}}\mathbf{x}+c_{\text{out}}F_\phi\). Si addestra per distillazione o da zero, con una rete bersaglio a media mobile.

  • Il quadro unificante è quello delle mappe di flusso: si apprende \(\Phi_{t\to s}\) invece di \(\mathbf{u}_t\). Poiché \(\Phi_{t\to s}(\mathbf{x}) = \mathbf{x}+(s-t)\bar{\mathbf{u}}\), un passo di Eulero con la velocità media è esatto, mentre con quella istantanea l’errore è \(O((s-t)^2)\). La consistenza in tempo continuo è \(\partial_t\Phi + (\nabla_{\mathbf{x}}\Phi)\mathbf{u}_t=\mathbf{0}\), un prodotto Jacobiano-vettore.

  • I costi da dichiarare: copertura delle modalità inferiore per chi fa combaciare le distribuzioni (qualità del singolo campione, per chi insegue le traiettorie), guida da incorporare nella distillazione, e confronti da fare a parità di valutazioni della rete.

La guida, il peso per cui si moltiplica la differenza fra la risposta con la richiesta e quella senza, rende utilizzabili i modelli che disegnano su richiesta (la sezione su Stable Diffusion ne ha dato la formula), ma ha un costo sulla distribuzione dei risultati, e con un passo solo non si può più applicare a ogni passo. La sezione su guida e allineamento misura quel costo e mostra come si piega il modello stesso invece della generazione.