Stanno davvero arrivando le IA “intelligenti”?

L’International Collegiate Programming Contest è una gara (ma quante ne esistono?) dove squadre di tre studenti universitari devono scrivere in cinque ore dodici programmi. Quest’anno le finali sono state a Baku, e – come Alberto Romero riporta la “squadra” di OpenAI ha scritto correttamente il codice per tutti e dodici i problemi, superando Google DeepMind che si è fermata a dieci. La cosa più incredibile è che nessuna squadra umana ha ottenuto il punteggio pieno, fermandosi al massimo a 11/12.

Fin qui la notizia, che mi sa sia passata abbastanza inosservata almeno nel resto della mia bolla. Ma la parte davvero interessante del risultato di OpenAI è il modo con cui l’ha raggiunto. Secondo Mostafa Rohaninejad di OpenAI, infatti, a parte avere avuto a disposizione lo stesso tempo dei concorrenti umani, il modello usato è stato a detta di Rohaninejad “una composizione di GPT-5 e un modello di ragionamento sperimentale che generavano soluzioni, con il modello sperimentale che sceglieva quale soluzione dare. GPT-5 ha dato undici risposte corrette, e l’ultimo (e più difficile) problema è stato risolto dal modello di ragionamento sperimentale”.

Chiaramente un resoconto sotto forma di tweet non dice molto, senza contare che a questi livelli ci sono segreti aziendali. E c’è qualcosa che non mi torna nella storia. Però qualcosa la si può dire lo stesso. Innanzitutto, GPT-5 (che poi è quello che adesso abbiamo come interfaccia quando usiamo ChatGPT) è stato usato come “utile idiota”: gli si fa sparare una serie di soluzioni, e poi ci pensa qualcun altro – nel nostro caso, qualcos’altro – a stabilire cosa può andare bene e cosa no. Questo mi pare un ottimo modo per usare un LLM: se mi consentite un paragone un po’ azzardato, è come prendere in mano un rimario quando si vuole comporre una canzone. Lì troviamo le parole possibili, ma siamo poi noi a trovare le connessioni.

La cosa più intrigante è il “modello sperimentale”, che pare essere lo stesso usato all’IMO, le olimpiadi della matematica. Non serve l’intelligenza artificiale per verificare se un risultato è corretto: lo stato dell’arte nei dimostratori automatici di correttezza dei problemi è tale da essere regolarmente usato. Insomma, fin qui non si vedrebbe nulla di nuovo, se non probabilmente un metodo per convertire il formato interno dei risultati di GPT-5 in un formato utilizzabile da questo modello. Ma cosa è successo con il famigerato “problema difficile”, quello G nell’elenco delle prove? Chi è stato a fare i nove tentativi, e soprattutto perché il “modello sperimentale” non è sempre stato usato per risolvere gli altri problemi?

La mia ipotesi è che questo modello misterioso abbia non solo la capacità di verificare la validità di una soluzione ma anche quella di modificarla. Non sto pensando agli algoritmi genetici, che probabilmente ci metterebbero troppo tempo per stabilizzarsi su una soluzione, ma a qualche regola più o meno rigida per cambiare qualche parametro e vedere come evolve la situazione. Questo spiegherebbe la necessità di avere comunque un modello generativo sottostante: il modello misterioso non potrebbe partire da zero ma dovrebbe sempre avere una base relativamente solida su cui lavorare. Se effettivamente è questa la struttura alla base del modello di OpenAI, le implicazioni sono davvero incredibili, almeno per contesti dove le modifiche possibili sono relativamente poche e facilmente definibili. Non so se si potrebbe parlare davvero di intelligenza, ma ci si avvicinerebbe molto. Voi che ne pensate?

Quizzino della domenica: Punti a coppie

767 – parità

Prendete una retta orientata e due punti su di essa; etichettate il punto di sinistra 0 e quello di destra 1, ottenendo una configurazione (0, 1). Da questa configurazione le mosse che avete a disposizione sono due. La prima mosse aggiunge due punti in modo che tra di loro non si trovi nessun punto etichettato: i due punti possono essere etichettati (0, 0) oppure (1, 1). La seconda mossa elimina due punti consecutivi (cioè senza nessun altro punto etichettato in mezzo), sempre che abbiano la stessa etichetta (0, 0) oppure (1, 1). È possibile arrivare a ottenere una configurazione (1, 0)?

