Un nuovo approccio all'arte generativa: dai sogni digitali ai dipinti controllati
Il 23 agosto, Surya Narreddi ha pubblicato un video affascinante che mostrava acquerelli dipinti da un modello di linguaggio. La clip ha raggiunto rapidamente più di 1,5 milioni di visualizzazioni, catturando l'immaginazione di chi segue l'intelligenza artificiale e l'arte generativa. Quello che rende questo progetto particolarmente interessante non è solo il risultato estetico, ma il modo in cui è stato raggiunto: il modello scrive codice JavaScript attraverso p5.brush, una libreria che "aggiunge strumenti di disegno naturali a p5.js".
Il video è stato accompagnato da un articolo dettagliato che spiega l'addestramento dietro una fase precedente e più ristretta del progetto, focalizzata su fiori in primo piano piuttosto che le composizioni complete mostrate nel video. Un rapporto tecnico completo era promesso per il futuro. Questo progetto rappresenta un'evoluzione affascinante nel campo dell'arte generativa, che affonda le radici negli albori dell'intelligenza artificiale creativa e nel modo in cui gli artisti hanno sempre cercato di insegnare alle macchine a creare.
La storia dell'arte generativa: da DeepDream a oggi
I dipinti generati da questo sistema presentano un'estetica particolare: sono sciolti, imperfetti, fatti a mano, in un momento in cui i modelli di immagine producono quadri perfetti e statisticamente medi. Questa caratteristica rappresenta probabilmente una delle ragioni principali per cui il video è diventato virale così rapidamente. Il contrasto è rimarchevole rispetto alle immagini lisce e idealizzate tipiche della generazione di immagini moderna.
Questo progetto ricorda i giorni iniziali dell'arte generativa con intelligenza artificiale, quando l'obiettivo era esplorare il mezzo stesso piuttosto che perfezionarlo. DeepDream (2015) era originariamente uno strumento di debugging che le persone hanno trasformato in arte. Opere come Edmond de Belamy (2018) provenivano da artisti che investigavano cosa poteva fare una GAN. Artisti come Mario Klingemann hanno passato quegli anni creando ritratti sognanti con reti neurali. Questo progetto si sente più vicino a quei giorni iniziali di sperimentazione pura.
Nella sua tesi, Surya descrive il percorso che lo ha portato qui. Ha iniziato usando prompt con modelli text-to-image, dove il prompt è l'unica leva che puoi usare, e ulteriori dettagli comprano più controllo solo fino a un certo punto. Addestrare il modello stesso va molto più lontano. L'altra metà dell'idea riguarda il mezzo stesso: il modello scrive un programma di circa 150 linee di JavaScript che dipinge l'immagine. L'output del modello è codice, leggibile, modificabile e eseguibile di nuovo, e la decisione dietro ogni pennellata è visibile.
Preferenze estetiche e apprendimento per rinforzo
Nello stesso periodo, Anna Ridler ha fotografato migliaia di tulipani, etichettato manualmente ogni uno, ha esposto il dataset stesso come opera d'arte, e successivamente ha addestrato un modello su di esso. Questo progetto fa qualcosa di molto simile curando manualmente un insieme di immagini e poi addestrando contro di esse. È un approccio che riporta l'umano al centro del processo di addestramento dell'intelligenza artificiale.
La maggior parte del recente lavoro RL sui modelli di linguaggio utilizza reward che si possono verificare. Ad esempio, problemi matematici con una risposta nota, codice che supera i test, o grader che sono chiaramente giusti o sbagliati e economici da eseguire. Questo progetto è più vicino all'eccezione più vecchia, RLHF (Reinforcement Learning from Human Feedback), dove il modello impara un modello di reward dalle preferenze umane.
Qui il reward è la preferenza estetica. Non esiste una risposta "corretta". La vera domanda del progetto è se puoi fare RL sul gusto. È una domanda profonda e affascinante che tocca il cuore di come l'intelligenza artificiale può imparare a generare arte significativa.
Il sistema di reward: HPSv3 e il giudice di coppie
Il reward, come definito nel blog originale e come implementato nell'ambiente RL costruito, funziona su due livelli complementari:
HPSv3 è un modello di preferenza open source da 7 miliardi di parametri. Gli dai un'immagine e una descrizione di testo, e restituisce un punteggio per quanto una persona preferirebbe quell'immagine. È stato addestrato su un grande insieme di scelte umane tra coppie di immagini, quindi il suo punteggio è una media del gusto di molte persone.
Il giudice di coppie è Qwen3-VL-30B-A3B-Instruct, un modello di visione generale chiamato attraverso HF Inference Providers. Il giudice di coppie vede il dipinto candidato accanto a quattro riferimenti selezionati casualmente dal pool, guidato da una descrizione scritta di cosa considerare (sbavature, lavaggi traslucidi, bordi morbidi). Ogni confronto è presentato in entrambi gli ordini di presentazione, e il suo punteggio è la frazione di confronti che il candidato vince. Il suo unico standard è il pool, quindi il suo punteggio è il gusto personale codificato in quelle valutazioni.
Questi sono i pesi su cui Narreddi ha convergito. Il pool definisce il gusto qui. Questo sposta il lavoro dal tuning dei iperparametri alla costruzione dell'insieme che decide cosa è bello. È un cambiamento paradigmatico nel modo di pensare all'addestramento di modelli per compiti artistici.
Tre esperimenti con diverse ponderazioni di reward
Sono stati addestrati tre run con questo reward. Differiscono solo nel modo in cui il peso si divide tra i due modelli di giudice:
- hps-only: 100% HPSv3, 0% giudice di coppie
- balanced: 50% HPSv3, 50% giudice di coppie
- heavy-judge: 25% HPSv3, 75% giudice di coppie
L'esperimento è iniziato con hps-only per convalidare che la pipeline potesse imparare affatto. Una volta che il reward era in aumento e le metriche erano sane, non c'era ragione per eseguirlo più a lungo, quindi gli esperimenti più lunghi sono stati lanciati invece. La domanda che i run più lunghi pongono è: quanto della potenza di HPSv3 puoi cedere al giudice di coppie?
Più peso porta il giudice, più il reward rappresenta il gusto personale invece del gusto collettivo, e più difficile dovrebbe essere salire nella scala di performance. Incidentalmente, se lo spingi abbastanza lontano o il tuo stile è troppo distante dalla media, il modello potrebbe smettere del tutto di imparare. Fortunatamente, non si è fermato e entrambi i run con il giudice di coppie hanno imparato. Il pool valutato manualmente può guidare la policy, almeno per quanto le metriche e i dipinti finali mostrano.
L'ambiente RL: orchestrazione complessa dietro le quinte
L'ambiente avvolge tutto ciò che si trova tra il modello e il reward, inclusa la libreria JavaScript che il modello usa per dipingere, il system prompt che lo limita, il Chromium headless che renderizza ogni sketch, e il gate che rifiuta i trucchi.
La libreria fa più lavoro di quanto sembri. p5.brush, di @acamposuribe, simula un mezzo piuttosto che disegnare forme: il pigmento esce oltre i bordi di un riempimento, la carta ha texture, i tratti hanno massa, i campi di flusso trascinano il lavoro dei pennelli intorno. Quando il modello chiama brush.fillBleed(0.25), sta decidendo quanto lontano l'inchiostro corre. È una decisione granulare che crea effetti visivi naturali.
È affascinante notare che l'autore di p5.brush, @acamposuribe, stava cercando di insegnare a una macchina a dipingere molto prima di tutto questo. Nel 2022 ha creato una serie di arte generativa che nasconde un diario sull'insegnamento di p5.js a disegnare come un bambino: "Può a malapena usare i pastelli [...] Non può seguire semplici comandi. Ho finito per oggi, molto frustrante." La serie era pensata per avere tre pezzi, e ne ha creati due. Quando il video di Surya è diventato virale, ha citato il diario, dicendo che questo lavoro è il terzo pezzo che arriva da solo. È una coincidenza straordinaria che collegava il passato frustrato al presente trionfale.
Limitare il mezzo: scegliere 10 metodi su 47
p5.brush espone 47 metodi totali. Il prompt consente solo 10:
- scaleBrushes
- noStroke
- fill
- noFill
- fillBleed
- fillTexture
- beginShape
- vertex
- endShape
- circle
Quello che gli altri trentasette aggiungono - linee, tratteggio, pennelli personalizzati - romperebbe l'aspetto dell'acquerello. Con questi dieci, il modello può solo dipingere forme riempite, e la libreria aggiunge la sfumatura a ognuna di esse. È una restrizione deliberata che canalizza l'espressione del modello verso un mezzo specifico.
Il blog originale ha risparmiato molto tempo che avrebbe potuto essere sprecato iterando sul prompt. Un lungo riferimento API fa inventare al modello metodi che non esistono, e gli 200 iteri GEPA (un ottimizzatore automatico di prompt) hanno convergito su una lista di permessi rigorosa senza documentazione. Gli stessi errori sono stati osservati e la lista di permessi è stata scritta a mano. L'unica aggiunta a questa ricetta è una frase: "dipingi ogni petalo due o tre volte, una grande passata prima e una più piccola e più opaca dentro di essa." Questo piccolo cambiamento ha reso gli output molto più colorati.
Il gate di controllo: prevenire i trucchi
Il gate è il pezzo finale della pipeline. Lo sketch deve compilarsi, usare la libreria invece di chiamate p5 dirette, mettere vero pigmento sulla tela, e non tentare di ingannare il scorer, ad esempio scrivendo testo sulla tela. È una forma di supervisione che garantisce che il modello stia effettivamente imparando a dipingere piuttosto che trovando scorciatoie.
Costruire il pool: 178 dipinti curati manualmente
Il pool consiste di 178 dipinti divisi in due livelli in base alle preferenze personali: "amore" e "okay". Tutti loro sono effettivamente generati da un modello. Quattro modelli open-weight, chiamati attraverso Inference Providers, hanno scritto sketch p5.brush, ciascuno lavorando da una vera fotografia con licenza aperta di un ibisco da iNaturalist. Un modello di visione ha fornito feedback scritto su ogni sketch, per tre iterazioni di raffinamento. Ogni render finale è stato quindi valutato uno alla volta, personalmente, e 178 hanno superato il vaglio.
Qui è stata scelta una diversità di quattro famiglie di modelli per testare i loro stili diversi. Questi quattro erano i modelli open che hanno prodotto uno sketch valido ogni volta in un rapido controllo di affidabilità, e due altri candidati sono stati scartati per non averlo superato. Se volessi produrre il tuo pool, potresti sceglierne altri, creando effettivamente un gusto artistico completamente diverso.
I livelli fanno un vero lavoro nel reward. Quando il giudice di coppie disegna quattro riferimenti, metà provengono da "amore" e metà da "okay", quindi la policy affronta sempre alcuni rivali che a volte può battere, e una vittoria paga lo stesso contro uno qualsiasi dei livelli. Questo è uno dei pochi cambiamenti deliberati rispetto all'originale: l'originale confronta solo contro il livello superiore, e il livello più facile è stato mantenuto nel draw in modo che una policy debole all'inizio ottenga ancora segnale di apprendimento.
Una limitazione importante: l'assenza di dipinti umani
Nessun dipinto creato da umani è presente nel pool, il che rappresenta una vera limitazione. p5.brush è una libreria di nicchia, e il lavoro umano che esiste in esso con codice accessibile è una manciata di pezzi, molto lontano da quello che un corpus di addestramento avrebbe bisogno. Come nota anche il blog originale, questa è una sfida reale per futuri sviluppi.
L'idea interessante qui, come discusso precedentemente, è che il modello imparerà a imitare quello che il pool contiene. Se punti l'ambiente a un dataset diverso, il reward cambierebbe completamente. Questo significa che il sistema è altamente adattabile a diversi stili artistici e preferenze estetiche.
L'implementazione open source: riprodurre l'idea con TRL e OpenEnv
Il progetto è stato riprodotto utilizzando TRL (Transformer Reinforcement Learning) e OpenEnv, con l'intenzione di rendere ogni pezzo completamente open e riproducibile. Il dataset di pool di riferimento, l'ambiente RL, gli script di addestramento e i modelli addestrati sono tutti pubblicati. L'intera pipeline gira su Hugging Face, end-to-end.
Una volta che i due Spaces sono attivi, la ricetta richi