Bel post breve che illustra quanto possa essere semplice la diffusione del testo (discreta). La diffusione (cioè, denoising parallelo e iterato, top) è il paradigma generativo pervasivo nell'immagine/video, ma l'autoregressione (cioè, andare da sinistra a destra in basso) è il paradigma dominante nel testo. Per l'audio ho visto un po' di entrambi. Molti articoli sulla diffusione sembrano un po' densi, ma se si rimuove il formalismo matematico, si finisce con semplici algoritmi di base, ad esempio qualcosa di molto più vicino al flow matching in continuo, o qualcosa del genere in discreto. È il tuo transformer vaniglia ma con attenzione bidirezionale, dove si ri-campionano e ri-mascherano iterativamente tutti i token nel tuo "canvas di token" in base a un programma di rumore fino a ottenere il campione finale all'ultimo passo. (L'attenzione bidirezionale è molto più potente, e ottieni modelli di linguaggio autoregressivi molto più forti se ti alleni con essa, sfortunatamente rende l'addestramento molto più costoso perché ora non puoi parallelizzare lungo la dimensione della sequenza). Quindi l'autoregressione sta facendo un `.append(token)` al canvas di token mentre si concentra solo all'indietro, mentre la diffusione sta aggiornando l'intero canvas di token con un `.setitem(idx, token)` mentre si concentra in modo bidirezionale. Il pensiero umano sembra naivemente un po' più simile all'autoregressione, ma è difficile dire che non ci siano componenti più simili alla diffusione in qualche spazio latente di pensiero. Sembra abbastanza possibile che tu possa ulteriormente interpolare tra di loro, o generalizzarli ulteriormente. Ed è un componente dello stack LLM che sembra ancora un po' fungibile. Ora devo resistere all'impulso di deviare nel addestrare nanochat con la diffusione.