Reti Neurali

Introduzione alle reti neuraliLa paternità delle reti neurali moderne è da attribuire all’incontro avvenuto nel 1942 tra lo psichiatra neuroanatom

Il linguaggio XML
Edit Distance o Levenshtein Distance: un algoritmo di similarità tra stringhe
AOP: la programmazione Orientata agli Aspetti

Introduzione alle reti neurali

La paternità delle reti neurali moderne è da attribuire all’incontro avvenuto nel 1942 tra lo psichiatra neuroanatomista Warren McCulloch ed il giovane matematico Walter Pitts, nonostante ci siano teorie del cervello risalenti al III – IV secolo a.C. concepite da filosofi greci quali Platone (427 – 347 a.C.) e Aristotele (384 – 322 a.C.). Sebbene da allora le reti neurali artificiali (RNA) abbiano fatto notevoli passi in avanti, l’idea di base è rimasta immutata: imitare il sistema nervoso centrale.

Oggi le reti neurali trovano impiego nei più svariati settori: dall’ingegneria alla psicologia, dall’economia alla medicina e le troviamo sempre più spesso in applicazioni d’uso comune come l’OCR[1] o nei lettori di banconote dei distributori automatici. Le RNA si rivelano particolarmente utili per problemi inerenti ad esempio il riconoscimento di forme, la comprensione del linguaggio naturale e la rappresentazione della conoscenza. Tali problemi sono spesso caratterizzati dalla richiesta di un numero elevato di risoluzioni a problemi ausiliari per ottenere la soluzione e il solo modo per risolverli è quello di ricorrere a metodi euristici che richiedono quasi sempre un grandissimo sforzo computazionale. Per porre rimedio a ciò, ci si è rivolti ad algoritmi ed architetture completamente differenti da quelli utilizzati finora. Molti ricercatori, provenienti da diversi settori, hanno studiato e progettato innovative macchine ad architettura parallela, emulanti l’organizzazione e le funzioni del cervello (Figura 1.1), che si sono dimostrate in grado di risolvere problemi come quelli aleatori e quelli di ottimizzazione combinatoria, non alla portata dei computer attuali.

L’architettura di tali macchine è definita a partire dai cosiddetti Modelli Connessionistici o Modelli di Elaborazione Parallela Distribuita (Parallel Distributed Processing – P.D.P.).

Una definizione di RNA vista come macchina adattativa può essere:

Una rete neurale è un processore parallelo e distribuito, costituito da semplici unità di elaborazione che hanno una naturale propensione per l’immagazzinamento di conoscenza basata sull’esperienza.

Figura 1.1 – Rete Neurale Biologica e Artificiale a confronto

  • La RNA rende disponibile per l’uso tale conoscenza. Essa somiglia al cervello biologico sotto due aspetti:
  • la rete acquisisce conoscenza dall’ambiente esterno tramite un processo d’apprendimento;
  • la configurazione dei pesi sinaptici, ovvero il grado di accoppiamento tra i diversi neuroni, conserva la conoscenza acquisita.

Dalla definizione appena citata, si evince che il punto di forza di tali reti consiste nella novità del paradigma d’elaborazione dell’informazione: l’intelligenza del sistema, la rappresentazione dell’ambiente esterno e tutta la conoscenza non risiedono nella singola unità d’elaborazione (neurone artificiale), ma nell’interconnessione di un gran numero di esse. Inoltre con le RNA scompare in buona parte, se non del tutto, il concetto di programmazione per lasciare il posto a quello di “addestramento”.

Addestrare una rete vuol dire sostanzialmente modificarne i pesi secondo un determinato algoritmo, chiamato per l’appunto “algoritmo di apprendimento”, allo scopo di rendere la rete in grado di risolvere un determinato compito.

