Le reti neurali artificiali (Artificial Neural Networks) mettono a disposizione un metodo generale per l'apprendimento di funzioni a valori reali, discreti e vettoriali attraverso un'addestramento di tipo supervisionato.
Si tratta di reti particolarmente robuste, per quanto riguarda la presenza di errori nei dati di addestramento, utilizzate con successo nella soluzioni di alcuni problemi come per esempio l'interpretazione di scene, il riconoscimento del parlato ed il controllo dei robot.
La struttura di una rete neurale
Le reti neurali sono ispirate alla struttura neuronale del cervello di un essere umano. Alla base di tutto è presente il neurone costituito da una unità lineare seguita da una funzione per l'attivazione.
L'insieme di più neuroni costituisce il layer (livello). Più layer sono interconnessi tra di loro in modo tale che l'output di ciascun neurone sia anche l'input di tutti i neuroni del layer successivo.
Il primo layer è costituito dai soli dati di input. Un esempio di rete neurale costituita da tre layer:
- uno di input;
- due hidden layer;
- un output layer.
è mostrato nella seguente figura:
Forward e backward
Un neurone è caratterizzato dai pesi che vengono moltiplicati per i dati di input producendo l'output lineare processato dalla funzione di attivazione. I pesi costituiscono le variabili del modello mentre i valori associati ai pesi devono essere determinati nel corso della fase di addestramento del modello stesso.
La fase di addestramento prevede due step:
- forward;
- backward.
Nella fase di forward i dati vengono forniti in input alla rete calcolando l'output. L'output viene poi confrontato con i valori attesi utilizzando una determinata funzione di errore.
L'errore calcolato viene retropropagato, nella fase backward, aggiornando i pesi con una formula che prevede il calcolo del gradiente della funzione errore.
L'algoritmo è denominato metodo di discesa lungo il gradiente. L'obiettivo è quello di determinare il minimo della funzione errore muovendo i pesi nella direzione negativa del gradiente.
Sulla base di quanto detto fino ad ora, nella prossima lezione scopriremo in che modo è possibile realizzare una rete neurale artificiale per la classificazione di oggetti specifici in base a particolari caratteristiche. A questo scopo utilizzeremo la deep-learning library Deeplearning4j scritta in Java e Scala.