Questa è la demo dell'esempio trovato anche in presentazione del Deep Learning. In realtà, qui le cose funzionano in maniera leggermente diversa dalle altre demo. Infatti, si parla di Reinforcement Learning (o Apprendimento per Rinforzo).
Il Reinforcement Learning si differenzia dal tipico procedimento perché prevede anche il coinvolgimento di una ricompensa, che viene detta appunto rinforzo, per valutare la qualità delle prestazioni del sistema. Questa tecnica consente al sistema di adattarsi alle variazioni dell'ambiente in cui si trova. È quindi perfetto per il nostro caso, in cui l'ambiente in cui si deve muovere il nostro agente è in continuo mutamento!
Ma passiamo subito ai fatti: qui sotto trovate una rete fatta esattamente nello stesso modo di prima. Ora potrete modificare i diversi parametri: forma del campo, numero di hidden layer, numero di neuroni presenti in ognuno di essi, tasso di apprendimento, batch size, parametro di regolarizzazione (se non hai letto l'approfondimento relativo puoi lasciarlo così) e tasso di esplorazione ε. Quest'ultimo rappresenta la probabilità che l'agente compia un'azione casuale, invece che eseguire quella che gli darebbe una ricompensa più alta: infatti, il nostro agente deve imparare quali mosse sono quelle ottimali e, soprattutto in fase di allenamento, deve quindi esplorare nuove azioni che non ha mai compiuto prima.
Una breve spiegazione: di fianco al campo del numero di hidden layer vi è un "x2" perché in realtà servono due strati per ogni livello nascosto: uno completamente connesso ("fc") e uno con neuroni lineari ("relu") (vedi il capitolo frontiere per maggiori informazioni).
Nella demo sono a disposizione, inoltre, diverse velocità di gioco. Infine, una volta che la rete si è allenata, si può premere il pulsante relativo per fermare l'allenamento e vedere l'agente giocare sul serio. Si noterà un cambiamento nel suo comportamento e il punteggio dovrebbe leggermente aumentare e stabilizzarsi su oscillazioni meno ampie.
Ma come sapere quando fermarsi? Dopo circa 10 minuti, la rete dovrebbe essere sufficientemente allenata (con i parametri di default), ma se avete fretta, potete cliccare sul pulsante Carica Rete per vedere in azione una rete già allenata.
Mentre si allena, vediamo un po' la teoria che c'è dietro. Abbiamo già detto si tratta di Reinforcement Learning, ma non quale algoritmo sia stato esattamente utilizzato: si tratta del Q-Learning, uno degli algoritmi più conosciuti di apprendimento per rinforzo. Tale algoritmo consente ad un agente automatico di adattarsi all'ambiente anche nel caso in cui abbia a disposizione solo parte delle informazioni riguardante ad esso. Ad esempio, in questa demo, l'agente ha a disposizione solo l'informazione video del campo di gioco e le mosse che può eseguire, esattamente come se si trattasse di un giocatore umano.
Ma cosa avviene esattamente? Come fa a scegliere le mosse corrette? Il sistema divide il problema in un insieme di stati e un insieme di azioni per ogni stato: l'agente quindi si muove da uno stato all'altro effettuando una delle azioni disponibili. Quindi, ogni stato fornisce una ricompensa all'agente, il cui obiettivo è proprio quello di massimizzare la ricompensa totale. L'agente quindi apprende quali sono le azioni ottimali associate ad ogni stato.
Entrando nel dettaglio della demo, l'agente è rappresentato dal pallino colorato che si muove: esso ha 9 sensori, direzionati in angoli diversi, ognuno dei quali misura 3 diversi valori nella propria direzione (fino ad una distanza massima di visibilità): la distanza da un muro, la distanza da un oggetto verde e quella da un oggetto rosso. Inoltre, gli viene data la possibilità di scegliere tra 5 azioni, differenziate dall'angolo di rotazione. Il suo obiettivo è di raccogliere le mele (gli oggetti rossi): per ogni mela mangiata, viene data una ricompensa all'agente. Deve invece evitare il veleno (gli oggetti verdi), poiché essi sono associati ad una ricompensa negativa.
Ha inoltre a disposizione una memoria delle azioni passate: in questo modo, l'agente può verificare ciò che ha fatto per aiutarsi a decidere la sua mossa futura. In particolare, per evitare di scegliere azioni consecutive, che sono fortemente dipendenti l'una dall'altra, sceglie casualmente diverse azioni in diversi momenti della sua memoria, in modo da poter avere una buona varietà di situazioni su cui basarsi.
Per terminare, una piccola curiosità: questa demo è stata creata sulla base di lavoro riguardante il Reinforcement Learning che voleva creare una rete neurale in grado di giocare i giochi Atari 2600. Lo scopo di questo lavoro è stato raggiunto e, su sette giochi, ben in tre il computer ha superato il punteggio di un giocatore umano esperto!