Tuki & Giuli - giochi da console

Home Codice Articoli Libri

Reti Neurali Supervisionate introduzione gentile

In questo tutorial introduco le reti neurali (Neural Networks) per spiegare il sistema di intelligenza artificiale (Artificial Intelligence) con cui è stato addestrato Tuki a riconoscere gli oggetti utili da quelli inutili nel video gioco The Hard Path. Un buon testo di riferimento per comprendere l'uso tecnologico delle NN è il seguente Deep-Learning-Essentials-hands-fundamentals che però prevede un buon skill nella programmazione e non presenta esempi terra a terra. Per questo motivo presento un esempio chiaro e comprensibile dell'uso delle NN che spiega il funzionamento di una rete neurale supervisionata o appunto supervised neural network. Una volta compresi i concetti di base sarà possibile continuare lo studio delle NN anche analizzando il video gioco creato dal Tuki & Giuli Developers Team il cui codice sorgente è disponibile su GitHub.
Non voglio analizzare qui il videogioco nel dettaglio ma lo descrivo brevemente per permettere il continuo della lettura. Tuki deve attraversare un lungo deserto per raggiungere LadyB, la sua amica. Durante il tragitto ha bisogno di mangiare e di recuperare energia e può farlo approfittando degli oggetti che incontra sul suo cammino. Questi possono essere: gemme che gli danno energia, cibo che gli da nutrimento e veleno che lo intossica (gem, food and poison).
Per completare il percorso Tuki ha quindi bisogno di riconoscere gli oggetti che incontra e di adottare un comportamento adeguato, quindi ha bisogno della vista. A questo si aggiunge un problema, cioè che gli oggetti non appaiono quasi mai nella loro forma ideale, ma vengono deformati leggermente. Questo è in fondo quello che capita anche nella vita reale. Quando andiamo al supermercato e vogliamo comprare delle mele, nessuna delle mele ha una forma ideale ma, come esseri umani intelligenti, siamo comunque in grado di classificarle come mele anche se ognuna è diversa delle altre per colore o forma.
Quindi per permettere a Tuki di completare il suo hard path, dobbiamo fornirlo anzitutto della vista, in modo che possa vedere gli oggetti, poi di una intelligenza, che gli permetta di riconoscere gli oggetti anche se sono stati leggermente trasfigurati. La soluzione che abbiamo adottato è basata sull'uso delle reti neurali. In pratica abbiamo usato una NN per analizzare gli oggetti che compaiono lungo il percorso e classificarli.
Di seguito provo a rispodere a queste domande che sono le più frequenti:
  • Cosa significa che Tuki incontra degli oggetti?
  • Tuki ha una coordinata che rappresenta la sua posizione lungo il cammino, come a dire la distanza che ha percorso dalla partenza. Gli oggetti sono disseminati in posizioni precise, quando la coordinata di Tuki coincide con la posizione di un oggetto, nel sistema di input di Tuki (i suoi occhi, per intenderci) viene presentata l'immagine dell'oggetto.
  • Cosa vuol dire l'immagine dell'oggetto?
  • Per ogni tipo di oggetto abbiamo preparato una matrice di pixel, i cui valori definiscono l'oggetto e lo sfondo, esattamente come fanno i colori dei pixel di una foto digitale. Ogni immagine è rappresentata all'interno di una griglia o appunto matrice di 5x5 pixel. Se il valore del pixel è zero significa che il pixel non appartiene all'oggetto, quindi è un pixel dello sfondo, se invece il valore è uno, allora il pixel appartiene all'area dell'oggetto.
  • Come viene presentata l'immagine al Tuki?
  • I 5x5 pixel della matrice vengono mappati in un vettore di input di lunghezza 25. Ognuno di loro è collegato ad un neurone di input del cervello del Tuki. Questa è una semplificazione del meccanismo di visione dell'occhio che attraverso il nervo ottico trasmette gli impulsi visivi (di carattere elettrico) ai neuroni del cervello.
  • Cosa vede Tuki?
  • Tuki vede attraverso 25 neuroni di output. Questi sono rappresentati da un vettore di 25 elementi detto vettore di output. Ogni valore è associato allo stato di attivazione del corrispondente neurone. Come nel caso del vettore di input, esso rappresenta un'immagine di 5x5 pixel. Il valore di ogni pixel è il risultato dell'elaborazione dell'immagine di input da parte della sua rete neurale, cioè il suo cervello. Il valore 1 (corriposndente al colore nero) significa che il pixel è certamente pieno, il valore 0 significa che il pixel è certamente vuoto. Tutti i valori intermedi rappresentano la probabilità che il pixel sia vuoto o pieno.
  • Cosa è la sua rete neurale?
  • Con rete neurale si intende l'insieme dei collegamenti tra i neuroni di input e i neuroni di output. Per collegarli sono necessari 25x25=725 collegamenti. L'intesità di ciascun collegamento determina la visione del Tuki. Inizialemte Tuki non vede nulla.
  • Cosa significa che la rete neurale elabora l'immagine di input?
  • L'elaborazione dell'immagine di input consiste nell'applicazione di un semplice algoritmo matematico. Indichiamo con $\mathbf{x}_{}$ il vettore di input, cioè l'immagine dell'oggetto e indichiamo con $\mathbf{w_{}}$ la matrice che rappresenta i pesi dei collegamenti tra i neuroni di input e i neuroni di output. Indichiamo ancora con $b_{}$ un vettore (sempre di 25 elementi) detto di bias. Detto questo, abbiamo che il vettore che rappresenta l'immagine percepita dal Tuki è dato dall'espressione: $$\mathbf{a}_{}=\sigma(\mathbf{z})$$ con $$\mathbf{z}_{}=\mathbf{w}_{}\mathbf{x}_{}+\mathbf{b}_{}$$ dove: $$ \mathbf{z}_{}= \begin{bmatrix} z_{1}\\z_{2}\\z_{3}\\...\\z_{25} \end{bmatrix} $$ La funzione σ è detta funzione di attivazione, il suo significato sarà approfondito in un prossimo articolo. Se volete leggere un racconto di fantascienza che parla dell'importanza di scegliere una σ corretta per una NN vi consiglio La biforcazione di Hopf. $$ \mathbf{w}_{}= \begin{bmatrix} w_{1,1} & w_{1,2} & w_{1,3} & ... & w_{1,25} \\ w_{2,1} & w_{2,2} & w_{2,3} & ... & w_{2,25} \\ w_{3,1} & w_{3,2} & w_{3,3} & ... & w_{3,25} \\ ... & ... & ... & ... & ... \\ w_{25,1} & w_{25,2} & w_{25,3} & ...& w_{25,25} \end{bmatrix} $$ $$ \mathbf{x}_{}= \begin{bmatrix} x_{_1}\\x_{_2}\\x_{_3}\\\\...\\x_{25} \end{bmatrix} $$ and $$ \mathbf{b}_{}= \begin{bmatrix} b_{1}\\b_{2}\\b_{3}\\\\...\\b_{25} \end{bmatrix} $$ $$ \mathbf{w}_{}\mathbf{a}_{} = \begin{bmatrix} w_{1,1} & w_{1,2} & w_{1,3} & ... & w_{1,25} \\ w_{2,1} & w_{2,2} & w_{2,3} & ... & w_{2,25} \\ w_{3,1} & w_{3,2} & w_{3,3} & ... & w_{3,25} \\ ... & ... & ... & ... & ... \\ w_{25,1} & w_{25,2} & w_{25,3} & ...& w_{25,25} \end{bmatrix} \begin{bmatrix} x_{_1}\\x_{_2}\\x_{_3}\\...\\x_{25} \end{bmatrix}=\\ \begin{bmatrix} w_{1,1}x_{_1}+ w_{1,2}x_{_2}+ w_{1,3}x_{_3}+ ... + w_{1,25}x_{25} \\ w_{2,1}x_{_1}+ w_{2,2}x_{2}+ w_{2,3}x_{_3}+ ... + w_{2,25}x_{25} \\ w_{3,1}x_{_1}+ w_{3,2}x_{2}+ w_{3,3}x_{3}+ ... + w_{3,25}x_{25} \\ ... \\ w_{25,1}x_{_1}+ w_{25,2}x_{_2}+ w_{25,3}x_{3} + ... + w_{25,25}x_{25} \end{bmatrix} $$ Si ha quindi: $\mathbf{z}_{}=\mathbf{w}_{}\mathbf{x}_{}+\mathbf{b}_{}$ $$ \begin{bmatrix} z_{1}\\z_{2}\\z_{3}\\...\\z_{25} \end{bmatrix} = \begin{bmatrix} w_{1,1}x_{_1}+ w_{1,2}x_{_2}+ w_{1,3}x_{_3}+ ... + w_{1,25}x_{25}+b_1 \\ w_{2,1}x_{_1}+ w_{2,2}x_{2}+ w_{2,3}x_{_3}+ ... + w_{2,25}x_{25}+b_2 \\ w_{3,1}x_{_1}+ w_{3,2}x_{2}+ w_{3,3}x_{3}+ ... + w_{3,25}x_{25}+b_3 \\ ... \\ w_{25,1}x_{_1}+ w_{25,2}x_{_2}+ w_{25,3}x_{3} + ... + w_{25,25}x_{25}+b_25 \end{bmatrix} $$ Il vettore di output, che rappresenta la visione di Tuki è quindi dato da:
