Rete neurale
Una rete neurale è un modello matematico di processamento delle informazioni, che cerca di simulare il funzionamento dei neuroni all'interno di un sistema informatico. Può essere composta sia da programmi che da hardware dedicato. Spesso viene utilizzata in congiunzione alla logica fuzzy.
| Indice |
Fondamenti biologici
Complesse organizzazioni di cellule nervose sono presenti in quasi tutti gli organismi viventi, con compiti di riconoscimento delle configurazioni assunte dall’ambiente esterno, memorizzazione e reazione agli stimoli provenienti dallo stesso. Il cervello umano rappresenta probabilmente il più mirabile frutto dell’evoluzione per le sue capacità di elaborazione delle informazioni. Al fine di compiere tali elaborazioni, le reti biologiche si servono di un numero imponente di semplici elementi computazionali (neuroni) fittamente interconnessi in modo da variare la loro configurazione in risposta agli stimoli esterni: in questo senso può parlarsi di apprendimento ed è questo tratto distintivo della biologia che i modelli artificiali cercano di catturare.
Nei vertebrati, ogni neurone riceve segnali attraverso ramificazioni dette dendriti e produce a sua volta un segnale, che trasmette poi ad altri neuroni attraverso una fibra ramificata detta assone. Una rete neurale artificiale riceve segnali esterni su uno strato di nodi (unità di elaborazione) d’ingresso, ciascuno dei quali è collegato con numerosi nodi interni, organizzati in più livelli. Ogni nodo elabora i segnali ricevuti e trasmette il risultato a nodi successivi.
Funzionamento di una rete neurale feedforward
Le reti neurali si basano principalmente sulla simulazioni di neuroni artificiali opportunamente collegati.
Immagine:Neurone.artificiale.gif
I suddetti neuroni ricevono in ingresso degli stimoli e li elaborano. L'elaborazione può essere anche molto sofisticata ma in un caso semplice si può pensare che i singoli ingressi vengano moltiplicati per un opportuno valore detto peso, il risultato delle moltiplicazioni viene sommato e se la somma supera una certa soglia il neurone si attiva attivando la sua uscita. Il peso serve a quantificare l'importanza dell'ingresso, un ingresso molto importante avrà un peso elevato, mentre un ingresso poco utile all'elaborazione avrà un peso inferiore.
Immagine:Rete-Neurale.gif
I singoli neuroni vengono collegati alla schiera di neuroni successivi, in modo da formare una rete di neuroni. Normalmente una rete è formata da tre strati. Nel primo abbiamo gli ingressi (I), questo strato si preoccupa di trattare gli ingressi in modo da adeguarli alle richieste dei neuroni. Se i segnali in ingresso sono già trattati può anche non esserci. Il secondo strato è quello nascosto (H, hidden), si preoccupa dell'elaborazione vera e propria e può essere composto anche da più colonne di neuroni. Il terzo strato è quello di uscita (O) e si preoccupa di raccogliere i risultati ed adattarli alle richieste del blocco successivo della rete neurale. Queste reti possono essere anche molto complesse e coinvolgere migliaia di neuroni e decine di migliaia di connessioni.
Storia
L’ampia varietà di modelli non può prescindere dal costituente di base, il neurone artificiale proposto da W.S. McCulloch e W. Pitts in un famoso lavoro del 1943, il quale schematizza un combinatore lineare a soglia, con dati binari multipli in entrata e un singolo dato binario in uscita: un numero opportuno di tali elementi, connessi in modo da formare una rete, è in grado di calcolare semplici funzioni booleane.
Nel 1958, F. Rosenblatt introduce il primo schema di rete neurale, detto perceptron (percettrone), antesignano delle attuali reti neurali, per il riconoscimento e la classificazione di forme, allo scopo di fornire un’interpretazione dell’organizzazione generale dei sistemi biologici. Il modello probabilistico di Rosenblatt è quindi mirato all’analisi, in forma matematica, di funzioni quali l’immagazzinamento delle informazioni, e della loro influenza sul riconoscimento dei patterns; esso costituisce un progresso decisivo rispetto al modello binario di McCulloch e Pitts, perché i suoi pesi sinaptici sono variabili e quindi il percettrone è in grado di apprendere.
L’opera di Rosenblatt stimola una quantità di studi e ricerche, e suscita un vivo interesse e notevoli aspettative nella comunità scientifica, destinate tuttavia ad essere notevolmente ridimensionate allorché nel 1969 Marvin Minsky e Seymour A. Papert mostrano i limiti operativi delle semplici reti a due strati basate sui percettroni, e dimostrano l’impossibilità di risolvere per questa via molte classi di problemi, ossia tutti quelli non caratterizzati da separabilità lineare delle soluzioni: questo tipo di rete neurale non è abbastanza potente, infatti non è in grado di calcolare neanche la funzione or esclusivo (XOR). Di conseguenza, a causa di queste limitazioni, ad un periodo di euforia per i primi risultati della cibernetica (come veniva chiamata negli anni '60), segue un periodo di diffidenza durante il quale tutte le ricerche in questo campo non ricevono più alcun finanziamento dal governo degli Stati Uniti d'America;le ricerche sulle reti tendono, di fatto, a ristagnare per oltre un decennio, e l’entusiasmo iniziale risulta fortemente ridimensionato.
Il contesto matematico per addestrare le reti MLP (Multi-Layers Perceptron, ossia percettrone multistrato) fu stabilito dal matematico americano Paul Werbos nella sua tesi di dottorato (Ph.D.) del 1974. Uno dei metodi più noti ed efficaci per l’addestramento di tale classe di reti neurali è il cosiddetto algoritmo di retropropagazione dell’errore (error backpropagation), proposto nel 1986 da David E. Rumelhart, G. Hinton e R. J. Williams, il quale modifica sistematicamente i pesi delle connessioni tra i nodi, così che la risposta della rete si avvicini sempre di più a quella desiderata. L’algoritmo di backpropagation (BP) è una tecnica d’apprendimento tramite esempi, costituente una generalizzazione dell’algoritmo d’apprendimento per il percettrone sviluppato da Rosenblatt nei primi anni ’60. Mediante questa tecnica era possibile, come detto, trattare unicamente applicazioni caratterizzabili come funzioni booleane linearmente separabili.
L'algoritmo di apprendimento si basa sul metodo della discesa del gradiente che permette di trovare un minimo locale di una funzione in uno spazio a N dimensioni. I pesi associati ai collegamenti tra gli strati di neuroni si inizializzano a valori piccoli e casuali e poi si applica la regola di apprendimento presentando alla rete dei pattern di esempio. Queste reti neurali sono capaci di generalizzare in modo appropriato, cioè di dare risposte plausibili per input che non hanno mai visto.
L’addestramento di une rete neurale di tipo BP avviene in due diversi stadi: forward-pass e backward-pass. Nella prima fase i vettori in input sono applicati ai nodi in ingresso con una propagazione in avanti dei segnali attraverso ciascun livello della rete (forward-pass). Durante questa fase i valori dei pesi sinaptici sono tutti fissati. Nella seconda fase la risposta della rete viene confrontata con l’uscita desiderata ottenendo il segnale d’errore. L’errore calcolato è propagato nella direzione inversa rispetto a quella delle connessioni sinaptiche. I pesi sinaptici infine sono modificati in modo da minimizzare la differenza tra l’uscita attuale e l’uscita desiderata (backward-pass).
Tale algoritmo consente di superare le limitazioni del percettrone e di risolvere il problema della separabilità non lineare (e quindi di calcolare la funzione XOR), segnando il definitivo rilancio delle reti neurali, come testimoniato anche dall’ampia varietà d’applicazioni commerciali: attualmente la BP rappresenta un algoritmo di largo uso in molti campi applicativi.
Reti di Hopfield
Nel 1982, il fisico John J. Hopfield pubblica un articolo fondamentale in cui presenta un modello matematico comunemente noto appunto come rete di Hopfield: tale rete si distingue per “l’emergere spontaneo di nuove capacità computazionali dal comportamento collettivo di un gran numero di semplici elementi d’elaborazione”. Le proprietà collettive del modello producono una memoria associativa per il riconoscimento di configurazioni corrotte e il recupero di informazioni mancanti.
Inoltre, Hopfield ritiene che ogni sistema fisico può essere considerato come un potenziale dispositivo di memoria, qualora esso disponga di un certo numero di stati stabili, i quali fungano da attrattore per il sistema stesso. Sulla base di tale considerazione, egli si spinge a formulare la tesi secondo cui la stabilità e la collocazione di tali attrattori sono proprietà spontanee di sistemi costituiti, come accennato, da considerevoli quantità di neuroni reciprocamente interagenti.
Tra le nuove idee messe in luce da Hopfield, quella più degna di menzione riguarda il capovolgimento del rapporto, fino allora esistente, tra calcolo e numeri: mentre era universalmente noto che il calcolo producesse numeri, assai meno banale era l’osservazione di Hopfield che, viceversa, anche i numeri potessero spontaneamente generare calcolo, e che questo potesse emergere quale attributo collettivo di sistemi interattivi siffatti.
Le applicazioni delle reti di Hopfield riguardano principalmente la realizzazione di memorie associative, resistenti all’alterazione delle condizioni operative, e la soluzione di problemi d’ottimizzazione combinatoriale. Da un punto di vista strutturale, la rete di Hopfield costituisce una rete neurale ricorrente simmetrica, di cui è garantita la convergenza.
Una rete ricorrente è un modello neurale in cui è presente un flusso bidirezionale d’informazioni; in altri termini, mentre nelle reti di tipo feedforward la propagazione dei segnali avviene unicamente, in maniera continua, nella direzione che conduce dagli ingressi alle uscite, nelle reti ricorrenti tale propagazione può anche manifestarsi da uno strato neurale successivo ad uno precedente, oppure tra neuroni appartenenti ad uno stesso strato, e persino tra un neurone e sé stesso.
Reti di Elman
Un significativo e noto esempio di semplice rete ricorrente è dovuto a Jeffrey L. Elman (1990). Essa costituisce una variazione sul tema del percettrone multistrato, con esattamente tre strati e l’aggiunta di un insieme di neuroni “contestuali” nello strato d’ingresso. Le connessioni retroattive si propagano dallo strato intermedio (e nascosto) a tali unità contestuali, alle quali si assegna peso costante e pari all’unità.
In ciascun istante, gli ingressi si propagano nel modo tradizionale e tipico delle reti feedforward, compresa l’applicazione dell’algoritmo d’apprendimento (solitamente la backpropagation). Le connessioni retroattive fisse hanno come effetto quello di mantenere una copia dei precedenti valori dei neuroni intermedi, dal momento che tale flusso avviene sempre prima della fase d’apprendimento.
In questo modo la rete di Elman tiene conto del suo stato precedente, cosa che le consente di svolgere compiti di previsione di sequenze temporali che sono difficilmente alla portata dei percettroni multistrato convenzionali.
Modalità d'apprendimento
Dal punto di vista della modalità d’apprendimento, è necessario operare una distinzione tra almeno tre diverse tipologie. In particolare, può aversi:
- un apprendimento supervisionato (supervised learning), qualora si disponga di un insieme di dati per l’addestramento (o training set) comprendente esempi tipici d’ingressi con le relative uscite loro corrispondenti: in tal modo la rete può imparare ad inferire la relazione che li lega. Successivamente, la rete è addestrata mediante un opportuno algoritmo (tipicamente, la backpropagation che è appunto un algoritmo d’apprendimento supervisionato), il quale usa tali dati allo scopo di modificare i pesi ed altri parametri della rete stessa in modo tale da minimizzare l’errore di previsione relativo all’insieme d’addestramento. Se l’addestramento ha successo, la rete impara a riconoscere la relazione incognita che lega le variabili d’ingresso a quelle d’uscita, ed è quindi in grado di fare previsioni anche laddove l’uscita non è nota a priori; in altri termini, l’obiettivo finale dell’apprendimento supervisionato è la previsione del valore dell’uscita per ogni valore valido dell’ingresso, basandosi soltanto su un numero limitato di esempi di corrispondenza (vale a dire, coppie di valori input-output). Per fare ciò, la rete deve essere infine dotata di un’adeguata capacità di generalizzazione, con riferimento a casi ad essa ignoti. Ciò consente di risolvere problemi di regressione o classificazione.
- un apprendimento non supervisionato (unsupervised learning), basato su algoritmi d’addestramento che modificano i pesi della rete facendo esclusivamente riferimento ad un insieme di dati che include le sole variabili d’ingresso. Tali algoritmi tentano di raggruppare i dati d’ingresso e di individuare pertanto degli opportuni cluster rappresentativi dei dati stessi, facendo uso tipicamente di metodi topologici o probabilistici. L’apprendimento non supervisionato è anche impiegato per sviluppare tecniche di compressione dei dati.
- un apprendimento con rafforzamento (reinforcement learning), nel quale un opportuno algoritmo si prefigge lo scopo di individuare un certo modus operandi, a partire da un processo d’osservazione dell’ambiente esterno; ogni azione ha un impatto sull’ambiente, e l’ambiente produce una retroazione che guida l’algoritmo stesso nel processo d’apprendimento. Tale classe di problemi postula un agente, dotato di capacità di percezione, che esplora un ambiente nel quale intraprende una serie di azioni. L’ambiente stesso fornisce in risposta un incentivo o un disincentivo, secondo i casi. Gli algoritmi per il reinforcement learning tentano in definitiva di determinare una politica tesa a massimizzare gli incentivi cumulati ricevuti dall’agente nel corso della sua esplorazione del problema. L’apprendimento con rafforzamento differisce da quello supervisionato poiché non sono mai presentate delle coppie input-output di esempi noti, né si procede alla correzione esplicita di azioni subottimali. Inoltre, l’algoritmo è focalizzato sulla prestazione in linea, la quale implica un bilanciamento tra esplorazione di situazioni ignote e sfruttamento della conoscenza corrente.
Pregi
Le reti neurali per come sono costruite lavorano in parallelo e sono quindi in grado di trattare molti dati in tempi molto ridotti. Essendo in sostanza un sofisticato sistema di tipo statistico hanno una buona immunità al rumore e se alcune unità del sistema dovessero malfunzionare la rete nel suo complesso avrebbe delle riduzioni delle prestazioni ma difficilmente andrebbe incontro ad un blocco del sistema.
Difetti
Sono difficili da integrare in hardware per via delle moltissime connessioni richieste. Necessitano di una fase di addestramento del sistema che fissi i pesi dei singoli Neuroni e questa fase può richiedere molto tempo. Non esistono teoremi o modelli che permettano di definire la rete ottima quindi la riuscita di una rete dipende molto dalla esperienza del creatore.
Utilizzi
Le reti neurali vengono usualmente utilizzate in contesti dove i dati possono essere parzialmente errati oppure dove non esistano modelli analitici in grado di affrontare il problema. Un loro tipico utilizzo è nei software di OCR, nei sistemi di riconoscimento facciale e più in generale nei sistemi che si occupano di trattare dati soggetti a errori o rumore. Le reti neurali vengono anche utilizzate come mezzo previsionistico dell'analisi finanziaria o meteorologica. Mostrando opportunamente una lunga serie di input, la rete è in grado di fornire l'output più probabile.