L’emulazione della struttura e del comportamento di un cervello biologico porta ad una sua modellazione che seppur semplicistica, riesce a riprodurne alcune tra le proprietà più importanti attribuitegli per antonomasia quale la capacità di auto-organizzarsi, in maniera da creare una propria rappresentazione dell’ambiente esterno e della conoscenza ad esso legata. Questa soluzione apporta diversi vantaggi:

  • Robustezza. Nelle reti implementate in hardware il danneggiamento o il malfunzionamento di alcune unità non degrada in modo significativo le prestazioni se non per gravi avarie.
  • Flessibilità. Nel caso in cui la rete operi in un ambiente non stazionario, è possibile ripetere l’addestramento e quindi riadattare la rete alle nuove condizioni in tempi relativamente bassi. È possibile inoltre progettare la rete in maniera tale da permettere a tale adattamento di avvenire in tempo reale.
  • Non linearità. Un neurone può essere lineare o non lineare. Una rete costituita dalla interconnessione di neuroni non lineari è essa stessa non lineare. È interessante notare che tale non linearità è di un particolare tipo in quanto è distribuita attraverso l’intera rete. La non linearità è una caratteristica molto importante quando si tratta con la rappresentazione di funzioni implicitamente non lineari.

Tra le capacità principali riguardanti le reti neurali si ricordano:

  • Generalizzazione. La rete riesce a rispondere in maniera corretta anche sotto l’azione di input sconosciuti, affetti da rumore o parzialmente danneggiati.
  • Classificazione. Una delle capacità intrinseche di alcune reti è quella di classificare oggetti in base a determinate caratteristiche.
  • Approssimatore universale. Nel 1988 Cybenko dimostrò che una RN con un unico strato nascosto è in grado di approssimare qualsiasi funzione continua con la precisione voluta, a patto di non limitare il numero di neuroni in tale strato.

Questo teorema in realtà ha più valore teorico che pratico, infatti, non svela come dimensionare tali livelli per ottenere l’accuratezza desiderata.

Struttura di una rete neurale

Le RNA possono essere molto diverse tra loro sia per le dimensioni sia per struttura. Tali caratteristiche variano secondo l’uso a cui sono destinate. Nel seguito saranno descritti gli elementi base che costituiscono una RNA nonché alcune tra le topologie più comunemente usate e il relativo campo di applicazione. È utile iniziare con l’analisi dei vari componenti dei modelli artificiali di sistemi neurali biologici ed individuarne le caratteristiche comuni. Queste idee generali furono introdotte da Rumelhart, Hinton, e McClelland.

Gli elementi costitutivi fondamentali di una struttura di calcolo di tipo RNA sono:

  • unità di computazione base;
  • insiemi di connessioni;
  • funzione di attivazione;
  • stato delle unità;
  • regola di apprendimento.

Unità di computazione di base

Nel contesto di una rete neurale, l’unità base sulla quale è costruito il modello è un elemento computazionale semplice disposto in un’architettura a rete. L’elemento accetta dei segnali in ingresso, li elabora secondo determinate regole e fornisce un segnale in uscita che viene inviato alle unità a cui esso risulta connesso. Il modo in cui avviene tale processo nella rete è parallelo, nel senso che molte unità lavorano simultaneamente. Le unità sono spesso organizzate in strati e risultano divise in tre categorie: unità d’ingresso, unità d’uscita e unità nascoste. Le prime ricevono ingressi da sorgenti esterne al sistema, le unità d’uscita inviano segnali all’esterno del sistema, mentre le unità nascoste sono collegate solo con input e output interni. L’unità base può essere identificata col termine neurone. Diversi autori hanno elaborato vari modelli formali dell’unità fondamentale di calcolo di un sistema di neuroni. In genere ed in maniera semplificativa si può affermare che essa è un’emulazione delle funzioni elementari del neurone biologico. I vari modelli di neuroni elaborati, in analogia con quelli biologici, si distinguono generalmente per il tipo di funzione di attivazione.

Insiemi di connessioni

Le unità sono tra loro fittamente interconnesse. Ad ogni connessione è associato un valore detto peso sinaptico (o semplicemente peso).  E’ possibile raccogliere tutti i valori dei pesi in forma matriciale a formare la matrice dei pesi. L’insieme dei pesi delle connessioni determina come il modello risponderà ad un ingresso arbitrario e di conseguenza costituisce la “conoscenza o memoria del sistema”.

Funzione di attivazione

La funzione di attivazione di un neurone provvede a trasformare l’ingresso netto vj nella rispettiva uscita yj. Esistono diversi tipi di neuroni a seconda della funzione di attivazione che adottano. Le tipologie più comuni sono:

  • Gradino: La regola di attivazione è
