Cose che un computer apprende (quasi) da solo – per curiosi ecc. (2)
4 min read
Per darvi un primo esempio di come può funzionare un sistema che si basa su un apprendimento automatico, userò, rielaborandolo, quanto ricordo di avere letto negli anni ‘80 su una rivista di informatica – che citava il gioco del tris.
Il gioco del tris, per quei pochi di voi che non lo conoscono, è un gioco “uno contro uno” in uno schema di nove caselle. Uno dei due giocatori userà una X e l’altro userà una O, mettendo un segno a turno nelle caselle. Vince chi riesce per primo a piazzare tre simboli uguali lungo una riga orizzontale, verticale o diagonale.
E’ un gioco dalle mosse limitate in cui, una volta appresi i rudimenti, non si può perdere a meno di errori (più o meno, direi, come a Forza Quattro).
Se doveste stabilire una tecnica di gioco (da usare voi mentalmente, o per farla diventare una App) quello che dovreste fare è dire che, quando tocca a voi dovete:
- mettere il vostro simbolo in una posizione che vi fa vincere (terza posizione in fila, date due già giocate, allineate)
- se non è possibile, mettere il vostro simbolo in una posizione che non vi fa perdere al turno successivo (mettere il pezzo in modo da impedire al vostro avversario al turno successivo di creare un tris)
- se anche questo non è possibile mettere il pezzo in un punto a caso, preferendo una posizione che vi dia un allineamento a due elementi.
Facile, no? Il gioco del resto è davvero semplice e minimale.
Ma è possibile fare in modo che il computer (ovvero, un programma in grado di usare un sistema generico) possa “imparare” questo giochino da solo, fino a diventare virtualmente imbattibile?
Certo!
Diamo a questo programma generico solo queste due indicazioni:
- quanto tocca a te, scegli A CASO una delle caselle libere per mettere il simbolo assegnato
- se la partita finisce e HAI PERSO ricordati di non fare più l’ultima mossa giocata, in quella precisa posizione di gioco (*).
Come potete notate, non abbiamo affatto detto al programma davvero come si gioca, nè COME si vince. Gli abbiamo solo spiegato come fare una mossa valida (scegli una casella libera) e attivato un meccanismo in caso di sconfitta, in modo che penalizzi la sequenza che l’ha portato a quel punto.
E’ come fareste voi se, in un paese straniero, provaste a giocare a un gioco che non conoscete, e nessuno fosse in grado di spiegarvi le regole per via della lingua. Capireste quando avete perso perché l’avversario esulterebbe, sareste in grado di fare mosse (almeno in un caso così semplice) perché borbotterebbero se ne faceste una non valida, e la cosa più semplice sarebbe cercare di capire dal fondo cosa non fare.
Chiaro questo è davvero un esempio estremo ma non solo “funziona”, ma il tutto sarebbe già usabile durante l’addestramento. E se voleste usare il sistema già completamente funzionante, basterebbe farlo giocare un certo numero di partite – contro se stesso – prima di farlo giocare contro di voi.
Un sistema che elimina le mosse sbagliate partendo “dal fondo” non è ovviamente il modo migliore per addestrare un sistema che voglia imparare un gioco più complesso, dove il numero di mosse possibili è molto molto più alto. E in certi giochi non ci sono mosse sempre sbagliate o sempre giuste (ad esempio in un gioco con le carte dove ho delle situazioni non note a priori – come le carte che ha in mano l’avversario o quelle che mi arriveranno). Ma l’idea di modificare il comportamento in base a cosa è accaduto – rispetto a uno storico – rimane valida per una ampia categoria di situazioni.
E un programma che la sfrutti deve “quasi” solo avere memoria.
Dico quasi perché, come anticipavo, in situazioni anche solo leggermente più complesse la decisione dipenderà da più fattori “visti”, che andranno tra l’altro valutati (insieme o separatamente) per avere un punteggio per ogni scelta, giocando poi quella con il punteggio più alto.
Non solo, in casi reali è facile che la parte che apprende dall’esperienza sia magari solo un pezzetto del programma che gioca, perché spiegare al programma qualche strategia che abbiamo in mente non è fuori portata, e fa giocare il computer già a un livello soddisfacente.
Intendo, molti programmi di scacchi anche famosi hanno sempre usato potenza di calcolo (per immaginare le mosse successive, “vedendo” così cosa poteva capitare – Deep Blue era in grado di valuitare 200 milioni di posizioni al secondo) e tecniche sviluppate insieme a giocatori (per decidere come dirigere il gioco, valutando cosa preferire in condizioni non certe).
Le cose sono cambiate nel tempo e ora è comune che anche i sistemi già potenti per questi motivi abbiano appunto anche una parte che si aggiorna in automatico, studiando altre partite, per migliorare aspetti delle decisioni da prendere, senza per questo delegare tutti gli aspetti del gioco a un sistema generico.
Ci sono però anche casi opposti, quelli cioè in cui spiegare a un programma le regole del gioco è impossibile, o almeno impossibile in modo completo, e anche qui i sistemi di apprendimento automatico da uno storico sono usati da tempo. Ma di questi sistemi (comunissimi e presenti da tempo) parleremo nel caso più avanti.
Nel prossimo articolo vedremo invece di spiegare un po’ meglio cosa intendo con “decisioni per arrivare a un punteggio” e inizieremo a parlare di linguaggio.