Archivi autore: .mau.

Informazioni su .mau.

matematto non praticante

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?

Come far sbagliare (a volte) un LLM

Premessa: questo post è più lungo dei miei soliti. Spero che però lo apprezziate comunque, o almeno riconoscete il lavoro che ci ho messo.

Lunedì scorso vi avevo parlato di un post di Alberto Romero che spiegava perché gli LLM sono probabilmente tarati per avere allucinazioni, cioè scrivere cose che non stanno né in cielo né in terra. Ma nel post Romero accennava anche a un altro problema: il loro comportamento quando si trovano in un caso di “out of distribution” (OOD). Quello che succede è che se il materiale di addestramento e quello di test appartengono a distribuzioni diverse – cosa differente dall’avere dati di scarsa qualità oppure obiettivi di addestramento errati – il modello non riesce ad estrapolare una risposta corretta.

L’esempio fatto da Romero è quello del problema del vecchio indovinello del chirurgo. La storia è questa: un uomo e suo figlio hanno un incidente d’auto. L’uomo muore sul colpo, il figlio è in gravissime condizioni e viene portato all’ospedale, dove il chirurgo lo vede e grida “No, non ce la faccio ad operarlo: è mio figlio!” Come è possibile? Nell’improbabile caso che non conosciate l’indovinello, fermatevi un attimo a pensarci su, altrimenti proseguite la lettura.

Al giorno d’oggi una risposta possibile è “il ragazzo è figlio di una coppia gay”. Cinquant’anni fa la risposta era molto più banalmente “il chirurgo è la madre del ragazzo”. Fin qui nulla di particolare: l’indovinello è così comune che un qualunque chatbot darà la risposta corretta. Ma cosa succede se gli si dà in pasto una versione leggermente diversa, che comincia con “Una donna e suo figlio” e poi continua allo stesso modo? Chiaramente un umano non ha problemi a rispondere “beh, il chirurgo è il padre del ragazzo”. Ma un chatbot si impalla, perché questa versione non c’era nel materiale di addestramento e quindi esso parte per la tangente… O almeno partiva. Questo esempio particolare è infatti noto in letteratura, e pertanto mi sa che gli LLM sappiano rispondere.

Ma che succede provando a modificare altri indovinelli di questo tipo? Ho pensato che sarebbe stato simpatico fare una prova pratica con alcuni chatbot e alcuni indovinelli modificati opportunamente. Ho così fatto alcune domande a ChatGPT, DeepSeek, Claude, Le Chat e Copilot: i link sono il testo delle sessioni che ho eseguito.

Il primo problema sarebbe un classico: Un mattone pesa 1kg meno mezzo mattone. Quanto pesa il mattone?. La forma classica dice che un mattone pesa 1kg più mezzo mattone: tutti e cinque i chatbot hanno pensato a quella forma, e quindi risposto “il mattone pesa due chili”. Questo è sicuramente un caso di OOD alla massima potenza: il token corrispondente a “meno” nella frase è stato del tutto ignorato.

Bisogna però dare atto che altre modifiche non danno problemi di risoluzione. Chiedendo Due mattoni pesano 1kg più mezzo mattone. Quanto pesano i mattoni?, tutti i chatbot si accorgono che la struttura è quella del problema classico, semplicemente con “due mattoni” al posto di “un mattone”, e quindi danno la risposta corretta “due mattoni pesano 4/3 kg (ovvero circa 1,33 kg).”.

Lo stesso capita con il terzo problema: Una bottiglia con il tappo costa 1.10 €. La bottiglia costa 1 € meno del tappo. Quanto costano il tappo e la bottiglia separatamente?. Qui a posteriori l’errore è stato mio: probabilmente nel materiale di addestramento ci sono sia il caso “la bottiglia costa un euro più del tappo” e “il tappo costa un euro meno della bottiglia”, e i chatbot hanno usato la seconda forma. Certo, dal punto di vista di un umano la risposta non ha senso, perché si ricava che il tappo costa 1.05 € e la bottiglia 0.05 €: ma i chatbot non hanno idea del costo relativo di tappi e bottiglie, per loro sono solo due token, e quindi la risposta è corretta.

L’esempio più interessante è il quarto problema: Un pastore ha smarrito cinque pecore. Va alla loro ricerca e quando le trova scopre che ciascuna pecora si trova alla stessa distanza da ciascuna delle altre. Come è possibile?. In questo caso, il problema classico vede quattro pecore e non cinque, e queste si trovano ai vertici di un tetraedro regolare. Se vi chiedete come sia possibile, basta che ci sia un picco molto ripido dove è posizionata una delle pecore. E con cinque pecore? Ecco le risposte:

  • ChatGPT: Nello spazio tridimensionale in cui viviamo, non si può avere 5 punti tutti equidistanti tra loro (al massimo 4, che formano i vertici di un tetraedro). Quindi la soluzione del paradosso è che le pecore “si trovano” disposte in una figura geometrica possibile solo in uno spazio a 4 dimensioni.
  • DeepSeek: La soluzione è che le pecore sono tutte nello stesso punto.
  • Claude: La soluzione è che le cinque pecore si trovano disposte ai vertici di una piramide triangolare (tetraedro) nello spazio tridimensionale. 4 pecore si trovano ai vertici di un tetraedro regolare (una piramide con base triangolare) la quinta pecora si trova al centro del tetraedro.
  • Le Chat: La situazione è possibile se le cinque pecore si trovano ai vertici di un pentagono regolare. In un pentagono regolare, ogni vertice (e quindi ogni pecora) è alla stessa distanza dagli altri due vertici adiacenti. Questo significa che ciascuna pecora è equidistante dalle altre due pecore più vicine, soddisfacendo la condizione del problema.
  • Copilot: Quindi… la risposta è: Le pecore sono tutte la stessa pecora! Il pastore ha trovato una sola pecora e ha immaginato che fosse in cinque posti contemporaneamente, oppure… Le pecore sono tutte nello stesso punto — cioè raggruppate insieme, quindi la distanza tra ciascuna è zero.

