Archivio mensile:dicembre 2019

Tutte le immagini che possono esistere

In questo articolo vorrei fare un piccolo ragionamento che ritengo molto interessante. Esso  parte da una domanda: quante sono le immagini che si possono rappresentare? Ovvero, esiste una cifra che esprima il numero massimo delle immagini che possono esistere?

Ad un primo momento, sembra di trovarsi di fronte a uno di quei dilemmi a cui è palesemente impossibile rispondere, come “quanti sono i granelli di sabbia della Terra?” o “quante sono le gocce d’acqua nel mare?”. Sì, esiste un numero finito di granelli di sabbia o di gocce d’acqua presenti sul nostro pianeta, ma è praticamente impossibile averne il numero esatto, contarle con precisa sicurezza. Se ne può fare una stima, un’approssimazione.

E invece per quanto riguarda le immagini, sappiamo perfettamente il loro numero. E’ una cifra calcolabile, ed è quanto andremo a fare adesso.

Si parte ovviamente dal presupposto che ogni immagine è un insieme di punti, detti pixel, quindi più pixel ha un’immagine, più la sua risoluzione è alta. Se per esempio essa ha 1000 pixel in orizzontale e 1000 pixel in verticale, il numero totale dei pixel di quella immagine sarà di 1000×1000= 1 milione, abbreviato in 1 mega-pixel. Oggi i moderni smartphone sono dotati di fotocamere da più di 10 megapixel, con circa 3000 pixel per ogni lato.

 

Nella foto qui in alto, di appena 24×24 pixel, è rappresentato un pesce: i suoi contorni sono appena distinguibili. Se si volessero rappresentare i tratti di una persona servirebbe molto più spazio.

Per calcolare il numero di tutte le immagini che possono esistere, serve innanzitutto stabilire di quale risoluzione debbano essere tali immagini. Supponiamo 64×64 (4096 pixel), il minimo per distinguere un volto all’interno di una foto.

In secondo luogo ci occorre stabilire lo standard di colore. Le foto “normali”, quelle degli smartphone, sono a colori e ogni pixel è indicato da tre valori tra 0 e 255 corrispondenti rispettivamente ad una tonalità di rosso, di verde e di blu. Ogni pixel viene quindi rappresentato da tre cifre (es: 3,10,45). Questo standard di colore è denominato truecolor o 24bit.

Un’immagine in bianco e nero, invece, occupa molta meno informazione. Ogni pixel è indicato da una sola cifra, cosi chè il “peso” complessivo del file diminuisce di un terzo. Lo standard in bianco e nero è anche detto 8bit, o grayscale, e usa le tonalità di grigio per descrivere i colori.

Volendo, si può risparmiare ancora più spazio usando lo standard di colore a 1 bit, chiamato monochrome, cioè monocromatico (un solo colore). Tale formato registra ogni pixel come 0 o 1: se è 0 corrisponderà al bianco, se è 1 al nero. In questo modo si crea un’immagine molto meno chiara di una in bianco e nero, ma comunque capace ancora di rappresentare un oggetto.

Immagine 24bit

Immagine 8bit

Immagine 1bit

 

 

 

 

 

So già che il numero che andremo a calcolare sarà molto grande, quindi devo giocoforza peccare di taccagneria e scegliere il formato 1bit perchè lo si possa scrivere in questa pagina senza strafare.

Qual’è quindi il numero esatto delle immagini che possono esistere allo standard di 1bit e con una risoluzione di 64×64 pixel?

Si tratta di elevare i colori possibili dell’1bit (cioè 2) per i pixel dell’immagine (4096) . Il risultato è il seguente:

