Reti Neurali Artificiali



La scienza che studia le reti neurali nasce dal tentativo di emulare artificialmente il funzionamento di una struttura nervosa biologica - il cervello - cercando di riprodurne i comportamenti più elementari, sia per capirne con più esattezza i meccanismi interni, sia per poterne applicare i principi al fine di trovare soluzioni alternative a problemi della vita reale.


Storia ——————— ——— — —
-- -

Fin dai primi decenni del XX secolo diversi scienziati hanno formulato teorie riguardo il funzionamento del cervello, e di come poterne emulare i comportamenti attraverso delle macchine artificiali. Solo negli ultimi decenni però, con l'avvento di computer sempre più potenti e sempre meno costosi, le reti neurali hanno ricevuto un rinnovato interesse da parte della comunità scientifica, avendo finalmente a disposizione gli strumenti per poter realizzare in pratica quello che per anni era stato rappresentato solo da teorie astratte e da complicate formule matematiche.

La vera e definitiva svolta avvenne nel 1986, quando fu pubblicato da parte di tre ricercatori americani il libro "PDP - Parallel Distributed Processing" - che ora è considerato una delle pietre miliari della moderna teoria sulle reti neurali - dove gli autori illustravano un nuovo algoritmo - l'algoritmo di back-propagation - che rappresentava la soluzione, fino ad allora non ancora trovata, per l'addestramento di reti neurali a più strati.
Da quella pubblicazione moltissime altre interessanti teorie si sono succedute, e molto software è stato scritto per verificarne la fondatezza, ed oggi possiamo sicuramente affermare di essere entrati in una nuova epoca, nella quale le reti neurali artificiali hanno raggiunto un livello di maturità tale da poter essere utilizzate con successo per risolvere problemi in molti campi della vita reale.

Funzionamento e principi  ——————— ——— — — -- -

Come già accennato precedentemente, le reti neurali artificiali hanno lo scopo di emulare il comportamento delle strutture neurali biologiche. Uno dei principali aspetti di tale comportamento è sicuramente rappresentato dalla capacità di apprendere un determinato compito attraverso l'addestramento, e di riuscire poi a trovare la soluzione corretta laddove si presentano problemi simili a quelli visti durante l'apprendimento.

Una delle più importanti capacità di una rete neurale, pertanto, è quella di riuscire ad imparare il giusto accoppiamento tra i parametri di input e le corrispondenti risposte desiderate che caratterizzano un certo problema.
Questo risultato si ottiene attraverso l'addestramento, che di solito avviene mostrando alla rete neurale diversi esempi di un problema, 'etichettando' ognuno di essi con la risposta esatta desiderata (come per esempio la foto di un animale ed il nome ad esso associato).
Una rete neurale verrà considerata 'addestrata' solo quando sarà in grado di ottenere risposte corrette ogni qual volta viene presentato in ingresso un esempio uguale o simile a quelli precedentemente visti.

L'idea che sta alla base della teoria delle reti neurali artificiali è che per emulare artificialmente ed in modo efficace una rete neurale, si deve costruire del software che replichi più o meno una struttura simile a quella dei tessuti neurali biologici.

Vediamo allora come tale struttura è costituita.

Una rete neurale è composta da elementi basilari di elaborazione chiamati neuroni, connessi tra di loro tramite collegamenti, detti anche pesi o sinapsi, in modo da formare uno schema assimilabile ad un semplicissimo tessuto nervoso:

 

I diversi neuroni sono di solito organizzati in Layer, o strati successivi, e per questo, in tali casi, si parla di architetture neurali a più strati.

Come già detto precedentemente, una rete neurale è in grado di imparare a partire dagli esempi che gli vengono proposti.
Normalmente il primo layer, denominato layer di input, viene usato per immettere le variabili di ingresso del problema che si vuole risolvere; queste variabili vengono quindi elaborate dai vari strati intermedi della rete (hidden layers) fino a che raggiungono l'ultimo layer, o layer di output, dal quale si ottiene pertanto la risposta desiderata.
Naturalmente, per poter ottenere risposte il più possibile esatte e coerenti da una rete neurale, questa va addestrata con una serie di esempi la cui risposta desiderata è già nota.
L'addestramento avviene misurando ad ogni ciclo l'errore commesso, espresso come funzione della distanza tra il valore desiderato e quello restituito dalla rete; l'errore viene reimmesso nella rete al contrario (partendo dai neuroni di uscita) e 'retropropagato' all'indietro fino ai neuroni di ingresso, modificando lungo il percorso i valori delle connessioni secondo precise formule matematiche.
Questo processo iterativo viene ripetuto per centinaia o migliaia di volte, fino a trovare l'insieme dei valori delle sinapsi (o forza delle connessioni) che riescono a risolvere in modo adeguato il problema; quei valori, cioè, che riescono a minimizzare l'errore compiuto dalla rete.
In base a ciò, si può affermare che i valori delle varie sinapsi rappresentano la 'memoria' di una rete neurale addestrata a risolvere uno specifico problema.
Il processo descritto viene comunemente chiamato algoritmo di back-propagation, proprio a causa della 'retro-propagazione' dell'errore utilizzata per modificare i pesi delle sinapsi.

L'effetto che si ottiene da un simile addestramento è sicuramente molto interessante, perché emergono le seguenti utili caratteristiche collaterali, che rendono 'unico' il modo di funzionare di queste incredibili strutture create dalla natura:

1. Categorizzazione
Una rete neurale riesce ad imparare a risolvere un problema semplicemente 'estraendo' le caratteristiche peculiari dagli esempi che le vengono proposti, effettuando quindi una vera e propria categorizzazione delle varie situazioni presentate in ingresso.
2. Generalizzazione
Grazie alla capacità di generalizzare, le reti neurali sono in grado, una volta addestrate su di un problema specifico, di risolvere con un alto grado di esattezza situazioni simili, anche se non perfettamente uguali a quelle viste durante l'addestramento.
3. Robustezza
Le reti neurali sono in grado di dare risposte corrette anche in presenza di situazioni 'rumorose', o di parametri di input incompleti.