Non solo deep learning

11 March 2019

Non solo deep learning: giochi a premi, album di figurine, trielli e marketing virale

di Fabrizio Riguzzi (Vice-presidente AIxIA)

L’intelligenza artificiale sta ricevendo una grande attenzione ultimamente grazie agli importanti risultati che ha ottenuto. Molti di questi risultati si devono al deep learning che ha rivoluzionato il campo della visione artificiale e del riconoscimento di pattern in generale (in video, audio e testo). Ma l’intelligenza artificiale non è solo deep learning: il ragionamento simbolico è altrettanto importante, anche se non ha ancora ottenuto titoli sui giornali come il deep learning. Grazie al ragionamento simbolico è possibile costruire sistemi di supporto alle decisioni in grado di spiegare il proprio output in una forma comprensibile agli esseri umani, a differenza dei sistemi subsimbolici come le reti neurali per le quali costruire spiegazioni è più difficile. Inoltre in molte situazione è utile poter ottenere conclusioni utilizzando metodi di ragionamento basati su solide teorie come la logica e la teoria della probabilità.
Recentemente si sono diffusi linguaggi che appunto combinano logica e probabilità e consentono di ragionare in maniera deduttiva e induttiva anche in presenza di incertezza.
Questi linguaggi ricadono nel campo della programmazione probabilistica che permette di scrivere programmi che compiono ragionamento probabilistico.
Con questi linguaggi siamo in grado di risolvere un ampio spettro di problemi che richiedono la costruzione di modelli dettagliati del dominio e il trattamento dell’incertezza.
Per dare un’idea dei problemi che possono essere trattati vi presento tre giochi e un problema concreto.

 Il primo gioco è il famoso problema di Monty Hall: nel gioco a premi televisivo americano Let’s make a deal, il presentatore Monty Hall offriva al concorrente la scelta di una tra tre porte. Dietro una sola delle porte c’era un premio, dietro le altre due una capra. Il concorrente sceglie la porta ma non la apre. A questo punto Monty Hall apre una delle porte non scelta dal concorrente e dietro cui non c’è il premio. Poi chiede al concorrente se vuole tenere la porta scelta oppure cambiarla con l’altra ancora chiusa.

Il problema è: cosa conviene al concorrente? Tenere la sua scelta o cambiare?

Sembrerebbe che cambiare non porti a nessun vantaggio: la probabilità di vincere sembra essere di 1/2 sia tenendo la scelta che cambiando. In realtà conviene cambiare perchè la probabilità di vincere cresce da 1/3 a 2/3. Questo perchè se si tiene la scelta, si vince solo se il premio era dietro la porta scelta all’inizio, quindi con probabilità di 1/3. Se si cambia invece si vince se il premio è dietro una delle due porte non scelte all’inizio, quindi con probabilità di 2/3.
Quando Marilyn vos Savant ha pubblicato questo puzzle e la sua soluzione sulla sua rubrica Ask Marylin nella rivista americana Parade, ha ricevuto lettere da più di 10.000 lettori, di cui quasi 1.000 con un dottorato, per la maggior parte dei quali la soluzione corretta era sbagliata.
Con la programmazione probabilistica è possibile risolvere questo puzzle scrivendo un breve programma che calcola la probabilità dei due casi. Un esempio di un tale programma si trova a http://cplint.eu/e/monty.swinb
Questa è una applicazione web sviluppata presso l’Università di Ferrara che consente di scrivere ed eseguire programmi probabilistici (programmi logici probabilistici in particolare) online.

Un altro problema che può essere risolto con la programmazione probabilistica è quello di calcolare quante bustine di figurine devo comperare in media per completare un album. In altre parole, supponendo che una bustina di figurine ne contenga un numero P e che l’album abbia posizioni per N figurine, quante bustine mi aspetto di dover comprare per completare l’album? Per esempio, se l’album contiene 50 figurine e ogni bustina ne contiene 4, in media devo comperare circa 55 bustine per completarlo. Il problema può essere risolto facilmente con la programmazione probabilistica, ad esempio come in http://cplint.eu/e/coupon.swinb
Se un genitore calcolasse il numero di bustine necessarie a finire la collezione quando il proprio figlio gli chiede di iniziarla, forse ci sarebbero molti bambini scontenti.

Un problema più difficile è quello di stabilire la strategia migliore in un triello: un triello è un duello alla pistola tra tre contendenti. Nei duelli con la pistola i contendenti prendono posizione e poi sparano a turno. In un triello ci sono tre contendenti x, y e z che ugualmente sparano a turno. Supponendo che l’ordine con cui sparano sia x, y e poi z, che sia il turno di x e che x abbia probabilità di 1/3 di colpire l’obiettivo verso cui mira, y abbia probabilità di colpire di 2/3 e z di 1, cosa conviene fare a x? Dove gli conviene mirare?
Sembrerebbe che gli convenga mirare verso il triellante con la migliore mira, in modo da eliminarlo prima possibile, cioè gli convenga mirare verso z. In realtà a x conviene mirare verso il cielo, ovvero sprecare il colpo. Questo risultato sorprendente lo si può comprendere considerando le possibili evoluzioni del triello. Si può delegare questo compito complesso al computer come in http://cplint.eu/e/truel.swinb
Con questo programma si vede che la probabilità di x di sopravvivere è leggermente più alta se spara in aria.

La programmazione probabilistica però non serve solo a risolvere puzzle.

Un esempio di applicazione concreta è il marketing virale: supponete che un’azienda voglia pubblicizzare un nuovo prodotto sfruttando la viralità in una rete sociale. I clienti sono connessi in una rete sociale le cui connessioni sono conosciute all’azienda, dove una connessione rappresenta una relazione di amicizia o fiducia tra due clienti. L’azienda ha deciso di adottare una strategia di marketing che prevede di fornire il prodotto gratuitamente a un certo numero di clienti, nella speranza che questi influenzino gli altri clienti a loro collegati e li inducano a comprare il prodotto. Il problema per l’azienda è quello di scegliere i clienti a cui regalare il prodotto in modo da massimizzare l’utile, sfruttando la viralità. Il problema richiede di calcolare la probabilità che i clienti a cui non si regala il prodotto lo comperino data l’azione di marketing, supponendo che ogni cliente abbia una probabilità prefissata di influenzare i propri contatti. Un esempio di questo calcolo lo trovate a http://cplint.eu/e/viral.swinb

Questi sono alcuni esempi di uso della programmazione probabilistica in cui il programma è scritto dall’utente. In realtà c’è molto lavoro su tecniche per apprendere questi programmi dai dati, in modo da liberare l’utente dal compito, spesso complesso, di scrivere il programma e in modo da avere programmi che descrivano in maniera il più possibile accurata il dominio di interesse. In generale queste tecniche funzionano bene quando i dati sono in larga parte discreti. Per dati continui le reti neurali sono invece solitamente particolarmente adatte.
L’obiettivo della ricerca adesso è quello di combinare le tecniche simboliche con quelle subsimboliche per avere i vantaggi di entrambe.