1 044 388 881 413 152 506 691 752 710 716 624 382 579 964 249 047 383 780 384 233 483 283 953 907 971 557 456 848 826 811 934 997 558 340 890 106 714 439 262 837 987 573 438 185 793 607 263 236 087 851 365 277 945 956 976 543 709 998 340 361 590 134 383 718 314 428 070 011 855 946 226 376 318 839 397 712 745 672 334 684 344 586 617 496 807 908 705 803 704 071 284 048 740 118 609 114 467 977 783 598 029 006 686 938 976 881 787 785 946 905 630 190 260 940 599 579 453 432 823 469 303 026 696 443 059 025 015 972 399 867 714 215 541 693 835 559 885 291 486 318 237 914 434 496 734 087 811 872 639 496 475 100 189 041 349 008 417 061 675 093 668 333 850 551 032 972 088 269 550 769 983 616 369 411 933 015 213 796 825 837 188 091 833 656 751 221 318 492 846 368 125 550 225 998 300 412 344 784 862 595 674 492 194 617 023 806 505 913 245 610 825 731 835 380 087 608 622 102 834 270 197 698 202 313 169 017 678 006 675 195 485 079 921 636 419 370 285 375 124 784 014 907 159 135 459 982 790 513 399 611 551 794 271 106 831 134 090 584 272 884 279 791 554 849 782 954 323 534 517 065 223 269 061 394 905 987 693 002 122 963 395 687 782 878 948 440 616 007 412 945 674 919 823 050 571 642 377 154 816 321 380 631 045 902 916 136 926 708 342 856 440 730 447 899 971 901 781 465 763 473 223 850 267 253 059 899 795 996 090 799 469 201 774 624 817 718 449 867 455 659 250 178 329 070 473 119 433 165 550 807 568 221 846 571 746 373 296 884 912 819 520 317 457 002 440 926 616 910 874 148 385 078 411 929 804 522 981 857 338 977 648 103 126 085 903 001 302 413 467 189 726 673 216 491 511 131 602 920 781 738 033 436 090 243 804 708 340 403 154 190 336

Naturalmente è un po’ lungo. Ma a me ha sorpreso, perchè in effetti si tratta di un numero finito, e in esso ci sono tutte le immagini possibili e immaginabili a quella risoluzione. Considerando che in una foto 64×64 si può riconoscere un oggetto, per esempio una faccia, in questo numero ci sono tutti i volti delle persone che conoscete e che non conoscete, quelle che ci furono in passato e che ci saranno in futuro. C’è anche una foto della vostra faccia in ogni posizione immaginabile, in ogni espressione possibile, in ogni angolazione rappresentabile. C’è perfino una foto di Trump che bacia Obama. Qualsiasi cosa. E’ un numero che contempla ogni possibilità.

 

 

Generare testi con l’intelligenza artificiale: un tutorial su GPT-2

Nel febbraio 2019 OpenAI, l’organizzazione fondata da Elon Musk dedicata allo studio dell’intelligenza artificiale, rilasciava il modello GPT-2 (Generative Pretrained Transformer-2). Tramite un complesso sistema di reti neurali, dopo essere stato “allenato” con milioni e milioni di testi scritti, l’algoritmo era capace di generare testi leggibili sia in maniera condizionale (cioè dandogli una traccia, un suggerimento sull’argomento di cui deve scrivere), sia non-condizionale (ovvero generando un testo a caso).

Del modello furono pubblicate 4 versioni: una small, conosciuta come 117M, una medium (345M), un modello large (774M) e infine il modello XL, detto anche 1.5B o 1558M. Questi acronimi corrispondono al numero di testi con cui l’algoritmo è stato allenato: si va dai 117 milioni del modello small fino ai 1.5 miliardi dell’ XL.

In particolare, quest’ultimo modello, si diceva, non sarebbe stato rilasciato perchè considerato troppo potente e possibilmente usato in modi non leciti (vedi fake news,..). Appena un mese fa invece, il 9 novembre scorso, OpenAI lo ha reso pubblico, ed in pochi giorni erano disponibili dei demo per testare la potenza del 1.5B.

Per provarlo voi stessi, potete visitare il sito web Talk to transformer, creato dall’ingegnere canadese Adam King. Vi viene chiesto di inserire una frase o uno spunto per la generazione del testo e l’algoritmo farà da sè. Se siete indecisi su cosa chiedere, potete scegliere tra 9 suggerimenti (ricette di cucina, viaggio spaziale, html e perfino Il Signore degli Anelli).

In via generale, funziona solo in lingua inglese. Se provate a chiedergli qualcosa in italiano, molto probabilmente non capirà, per la semplice ragione che è stato allenato solo su testi anglosassoni. Inoltre, risponde alle domande ed è capace di parlare più o meno di qualsiasi cosa: da un argomento di fisica fino a tematiche riguardanti la società.

Gli ho chiesto per esempio chi fosse Napoleone Bonaparte. Ecco come ha risposto:

In pratica, apparte il suggerimento che ho dato (parlare di Napoleone), tutto il resto è stato scritto dall’intelligenza artificiale e risulta sintatticamente leggibile. L’unico problema è che alcuni dei fatti raccontati non sono veritieri o non hanno senso: ad esempio, viene menzionato il fatto che Napoleone sia nato a Boulogne, ma in realtà è nato ad Ajaccio.

Il testo generato si ferma a 150 parole: tale è il limite permesso dal sito web. E’ una limitazione comprensibile dal momento che per far funzionare un modello GPT-2 serve una scheda video con almeno 11 GB di RAM.