Ho pensato un po’ a come siano potute arrivare quelle risposte. ChatGPT ha trovato la generalizzazione dimensionale del problema, e questo non me lo aspettavo, anche perché se ci fosse stato qualcosa nel materiale di addestramento avrebbe parlato di ipertetraedro, 5-cell oppure 4-simplesso che sono i nomi usati in letteratura. DeepSeek ha fatto tutto un discorso con risposte errate accorgendosi dell’errore, una tecnica abbastanza comune in questi casi dove l’output viene aggiunto all’input per avere più materiale su cui lavorare per ottenere un risultato migliore. Claude e Le Chat mi hanno invece deluso: il primo ha inserito la quinta pecora in un punto ricavato per simmetria ma che non rispetta le ipotesi, il secondo ha tirato fuori un pentagono regolare che non ha proprio senso. Infine Copilot, come del resto in tutta la sessione, ha scelto un approccio giocoso. A parte la soluzione matematicamente corretta ma impossibile nel mondo reale – ma ripeto, che ne sanno questi modelli del mondo, o se preferite che rappresentazione possono avere? – se ne è uscito con l’idea che fosse il pastore ad avere le allucinazioni e contare cinque pecore dove ce n’era una sola. Niente male!

L’ultimo problema che ho dato è quello della fanciulla che deve scegliere tra due sassolini che il perfido e laido pretendente prende dal terreno: se pesca quello bianco le andrà bene, mentre se pesca quello nero verrà impalmata. La giovane si accorge che il pretendente ha preso due sassolini neri: come fa a rovesciare la situazione a suo favore? Anche questo problema è ben noto in letteratura, ma stavolta non vi dico la soluzione. Ai chatbot ho dato però una versione (in inglese, perché ero troppo pigro per cercare quella in italiano) dove il perfido pretendente aveva messo due sassolini bianchi, e quindi la giovane era in una bote de fero, come si suol dire. Peccato che tutti i chatbot hanno pedissequamente scritto la soluzione standard, che in questo caso sarebbe invece esiziale… Anche in questo caso la cosa non mi stupisce. Il prompt che avevo dato era molto lungo, e quindi le risposte scopiazzavano quello che avevano trovato in addestramento che era “praticamente” uguale…

Conclusione: dovrebbe essere ovvio che gli LLM non solo non “pensano”, ma non riescono nemmeno a riconoscere le piccole differenze rispetto a quello che hanno visto. Non possiamo insomma parlare di capacità di generalizzazione, o meglio i loro tentativi di generalizzare possono portare solo ad allucinazioni, come la costruzione di “fonti” assolutamente inventate. Magari in futuro proverò qualche altro trucchetto di questo tipo, tipo chiedere loro “Se da una scacchiera tolgo due caselle d’angolo, è possibile ricoprirla con 31 tessere di domino 1×2?” Il problema classico toglie due caselle agli angoli opposti, e non è risolubile. Ma qua le due caselle potrebbero essere sullo stesso lato e il ricoprimento sarebbe possibile. In letteratura il problema modificato è stato trattato, ma in genere si trova il risultato più forte in cui vengono tolte due caselle di colore opposto ma in posizione qualunque. Chissà se qualche LLM riuscirà ad accorgersi della cosa!

PS: io ho conosciuto mia moglie perché era la docente in un’aula per la formazione aziendale. Una delle esercitazioni era quella dei due sassolini, al che ho detto “non posso farla, perché conosco l’indovinello”: e poi le cose sono andate avanti…

Quizzino della domenica: area di un triangolo

766 – geometria

Il matematico russo Vladimir Arnol’d disse che questo problema non aveva dato nessun problema (scusate il gioco di parole) agli studenti americani, mentre un gruppo di studenti moscoviti non riuscì a trovare la soluzione. Nel triangolo rettangolo in figura, l’ipotenusa AB è lunga 10 cm, mentre l’altezza CH è 6 cm. Qual è l’area del triangolo?

il triangolo del problema
(trovate un aiutino sul mio sito, alla pagina https://xmau.com/quizzini/p766.html; la risposta verrà postata lì il prossimo mercoledì. Problema da MathWorld.)

Intelligenze aliene (ebook)

copertina Non garantisco sulla correttezza di quanto Vetere scrive riguardo alla parte tecnica di addestramento degli LLM. A me pare di sì, ma un mio amico era molto perplesso. Però non è quello il punto fondamentale di questo libro, bensì il vedere cosa sta dietro a questi modelli da un punto di vista filosofico. L’appunto che gli faccio è che almeno nella prima metà il linguaggio sembra spesso da iniziati: se voleva parlare ai filosofi probabilmente andava bene, ma noi poveri laureati in materie scientifiche facciamo una faticaccia. Come dicevo, però, il risultato finale merita, anche perché non è così comune trovare approcci di questo tipo.

Guido Vetere, Intelligenze aliene : Linguaggio e vita degli automi, Luca Sossella 2025, pag. 192, € 9,49, ISBN 9791259980984 – come Affiliato Amazon, se acquistate il libro dal link qualche centesimo va a me
Voto: 4/5