la retta con alcuni punti
(trovate un aiutino sul mio sito, alla pagina https://xmau.com/quizzini/p767.html; la risposta verrà postata lì il prossimo mercoledì. Problema da Futility Closet.)

Unsong (libro)

copertinaCosa succede se quando la missione Apollo 8 sta arrivando sulla Luna sbatte contro la volta celeste, rompendola e trasformando il pianeta in un posto dove la kabbalah la fa da padrona e i GAFAM (che qui si chiamano Microprosopus, Gogmagog, Amalek, Countenance e Serpens) vendono i Nomi di Dio che fanno miracoli, mentre un Sottocomitato ONU verifica che nessuno li usi invano (cioè senza aver pagato il copyright)? Succede quello che leggerete in questo libro, nato dal blog di Alexander e poi rivisto per la versione in volume. Non è facile seguire tutti gli intrecci della storia, ed è ancora più difficile comprendere i giochi di parole: un’ottima conoscenza biblica e talmudica è sicuramente utile, e se proprio non ce la fate potete provare a chiedere aiuto sull’apposito subreddit. Altamente consigliato se volete passare un paio di mesi di piacevole – anche se a volte un po’ irritante – lettura.

(Scott Alexander, Unsong, autoprodotto 2024, pag. 652, € 19,23, ISBN 9798320962610 – come Affiliato Amazon, se acquistate il libro dal link qualche centesimo va a me)
Voto: 5/5

Quanto sono migliorati i computer!

Per pubblicizzare la crittografia RSA, o meglio per dimostrare quanto fosse difficile da decrittare, nel 1991 gli RSA Laboratories lanciarono una sfida, con alcuni numeri semiprimi (cioè prodotto di due primi) da fattorizzare. Il più piccolo, RSA-100 (quindi un numero di 100 cifre), fu decrittato in una dozzina di giorni, usando il computer MP1 MasPar che costava mezzo milione di dollari di allora (circa 1.250.000$ attuali). Quella fattorizzazoine non era comunque un problema, visto che era RSA-256 lo standard promosso all’epoca, John D. Cook ha provato a fattorizzarlo in queste settimane, con un minicomputer System 76 Meerkat, pagato 600$ nel 2022. Tempo necessario: 23 minuti.

Per i non esperti: il tempo di fattorizzazione non aumenta linearmente con la dimensione dei numeri, quindi anche questo miglioramento di un fattore più o meno 1000 non serve a molto per i numeri usati nei sistemi crittografici attuali. Inoltre per quanto ne so ci può essere stato anche un miglioramento nei programmi di fattorizzazione, anche se non così dirompente. Però l’aumento della potenza dei computer è davvero impressionante!

Odissea UPS

L’altra settimana sono stati spediti ad Anna due pacchi da due aziende diverse ma entrambi con UPS.

Il primo pacco arrivava dal Belgio: a un certo punto le è arrivato un messaggio dicendo che era stato consegnato a un pickup point abbastanza vicino a casa nostra, che faceva anche da money transfer hub. Sabato della scorsa settimana Anna e io abbiamo fatto due passi fino a lì, trovando chiuso il negozio alle 12:15 anche se l’orario di chiusura erano le 13. Il martedì mattina successivo passo di lì alle 9:15, dopo l’orario di apertura: ancora chiuso.

Comincio ad avere qualche dubbio, e scrivo a UPS chiedendo se fossero sicuri che quel negozio fosse ancora in esercizio. Mercoledì mattina mi rispondono dicendo “vi va bene se lo mandiamo a un altro pickup point?” al che dico “ok, confermo”. Giovedì mattina mi arriva un messaggio automatico che mi dice che il pacco è stato rifiutato e se ne ritornerà in Belgio. A questo punto mi attacco al telefono, dribblo il risponditore vocale e finalmente riusco a parlare con una persona in carne e ossa che mi conferma che il pacco è in partenza per il Belgio. Le dico “ma c’è tutto lo scambio di email” e le dico il codice che c’era nel titolo del thread. Lei entra, vede tutto, dice “Ah. Aspetti che chiamo il mio responsabile. Oops, è occupato”. Io avevo una call e le ho chiesto di richiamarmi dopo un’ora, cosa che ha in effetti fatto: la buona notizia è che non essendo ancora stato spedito il pacco l’avrebbero finalmente potuto mandare al secondo pickup point. Arriva il messaggio automatico “the package has been delivered”. Prendo e trullo trullo vado al bar che fa da pickup point. Mi chiedono le ultime quattro cifre della spedizione, gliele do, la barista va a controllare: nulla. A questo punto mi chiede se c’è un numero alternativo. Riprendo la mail, e in effetti c’era un altro numero: finalmente ho il mio pacco.

La storia del secondo pacco è molto più semplice. Arrivava da Esselunga (rectius, Esserbella); qui non è mai arrivata nessuna mail. Anna scrive al servizio clienti Esselunga e riceve una risposta tipo “ah, se non lo sa lei quando arriva come facciamo a saperlo noi?” Telefona piuttosto incazzata al servizio clienti Esselunga, e finalmente qualcuno di là scopre che il pacco era già da mo’ in giacenza, al solito pickup – quello buono, non il primo.

Un pacco può essere stato sfortunato, ma due cominciano a essere una prova. Non è che UPS ha qualche piccolo problema di gestione?

La Funzione 91 di McCarthy

No, il maccartismo non c’entra. Questo McCarthy (John) è l’informatico che ha realizzato il Lisp, oltre che essere un pioniere dell’intelligenza artificiale. La “Funzione 91” è una funzione ricorsiva definita sugli interi in questo modo:

$$ M(n) = \left\{\begin{matrix} n – 10, & \mbox{se }n > 100\mbox{ } \\ M(M(n+11)), & \mbox{se }n \le 100\mbox{ } \end{matrix}\right. $$

Notate come la ricorsione non sia semplice, come per esempio nel caso del fattoriale che possiamo definire come $n! = n \times (n-1)!$ (e naturalmente $0! = 1$, per avere un punto in cui termina la ricorsione). Qui invece dobbiamo applicare due volte la definizione della funzione.

Chiaramente se $ n \gt 100 $ non ci sono problemi a calcolare $M(n)$: basta togliere 10. Anche per $n = 100$ facciamo in fretta: $ M(100) = M(M(100+11)) = M(M(111)) = M(101) = 91$. Il bello arriva quando proviamo a calcolare il suo valore per i numeri minori di 100. Proviamo per esempio con $ n = 42$: preparatevi a un ottovolante.

M(42) = M(M(42+11)) = M(M(53))
      = M(M(M(64))) 
      = M(M(M(M(75))))
      = M(M(M(M(M(86)))))
      = M(M(M(M(M(M(97))))))
      = M(M(M(M(M(M(M(108)))))))
      = M(M(M(M(M(M(98))))))
      = M(M(M(M(M(M(M(109)))))))
      = M(M(M(M(M(M(99))))))
      = M(M(M(M(M(M(M(110)))))))
      = M(M(M(M(M(M(100))))))
      = M(M(M(M(M(91)))))) (l'abbiamo visto sopra...)
      = M(M(M(M(M(M(102))))))
      = M(M(M(M(M(92))))))
      = M(M(M(M(M(M(103))))))
      = M(M(M(M(M(93))))))
      = M(M(M(M(M(M(104))))))
      = M(M(M(M(M(94))))))
      = M(M(M(M(M(M(105))))))
      = M(M(M(M(M(95))))))
      = M(M(M(M(M(M(106))))))
      = M(M(M(M(M(96))))))
      = M(M(M(M(M(M(107))))))
      = M(M(M(M(M(97))))))
      = M(M(M(M(M(M(108))))))