yjj (v) ={1 se v > 0
0 altrimenti

L’uscita può variare tra zero e uno in maniera binaria. Il valore dell’ingresso per il quale avviene la commutazione è detto valore di soglia.

  • Lineare: È regolata dalla relazione

yjj (v) = K * v

Viene solitamente adottata nell’ultimo strato della rete in quanto non limita l’uscita.

  • Sigmoide: È quella che più si avvicina alla funzione di attivazione di un neurone biologico. È una funzione non lineare ed è utilizzata soprattutto negli strati nascosti della rete. Vale:

yjj (v) =

Le funzioni appena descritte sono rappresentate graficamente in Figura 1.2.

GradinoLineareSigmoide

Figura 1.2 – Alcune funzioni di attivazione

Stato dell’unità

Ad ogni unità è associato un valore numerico detto stato dell’unità aj(t) che generalmente viene fatto corrispondere al valore della variabile in uscita yj(t). I valori dello stato possono essere continui o discreti. Lo stato della rete di neuroni al tempo t è definito dall’insieme di variabili che descrivono lo stato delle unità semplici.

Regola di apprendimento

Si è detto che la conoscenza di un sistema neurale è codificata dai pesi delle connessioni tra le unità, quindi apprendere equivale a:

  • Sviluppare nuove connessioni;
  • Sopprimere connessioni esistenti;
  • Modificare i pesi di connessioni esistenti;

A tal fine sono state elaborate varie regole che simulano elementari forme di apprendimento per diversi modelli di reti. I meccanismi di apprendimento possono essere con supervisione (guidati) o senza (spontanei). Nei primi un supervisore fornisce alla rete degli ingressi e confronta la risposta della rete con quella corretta nota a priori. In base a questo confronto vengono stabilite le modalità di modifica dei pesi d’interconnessione. L’apprendimento guidato consente alla rete di imparare tramite i molti esempi forniti dal supervisore, in una modalità che ricorda l’apprendimento umano.

La regola di apprendimento spontanea più semplice è quella definita da Hebb, la cui idea base è di rinforzare il peso della connessione Wji se l’unità j-esima riceve in ingresso l’uscita dell’unità i-esima e le due unità sono contemporaneamente attive. Le altre regole di apprendimento spontanee sono delle evoluzioni di quella di Hebb o si basano su altri principi e non saranno ulteriormente trattate in questa sede.

Tipologie di reti

Il tipo di rete concettualmente più semplice è detto percettrone ed è stato introdotto da Rosenblatt. Consiste di soli due strati di neuroni, uno d’ingresso ed uno d’uscita. Il percettrone, proprio a causa della sua semplicità, presenta molte limitazioni, ma lo si può a buon diritto considerare un ottimo punto di partenza. A partire da esso, infatti, sono stati sviluppati diversi modelli di reti neurali anche molto differenti tra loro.

Nel seguito sarà fornita una breve e sommaria descrizione delle tipologie di RNA più rilevanti per le applicazioni.

Reti Associative.

Le reti associative si distinguono per le loro capacità di funzionare come memorie “indirizzabili per contenuto”, cioè come memorie associative. Il padre di questa tipologia di reti è Hopfield, dal quale prendono il nome. Le caratteristiche principali di questa tipologia di reti sono l’ingresso binario, l’alta velocità di apprendimento, l’oscillazione in fase di esecuzione.

Normalmente, in questa rete, i valori binari sono del tipo {-1, +1} e la funzione di attivazione di ogni nodo, è del tipo a gradino centrato sullo 0. La peculiarità di questa rete è che il segnale in ingresso viene continuamente fatto circolare nella rete fino a quando questa non si stabilizza. Lo stato stabile viene identificato dal fatto che dopo un certo numero di oscillazioni, i nodi in uscita mantengono sempre il loro valore, vale a dire fino a quando la rete non cambia più lo stato delle sue unità. Tali oscillazioni avvengono in fase di esecuzione, ma non è garantito che siano in grado di trovare un punto stabile. Questo è solo uno dei problemi della rete associativa. Tale topologia, infatti, presenta grossi problemi di capacità soprattutto in merito alla quantità di informazione memorizzabile. Inoltre, confonde le configurazioni di ingresso. Quest’ultima questione è risolvibile con una diagonalizzazione dell’ingresso, tuttavia permangono notevoli incertezze sulla capacità e sulla scarsa resistenza al rumore.

Per questa serie di motivi, le reti associative pur avendo un grande interesse scientifico, trovano scarso interesse pratico.

Reti Feedforward.

Questo tipo di rete neurale è una generalizzazione del percettrone di Rosenblatt. Letteralmente feedforward significa non ricorrente, cioè la direzione dell’impulso nella rete è unidirezionale. Tale caratteristica la distingue dalla rete di Hopfield che possiede invece dei collegamenti nella direzione tra l’uscita e l’ingresso.

Le reti feedforward trattano valori reali, anche se è utile normalizzare tali valori all’interno dell’ipercubo di lato unitario.

L’apprendimento di questa rete avviene con l’algoritmo di retropropagazione dell’errore, meglio noto come Back Propagation. Tale algoritmo tende a minimizzare l’errore rispetto ai pesi delle connessioni. Pertanto l’errore presentato della rete è funzione dei suoi pesi.

Questa tipologia di rete si presta bene alla classificazione di modelli e denota una certa capacità di astrazione: è in grado di classificare correttamente anche modelli che non ha mai visto. I problemi principali di questa rete sono legati all’algoritmo di apprendimento.

Reti Stocastiche.

L’elemento che contraddistingue questa tipologia di rete è che l’algoritmo di apprendimento non è deterministico, bensì i termini utilizzati sono probabilistici. La rete stocastica per eccellenza è la Macchina di Boltzman.

Reti Auto Organizzanti.

Il padre di quest’interessante tipologia di reti è Kohonen, dal quale prendono il nome. Il concetto di queste reti è quello di auto organizzarsi in strati o zone che diventano specializzate nel trattare una determinata parte dei dati relativi al problema generale. Questa situazione è molto simile a quella che si verifica nella nostra corteccia celebrale. Ad esempio, il nostro sistema di elaborazione dei segnali sonori è organizzato tonotopicamente, nel senso che vi sono zone dedicate a trattare con determinate frequenze piuttosto che con altre. Questo significa che il suono da noi percepito viene scomposto e suddiviso nelle diverse aree di competenza. Inoltre, questa famiglia di reti neurali si distingue per essere caratterizzata da apprendimenti senza supervisione.

E’ interessante notare come la distribuzione dei pesi nella griglia di uscita tende a ricopiare la distribuzione degli esempi. Questo implica che la rete si costruisce internamente la mappa delle caratteristiche, cercandole nel vettore di input, da cui scaturisce l’apprendimento senza supervisione.

Questo modello di rete si presta bene ad effettuare una classificazione di modelli, in cui non è ben chiaro come elaborare le informazioni ad essi associate. Tuttavia, richiede un numero molto elevato di connessioni e molti esempi, che tra l’altro devono coprire tutto il problema.

Alcuni dei campi applicativi in cui questa tipologia di rete si è destreggiata con successo sono la simulazione di mappe sensoriali, il controllo motorio, il riconoscimento del parlato e le quantizzazioni vettoriali.

E’ importante comunque sottolineare che le reti neurali sono pensate per dei circuiti appositi. Infatti, uno dei maggiori pregi delle reti neurali, è l’alto grado di parallelismo insito. Spesso anche con dei circuiti appositamente realizzati non si riesce a sfruttare del tutto il calcolo distribuito tipico delle reti neurali e quindi, si è sempre costretti ad una serializzazione. Questo problema si fa molto più evidente quando si parla di simulazione su computer, dove nella stragrande maggioranza dei casi non esiste nessun parallelismo e spesso si satura immediatamente la capacità di calcolo e di memoria. Difatti, anche la memoria rappresenta un problema tipico di una rete neurale. È, infatti, necessario conservare i pesi di tutte le connessioni. Queste ultime crescono rapidamente all’aumentare del numero di neuroni e del grado d’interconnessione della rete. Tenendo presente che ogni peso è rappresentato da un numero reale, ci si può quindi rendere conto delle grosse risorse necessarie.

COMMENTS

WORDPRESS: 0