Tuttavia, Google offre Tesla K80 e T4 nel suo ambiente di sviluppo Colab, una piattaforma dove chiunque può testare il proprio codice e usufruire gratuitamente di accelerazione GPU.

Proprio per questo, è stato creato un notebook jupiter pre-compilato dove testare il modello GPT-2:

https://colab.research.google.com/github/ilopezfr/gpt-2/blob/master/gpt-2-playground_.ipynb#scrollTo=tI-HVDbQS9dF

Usarlo non è difficile. Il primo passo è quello di cliccare sul pulsante play, nella prima cella di codice: (rimuovendo le cellette prima dei modelli 117M e 345M).

Google chiede l’autorizzazione prima di procedere. Una volta che l’installazione inizia, ci vorrà qualche minuto prima che si concluda.

Una volta fatto, siamo pronti a generare i primi testi. Basterà andare un po’ più’ giù fino al prossimo paragrafo: Unconditional sample generation.

Anche qui si tratta esclusivamente si cliccare il pulsante play. Eventualmente se lo desiderate potete cambiare le impostazioni per la generazione del testo, aggiungendo rimuovendo o modificando le flag indicate nella descrizione.

Con –model_name è indicato il tipo di modello da utilizzare (è preimpostato l’XL da 1558M). –nsamples indica invece il numero di testi da generare, mentre top_k e temperature indicano dei valori relativi alla diversità e casualità del testo.

Clicco anche io play. Aspetto qualche minuto, ed ecco che dopo un elenco interminabile di comandi e variabili, appaiono i miei primi 2 testi generati.

Il primo inizia con quello che sembra un articolo di giornale riguardo la presentazione di un libro, salvo che poi il testo generato collassa su se stesso e ripete per dieci volte la stessa frase.

Il secondo testo invece risulta più coerente. Sembrerebbe parlare di argomenti governativi statunitensi: non si tratta di un articolo di giornale ma piuttosto di un report, una specie di pamplet ministeriale. Anche questo testo, comunque, presenta dei “sintomi” di collassamento, in quanto dopo le prime due righe alterna frasi che iniziano tutte allo stesso modo, anche se si concludono diversamente.

In generale, dopo aver provato questo modello (non-condizionale) per diversi giorni, posso ben dire che esso produce il 70% delle volte manuali di istruzioni o articoli di giornale riguardanti notizie fantasiose o semi-inventate, mentre un 10% produce dialoghi, e un ulteriore 10% testi di saggistica su vari argomenti.

Sicuramente più coerente è però la generazione di testi condizionati. Nel pre-compilato di Colab, si può trovare subito dopo quella non-condizionata. In particolare ci riferiamo al paragrafo “text-completion”.

Anche questa volta, bisogna cliccare play per avviare la cella di codice, dopo di chè il modello chiede la traccia da suggerire:

Inserisco la domanda, premo il tasto invio della tastiera, e aspetto che i testi compaiano.

 

Il testo numero 1 sembra un saggio storico. E’ come se l’autore (l’intelligenza artificiale) si chiedesse chi fosse veramente Napoleone. Se fosse un genio, se avesse le capacità di diventare imperatore. E segue tutta un’argomentazione degna di nota.

Il testo numero 2 invece, pur risultando sintatticamente valido, tende a perdere di senso e racconta una storia romanzata della vita del generale francese.

Il modello condizionale di GPT-2 può essere utilizzato con qualunque input: potete chiedergli della Seconda Guerra Mondiale, come pure della Fusione nucleare, e così via. Se non centra l’argomento al primo tentativo, lo fa solitamente al secondo, e questo fa di GPT-2 un valido strumento di scrittura automatica di articoli e testi di vario tipo, ovviamente da controllare, perchè i dati prodotti tendono a non essere veritieri.

 

 

 

 

 

Qual’è la probabilità che un alpinista muoia in alta quota durante la sua carriera?

Lo scorso anno, la morte dell’alpinista Daniele Nardi ha avvicinato il grande pubblico al mondo dell’alpinismo d’alta quota, una disciplina nota per la sua bellezza ma anche per l’elevata pericolosità a cui i suoi sottopone i suoi seguaci. Quando si parla di alta quota si fa quasi sempre riferimento all’Himalaya e agli Ottomila, ovvero le montagne le cui cime svettano oltre gli otto chilometri sul livello del mare. Basti pensare che la montagna più alta che non si trovi in Asia è l’Aconcagua, che occupa “solo” la 136sima posizione.

In particolare per ognuno dei quattordici Ottomila, esiste un elenco più o meno dettagliato di coloro che hanno tentato l’ascesa, e anche un ulteriore elenco di chi, purtroppo, sulla montagna ci è rimasto. Con una semplice divisione è quindi possibile calcolare il rapporto vittime/ascese di ogni singolo Ottomila,e quindi avere una percentuale di rischio.

