Con la stagione delle bocce universitarie alle porte, gli appassionati di calcio di tutta la nazione rimarranno abbagliati, non solo dall’azione sul campo, ma anche dalle intricate “acrobazie con le carte” eseguite dai membri del pubblico dello stadio. Il lavoro altamente coordinato della folla è in grado di produrre immagini dettagliate che assomigliano alle immagini pixelate sugli schermi dei computer e che sono codificate più o meno allo stesso modo.
Il nuovo libro di Michael Littman, Code to Joy: perché tutti dovrebbero imparare un po’ di programmazione, è pieno di esempi simili di come funzionano le macchine intorno a noi e di come non dobbiamo diffidare di un futuro pieno di automi finché impariamo a parlare la loro lingua (almeno finché non finiscono di imparare la nostra). Dalla sequenza dei comandi alla memorizzazione delle variabili, Codice per la gioia fornisce una guida accessibile e divertente alle nozioni di base della programmazione per programmatori alle prime armi di tutte le età.
Stampa del MIT
Estratto da Code to Joy: perché tutti dovrebbero imparare un po’ di programmazione di Michael L. Littman. Pubblicato da MIT Press. Copyright © 2023 di Michael L Littman. Tutti i diritti riservati.
“DAMMI UN BLU!”
Le acrobazie con le carte, in cui il pubblico dello stadio solleva cartelli colorati per creare un gigantesco cartellone pubblicitario temporaneo, sono come flash mob in cui i partecipanti non hanno bisogno di abilità speciali e non devono nemmeno esercitarsi in anticipo. Tutto quello che devono fare è presentarsi e seguire le istruzioni sotto forma di una breve sequenza di comandi. Le istruzioni guidano il pubblico dello stadio a tenere in alto le carte colorate delle dimensioni di un poster giusto al momento giusto, come annunciato da uno stunt leader. Una tipica serie di istruzioni per le acrobazie con le carte inizia con le istruzioni per seguire le istruzioni:
- ascoltare attentamente le istruzioni
- tieni la parte superiore della carta all’altezza degli occhi (non sopra la testa)
- tieni il colore indicato verso il campo (non di fronte a te)
- passare le carte nel corridoio al termine delle acrobazie (non strappare le carte)
Queste istruzioni possono sembrare ovvie, ma non dirle porta sicuramente al disastro. Anche così, sai che ci deve essere un alec intelligente che chiede dopo: “Scusa, qual era di nuovo il primo?” E’ sicuramente quello che farei.
Poi arriva l’evento principale, che, per una persona specifica tra la folla, potrebbe essere la sequenza di comandi:
Mozzafiato, no? Beh, forse devi vedere il quadro più ampio. L’intera idea delle acrobazie con le carte sfrutta il fatto che i membri del pubblico di uno stadio si siedono su posti disposti in una griglia. Sostenendo cartelli rettangolari colorati, si trasformano in qualcosa di simile al grande schermo di un computer. Ogni partecipante agisce come un singolo elemento dell’immagine: i pixel della persona! I turni in cui le carte vengono sollevate cambiano l’immagine o forse addirittura la trasformano in una gif animata più grande della vita.
Le acrobazie con le carte iniziarono come attività di partecipazione della folla agli sport universitari negli anni ’20. Sono diventati molto meno popolari negli anni ’70, quando si era generalmente d’accordo sul fatto che ognuno dovesse fare le proprie cose, amico. Negli anni ’50, però, c’era una vera e propria fame di creare esposizioni sempre più elaborate. Le squadre di allegria progettavano le acrobazie a mano, quindi preparavano istruzioni individuali per ciascuno dei mille posti. Devi amare davvero la tua squadra per dedicare quel tipo di energia. Alcune scuole negli anni ’60 pensavano che questi nuovi computer potessero essere utili per eliminare un po’ del lavoro faticoso della preparazione dell’istruzione e progettarono programmi per trasformare sequenze di immagini disegnate a mano in istruzioni personalizzate per ciascuno dei partecipanti. Con l’aiuto dei computer, le persone potrebbero produrre sequenze personalizzate molto più ricche per ogni pixel di persona che dicevano quando sollevare una carta, di che colore sollevare e quando posarla o passare a un’altra carta. Quindi, mentre l’esempio del questionario della sezione precedente riguardava le persone che creavano sequenze di comandi da far eseguire al computer, questo esempio riguarda il computer che crea sequenze di comandi per persone da seguire. E il supporto del computer per automatizzare il processo di creazione di sequenze di comandi rende possibile creare acrobazie più elaborate. Ciò ha comportato che la sequenza di comandi di un partecipante fosse simile a:
- su 001 bianco
- 003 blu
- 005 bianco
- 006 rosso
- 008 bianco
- 013 blu
- 015 bianco
- 021 in basso
- su 022 bianco
- 035 in basso
- su 036 bianco
- 043 blu
- 044 in basso
- su 045 bianco
- 057 rosso metallizzato
- 070 in basso
Ok, non è ancora così divertente leggere le istruzioni quanto vedere il prodotto finale: in questo esempio reale, fa parte di una “S” animata di Stanford. Per eseguire questi comandi in modo sincronizzato, un annunciatore nello stadio pronuncia il numero del passo (“Quarantuno!”) e ogni partecipante può capire dalle sue istruzioni cosa fare (“Sto ancora alzando il cartellino bianco Ho rilanciato con 36, ma mi sto preparando a scambiarlo con una carta blu quando il conteggio arriverà a 43”).
Come ho detto, non è così complicato per le persone prendere parte a un’acrobazia con le carte, ma è un esempio piuttosto interessante di creazione e esecuzione di sequenze di comandi in cui è il computer a dirci cosa fare invece del contrario. E, per quanto facile possa essere, a volte le cose continuano ad andare storte. Alla Convenzione Nazionale Democratica del 2016, i sostenitori di Hillary Clinton hanno pianificato un’acrobazia con le carte in tutta l’arena. Anche se doveva essere una dimostrazione patriottica di unità, alcuni partecipanti non hanno voluto partecipare. Il risultato fu un pasticcio illeggibile che, tristemente, avrebbe dovuto significare “Stronger Together”.
Al giorno d’oggi, i computer rendono semplice trasformare una fotografia in istruzioni su quali colori mostrare e dove. In sostanza, qualsiasi immagine digitalizzata è già una serie di istruzioni su quale miscela di rosso, blu e verde visualizzare in ciascuna posizione dell’immagine. Una sfida interessante nel tradurre un’immagine in istruzioni per le acrobazie con le carte è che le immagini tipiche sono costituite da milioni di punti colorati (megapixel), mentre una sezione di acrobazie con le carte di uno stadio ha forse mille posti a sedere. Invece di chiedere a ogni persona di tenere in mano un migliaio di minuscole carte, ha più senso calcolare una media dei colori in quella parte dell’immagine. Quindi, dalla raccolta dei colori disponibili (ad esempio, le classiche sessantaquattro opzioni Crayola), il computer sceglie semplicemente quello più vicino alla media.
Se ci pensate, non è ovvio come un computer possa calcolare la media dei colori. Potresti mescolare il verde e il giallo e decidere che il risultato assomigli al pastello verde primaverile, ma come insegni a una macchina a farlo? Diamo un’occhiata a questa domanda un po’ più in profondità. Ti aiuterà a farti un’idea di come i computer possono aiutarci a istruirli meglio. Inoltre, segnerà il nostro ingresso nell’entusiasmante mondo del machine learning.
In realtà ci sono molti, molti modi per calcolare la media dei colori. Uno semplice è sfruttare il fatto che ogni punto di colore in un file immagine viene memorizzato come la quantità di colore rosso, verde e blu al suo interno. Ogni colore componente è rappresentato come un numero intero compreso tra 0 e 255, dove 255 è stato scelto perché è il valore più grande che puoi ottenere con otto cifre binarie, o bit. L’uso di quantità di rosso-blu-verde funziona bene perché i recettori del colore nell’occhio umano traducono i colori del mondo reale in questa stessa rappresentazione. Cioè, anche se il viola corrisponde a una specifica lunghezza d’onda della luce, i nostri occhi lo vedono come una particolare miscela di verde, blu e rosso. Mostra a qualcuno la stessa miscela e vedrà il viola. Quindi, per riassumere un grande gruppo di pixel, basta fare la media della quantità di blu in quei pixel, della quantità di rosso in quei pixel e della quantità di verde in quei pixel. Fondamentalmente funziona. Ora, si scopre che, per una combinazione di ragioni fisiche, percettive e ingegneristiche, si ottengono risultati migliori elevando al quadrato i valori prima della media e eseguendo la radice quadrata dei valori dopo la media. Ma questo non è importante in questo momento. La cosa importante è che esista un modo meccanico per calcolare la media di un gruppo di punti colorati per ottenere un singolo punto il cui colore riassuma il gruppo.
Una volta prodotto il colore medio, il computer ha bisogno di un modo per trovare il colore più vicino alle carte che abbiamo a disposizione. È più una terra di Siena bruciata o un rosso-arancio? Un modo tipico (anche se imperfetto) per approssimare quanto simili due colori utilizzano i loro valori rosso-blu-verde è quella nota come formula della distanza euclidea. Ecco come appare come sequenza di comandi:
- prendi la differenza tra la quantità di rosso nei due colori e quadralo
- prendi la differenza tra la quantità di blu nei due colori e quadrala
- prendi la differenza tra la quantità di verde nel quadrato di due colori e somma i tre quadrati insieme
- prendi la radice quadrata
Quindi per capire quale carta tenere in mano per catturare al meglio la media dei colori nella parte corrispondente dell’immagine, basta capire quale tra i colori disponibili (blu, giallo verde, albicocca, timberwolf, mogano, pervinca, ecc. ) ha la distanza più piccola dal colore medio in quella posizione. Questo è il colore della carta che dovrebbe essere data alla persona pixel seduta in quel punto della griglia.
La somiglianza tra questo calcolo della distanza e l’operazione di media del colore è, ne sono abbastanza sicuro, solo una coincidenza. A volte una radice quadrata è solo una radice quadrata.
Facendo un passo indietro, possiamo utilizzare queste operazioni (media dei colori e ricerca del colore più vicino alla media) per chiedere a un computer di aiutarci a costruire la sequenza di comandi per un’acrobazia con le carte. Il computer prende come input un’immagine target, una mappa dei posti a sedere e una serie di carte colore disponibili, quindi crea una mappa di quale carta dovrebbe essere tenuta in ciascun posto per riprodurre al meglio l’immagine. In questo esempio, il computer si occupa principalmente della contabilità e non ha molto da fare in termini di processo decisionale oltre alla selezione del colore più vicino. Ma il risultato è che il computer si fa carico di parte dello sforzo di scrivere sequenze di comandi. Siamo passati dal dover selezionare ogni comando per ogni pixel di ogni persona in ogni momento nella scena della scheda al selezionare le immagini e far generare al computer i comandi necessari.
Questo cambiamento di prospettiva apre la possibilità di affidare alla macchina un maggiore controllo del processo di generazione della sequenza di comandi. Nei termini della nostra griglia 2 × 2 del capitolo 1, possiamo passare dal raccontare (fornendo istruzioni esplicite) allo spiegare (fornendo incentivi espliciti). Ad esempio, esiste una variante di questo problema di selezione del colore che è molto più difficile e dà al computer un lavoro più interessante da svolgere. Immagina di poter stampare cartoline di qualsiasi colore di cui abbiamo bisogno, ma la nostra tipografia insiste affinché ordiniamo le cartoline in grandi quantità. Possono fornirci solo otto colori diversi per le carte, ma possiamo scegliere qualsiasi colore vogliamo per comporre quegli otto. (Otto è il numero di valori diversi che possiamo ottenere con 3 bit: i bit emergono molto in informatica.) Quindi potremmo scegliere blu, verde, blu-verde, blu-viola, ceruleo, indaco, blu cadetto e blu cielo e renderizzare una bellissima onda oceanica in otto tonalità di blu. Grande!
Ma allora non ci sarebbe né il rosso né il giallo per fare altre foto. Limitare la tavolozza dei colori a otto può sembrare un vincolo bizzarro, ma si scopre che i primi monitor dei computer funzionavano esattamente così. Potevano visualizzare milioni di colori, ma sullo schermo solo otto distinti alla volta.
Tenendo presente questo vincolo, il rendering di un’immagine su cartoncini colorati diventa molto più complicato. Non solo devi decidere quale colore dal nostro set di opzioni di colore realizzare per ogni carta, proprio come prima, ma devi scegliere quali otto colori costituiranno quell’insieme di opzioni di colore. Se stiamo creando un volto, la varietà delle tonalità della pelle sarà molto più utile delle distinzioni tra le sfumature del verde o del blu. Come passiamo da un elenco di colori che vorremmo poter utilizzare perché sono nell’immagine di destinazione a un elenco molto più breve di colori che comporrà il nostro set di opzioni di colore?
L’apprendimento automatico, e in particolare un approccio noto come clustering o apprendimento non supervisionato, può risolvere per noi questo problema di scelta del colore. Ti dirò come. Ma prima approfondiamo un problema correlato che deriva dal trasformare una faccia in un puzzle. Come nell’esempio dell’acrobazia con le carte, chiederemo al computer di progettare una sequenza di comandi per il rendering di un’immagine. Ma c’è una svolta: i pezzi del puzzle disponibili per la costruzione g l’immagine è fissata in anticipo. Similmente all’esempio del passo di danza, utilizzerà lo stesso insieme di comandi e considererà quale sequenza produce l’immagine desiderata.