$$ \begin{bmatrix} a_{1}\\a_{2}\\a_{3}\\ ... \\a_{25} \end{bmatrix} = \begin{bmatrix} \sigma(z_{1})\\\sigma(z_{2})\\\sigma(z_{3})\\ ... \\\sigma(z_{25}) \end{bmatrix} $$
  • Come ci vede inizialmente Tuki?
  • La matrice w delle connessioni tra i neuroni inizialmente ha dei valori casuali, un po' quello che succede ad un bambino la prima volta che apre gli occhi, quindi la visione degli oggetti è inzialmente errata.
  • Come impara a vedere correttamente il Tuki?
  • Il modo in cui Tuki impara a vedere ricorda il modo in cui i bambini imparano a riconoscere le immagini, cioè attraverso l'apprendimento. A voler essere rigorosi, il meccanismo con cui si sviluppa la vista è del tipo non supervisionato, cioè il bambino continua a modificare la propria rete neurale senza che nessuno gli dica se ciò che sta vedendo è corretto oppure no. Nel caso del Tuki invece abbiamo usato il meccanismo di apprendimento detto supervisionato che i bambini possono mettere in pratica solo quando iniziano a toccare gli oggetti con le mani. A quel punto, le immagini formate dal cervello a partire dalla elaborazione dei dati di input, vengono confrontate con i dati sensoriali dati dal tatto, e la rete neurale che regola la vista può affinarsi fino alla perfezione. Per questo, stimolare i bambini fin dalla prima infanzia è molto importante.
    In pratica si mostra a Tuki un oggetto (vettore di input) e si lascia lavorare la sua NN come descritto sopra. Quando il Tuki ha prodotto la propria visione si agisce direttamente sui suoi neuroni di output, praticamente mostrandogli ciò che avrebbe dovuto vedere! Un tipo di educazione molto autoritaria. Il cervello del Tuki allora, calcola la differenza $\Delta \mathbf{a}$ tra l'immagine che ha visualizzato e quella che avrebbe dovuto visualizzare. Questa differenza è usata dal cervello per correggere i pesi dei collegamenti tra i neuroni, quindi per correggere la matrice w. L'algoritmo di correzione, che prende il nome di regola di Windrow-Hoff è il seguente: $$\Delta \mathbf{a}=\mathbf{a}-\mathbf{y}$$ $$ \begin{bmatrix} \Delta a_{1}\\\Delta a_{2}\\\Delta a_{3}\\ ... \\\Delta a_{25} \end{bmatrix} = \begin{bmatrix} a_{_1}-y_1\\a_{_2}-y_2\\a_{_3}-y_3\\ ... \\a_{_25}-y_25 \end{bmatrix} $$ Usando $\Delta \mathbf{a}$ si calcola $\Delta \mathbf{z_{}}$ as $$\Delta \mathbf{z_{}}=\mathbf{\Delta a\sigma^{'}(z_{}) }$$ in componenti si ha: $$ \begin{bmatrix} \Delta z_{1}\\\Delta z_{2}\\\Delta z_{3}\\ ...\\\Delta z_{25} \end{bmatrix} = \begin{bmatrix} \Delta a_{1}\sigma^{'}(z_{1})\\\Delta a_{2}\sigma^{'}(z_{2})\\\Delta a_{3}\sigma^{'}(z_{3})\\ ... \\\Delta a_{25}\sigma^{'}(z_{25}) \end{bmatrix} $$ La variazione della matrice $\Delta \mathbf{w_{}}$ è calcolata come $$\Delta \mathbf{w_{}}=\mathbf{\Delta a_{}^{T}\Delta z_{} }=\mathbf{\Delta a_{}^{T}\left[\left(a_{}-y\right)\sigma^{'}(z_{})\right]} $$
    Conclusioni
    In questo articolo ho presentato il meccanismo visivo di Tuki spiegando come usa le reti neurali supervisionate. Nel prossimo articolo spiegherò come Tuki riconosce anche gli oggetti trasformati.
    Per lasciare un'opinione, un commento, una critica o una domanda, è possibile usare la Community che permette di scrivere commenti e opinioni senza nessuna registrazione.