Toh. Avevamo già trovato $M(M(M(M(M(M(M(108)))))))$ con un livello di parentesi in più. Saltando un po’ di passaggi continuiamo con

M(42) =
      ...
      = M(M(M(M(M(M(M(108))))))) 
      ...
      = M(M(M(M(M(M(108))))))
      ...
      = M(M(M(M(M(108)))))
      ...
      = M(M(M(M(108))))
      ...
      = M(M(M(108)))
      ...
      = M(M(108))
      ...
      = M(98)
      = M(M(109))
      = M(99)
      = M(M(110))
      = M(100)
      = M(M(111))
      = M(101)
      = 91

È facile dimostrare per induzione (partendo dalla undicina $90 ≤ n \le 101$ e scendendo man mano di 11 in 11) che applicare $M$ a un qualunque numero intero minore di 100 porta a 91 (capito il perché del suo nome?). In pratica, la nostra funzione se ne sta piatta da meno infinito a 101, e poi diventa lineare. Strana, no?

Aggiungo solo che la funzione è usata come test per verificare i programmi automatici di verifica del software, proprio per la sua struttura così strana.

referendum o raccolta dati?

quesito referendario Sull’istanza Mastodon di poliversity.it ho visto che sul sito del ministero della Giustizia ci sono due raccolte firme per referendum: Abolizione pluricandidature legge elettorale per Camera e Senato: ogni candidato in un solo collegio uninominale o plurinominale e Abrogazione del voto congiunto tra candidati e liste plurinominali legge elettorale per Camera e Senato. Tutto bellissimo e almeno per me condisibile. Ma…

La raccolta firme è partita il 18 settembre e deve per legge terminare il 30 settembre. Mentre sto scrivendo (alle 19 del 22 settembre) le due proposte avevano rispettivamente 198 e 203 firme su mezzo milione. I quesiti sono stati raccolti da un’Associazione per la Rappresentanza Voto LibEguale che non ho mai sentito nominare. E soprattutto, leggendo l’informativa privacy sul sito del ministero, ho scoperto che i miei dati personali «saranno, inoltre, comunicati ai seguenti Titolati autonomi del trattamento: […] Comitati Promotori: ai sensi dell’art. 7 della legge n. 352 del 1970, sono titolari autonomi del trattamento dei dati personali dei sottoscrittori per le finalità di esercizio di funzioni pubbliche costituzionalmente rilevanti e garantite».

Ve la prendete con me se non firmo?