Annapurna 31.9%
K2 26.5%
Nanga Parbat 20.3%
Dhaulagiri I 15.4%
Kangchenjunga 14.1%
Manaslu 9.8%
Gasherbrum I 8.7%
Makalu 8.6%
Shishapangma 8.3%
Broad Peak 5.2%
Everest 3.9%
Lhotse 2.8%
Gasherbrum II 2.3%
Cho Oyu 1.4%
Fonte dati: Wikipedia – calcolo effettuato su dati 1950-2012[link]

Volendo prendere come riferimento la tabella, Daniele Nardi aveva il 20.3% di probabilità di rimanere sulla montagna. Tale è il death rate del Nanga Parbat, soprannominata la “Montagna assassina”.

Ma, facendo una piccola ricerca sulla storia di questo alpinista, si scopre che quello del 2019 non è stato il suo unico tentativo di ascesa sulla montagna: ce ne erano stati quattro, e precisamente nel 2011-12, 2012-13, 2014-15, 2015-16, con una “pausa” di due anni, dove si era dedicato alla spedizione Trans Limes sul Saltoro.

Qual’era quindi la reale probabilità di morte a cui Nardi andava incontro scalando per la quinta volta il Nanga Parbat? Quel 20% di cui parlano le statistiche si riferisce ad un singolo tentativo, ma quando si fanno più tentativi c’è sicuramente una probabilità più alta di rischio. Se si lancia una moneta per una volta, la probabilità che non esca testa (o croce) è esattamente del 50%, ma se la si lancia più volte questa probabilità si abbassa.

Nel caso di Nardi, è come se la moneta da lanciare avesse quattro facce: tre uguali di colore bianco, che rappresentano l’eventualità favorevole, e una di colore nero, che rappresenta invece quella sfavorevole.

Ad un singolo, primo tentativo, la probabilità di ritornare sano e salvo è dell’80%. Ma cosa succede al secondo tentativo? La probabilità rimane la stessa, o invece cambia?

Vediamolo subito. Si tratta di capire quante chances ci sono di che escano due facce bianche di seguito. E cioè bisogna elevare la probabilità precedente (80%) al quadrato, ovvero (4/5)^2., che è uguale a 9/16, tradotto in percentuale 64% (0.64).

Le probabilità di salvarsi al secondo tentativo di ascesa del Nanga Parbat, erano già scese dall’ 80% al 64% quando nell’inverno del 2014 Nardi di recò per la seconda volta sulla montagna.

Calcoliamo a quanto corrispondeva tale probabilità al quinto tentativo di ascesa. Si tratta di elevare 4/5 alla quinta, quindi 1024/3125, ovvero 0.327 (33%). C’erano quindi ben 67 probabilità su 100 che Nardi rimanesse su quella montagna, una percentuale alta, non paragonabile nemmeno al death rate dell’Ottomila più pericoloso, l’Annapurna.

Volendo proseguire con il calcolo, il rischio di Nardi avrebbe sfiorato il 100% dopo la ventesima ascesa (99,9%) pur senza arrivare mai a raggiungere un valore discreto pari a 100, in quanto parliamo pur sempre di un ambito probabilistico.

Ma ampliando il ragionamento e comprendendo tutti gli alpinisti degli Ottomila, facciamo la somma del death rate di ogni singola montagna dividendola per il numero delle stesse, cioè 14. In questo modo si può calcolarne il valore medio: 11,3%.

C’è quindi circa una probabilità sfavorevole su nove per ogni singola ascesa di un gigante della Terra. Ovviamente si tratta di un valore molto meno preciso rispetto a quello di ogni singola montagna, ma è utile per calcolare la percentuale di rischio a cui gli alpinisti d’alta quota vanno incontro durante la loro carriera, perché usano tentare la scalata di più montagne e non concentrarsi sempre su una sola.

Ebbene, in questo caso, un alpinista avrebbe il 59% di probabilità favorevole al quinto tentativo (11/100 elevato alla quinta), a differenza del 89% del primo. Mentre tale probabilità si abbasserebbe al 34% al decimo tentativo, fino a toccare il 10% al ventunesimo e lo zero ideale al 44esimo. Tuttavia sappiamo che ci sono alpinisti che hanno più di quaranta spedizioni all’attivo e che sono (per fortuna) ancora vivi, e risulta quindi evidente che tale probabilità sia una approssimazione del valore reale di rischio, il quale risponde sia alla scelta delle montagne da scalare sia in parte anche ad ogni singolo alpinista.