Ricerca personalizzata

martedì 21 luglio 2009

Reti Neurali - I.A.

Una vasta branca dell'intelligenza artificiale cerca di costruire sistemi che affrontino problemi difficili per gli algoritmi classici dei sistemi esperti usando, invece, reti neurali che si ispirano, ma molto alla lontana, all'elaborazione dell'informazione nel nostro sistema nervoso.

Il principio fondamentale è che invece di scrivere un programma di calcolo con istruzioni esplicite, esempio di calcolo simbolico, si cerca, con apposite procedure di addestramento, di ottenere una rete con connessioni fra le unità i cui valori consentano alla rete di risolvere il compito per cui è stata addestrata in maniera implicita, con semplici calcoli analogici come il computo del livello di attivazione di ciascuna unità.

Fra le numerose applicazioni ingegneristiche di sistemi artificiali basati su reti neurali ve ne sono alcune in ambito medico, ad esempio per aiutare medici umani o sistemi esperti tradizionali nelle diagnosi di patologie specifiche da un insieme di sintomi e dati sul paziente. La rete li confronta, con un' impressione per così dire visuale piuttosto che logico- simbolica, con il quadro presentato da altri pazienti di cui è già nota la diagnosi corretta, e che viene fornito alla rete in fase di addestramento.

Queste applicazioni delle reti neurali hanno avuto un grado variabile di successo pratico, ma in generale ci si scontra con due caratteristiche dei sistemi artificiali fondamentalmente differenti da quelle del sistema nervoso:

1) le unità di calcolo di un sistema artificiale possono operare con estrema velocità, milioni di volte più veloci dei neuroni che costituiscono le unità di calcolo del nostro sistema nervoso

2) bisogna però spiegar loro cosa fare, almeno al livello di fornirgli richieste precise in fase di addestramento, mentre le reti neurali naturali sfruttano meccanismi di apprendimento basati sulla modifica spontanea e indipendente di un numero enorme di connessioni sinaptiche (ne abbiamo circa un milione di miliardi nel nostro cervello) fra i singoli neuroni.

Anche se crediamo adesso di comprendere, in prima approssimazione, i principi della plasticità sinaptica, non riusciamo per ora a convincere nessun sistema artificiale, da noi costruito, a modificare spontaneamente un milione di miliardi di variabili, senza che gli diciamo noi come fare.

Esiste poi una branca in forte espansione nell'ambito delle neuroscienze, che studia i processi naturali di calcolo neurale, realizzati nelle reti del nostro sistema nervoso. Questo è un campo affatto diverso e per me affascinante, i cui rudimenti ho cercato di spiegare in un libriccino introduttivo edito dalla Bruno Mondadori, Come funziona la memoria (1999).

Anche qui si ha a che fare, in un certo senso, con la medicina, ma si affrontano, ben prima delle patologie, questioni fondamentali della ricerca di base del tipo: a cosa corrispondono, nel nostro cervello, i processi mentali, il pensiero?Le reti neurali (o neuronali) sono una delle aree più interessanti della ricerca in Intelligenza Artificiale. Nonostante la loro ideazione risalga ai primi anni '60, solo di recente si sono avuti notevoli risvolti applicativi e teorici.

L'idea che sta alla base delle reti neurali è quella di "imitare" in funzionamento del cervello, utilizzando un certo numero di semplici elementi di calcolo fortemente interconnessi tra loro per elaborare dati.

Gli elementi di calcolo semplici vengono chiamati neuroni. In una rete neurale alcuni neuroni sono utilizzati come ingressi, altri come uscite, altri ancora (non sempre presenti) non sono connessi con l'esterno e svolgono una funzione di "calcolo" e vengono chiamati neuroni "nascosti" (hidden).

La grande differenza rispetto ad altri sistemi di calcolo consiste nel fatto che la rete non è programmata per svolgere un determinato compito, ma viene "addestrata" mostrandole degli esempi (sotto forma di coppie ingresso-uscita), la rete impara così ad associare ad ogni ingresso un'uscita e anche in una certa misura a generalizzare quello che ha imparato per ingressi che non le erano stati presentati in fase di addestramento. Così per ottenere l'uscita voluta è sufficiente che l'ingresso "somigli" a quello originario. Questa proprietà rende le reti neurali adatta a tutti i compiti che hanno a che fare con il riconoscimento e classificazione di input (caratteri, immagini, suoni...).

Le capacità della rete sono determinate sia dal numero di neuroni, sia soprattutto dalla topologia (cioè da come sono collegati tra loro i neuroni). Esistono infinite topologie possibili, ma le più utilizzate si possono schematizzare in due classi: le reti alimentate in avanti (feed forward) e le reti ricorrenti (o ricorsive).

Nelle prime non esiste nessun collegamento che riporti in qualche modo le uscite in ingresso, questo le rende abbastanza semplici da studiare ed addestrare ma non gli permette di mantenere uno "stato" interno, cioè una memoria di quello che è successo nel passato. Questo tipo di rete è il più studiato ed utilizzato.
Le reti ricorrenti hanno delle capacità più estese però non sono state in generale ancora ben comprese e non si conosce sempre un metodo adatto per addestrarle.

Percettrone multi livello (Multi Layer Perceptron)
Una delle reti di più utilizzate è il cosiddetto "percettrone multi livello".

Questa rete ha uno strato di neuroni di ingresso, uno strato di neuroni di uscita, e a volte uno o più strati di neuroni nascosti. Per addestrare la rete si fanno variare i coefficienti associati a ciascun collegamento (è questo che rende possibile l'apprendimento nella rete). Ogni neurone riceve diversi ingressi ed ha una sola uscita (la cosiddetta "attivazione" del neurone) che è funzione degli ingressi.

Per permettere alla rete di apprendere funzioni non lineari è necessario usare una funzione non lineare. Le funzioni più utilizzate sono la funzione "gradino", e la funzione "sigmoide" (nota anche come funzione di Fermi). La prima viene utilizzata quando è necessaria una risposta "digitale" (cioè di tipo on/off), la seconda quando invece l'uscita deve assumere valori continui compresi in un intervallo limitato.

Tipicamente l'argomento della funzione di attivazione è la somma degli ingressi del neurone pesati ciascuno col peso della connessione corrispondente. Le attivazioni dei neuroni d'ingresso sono gli input (vengono imposte dall'esterno, in un certo senso non sono quindi dei veri neuroni...), l'attivazione dei neuroni d'uscita rappresenta l'uscita della rete.

Ottenere il valore dell'uscita dati gli ingressi si riduce a fare propagare in avanti il segnale, cioè a calcolare in successione tutte le varie attivazioni partendo dagli ingressi.

L'addestramento della rete risulta un pò più complesso: all'inizio la rete non contiene nessuna informazione, si assegnano i valori dei pesi in modo casuale (ad esempio con valori compresi tra -0.5 e 0.5), successivamente si presentano gli ingressi, si calcola l'uscita della rete, si calcola l'errore, come differenza tra il valore ottenuto e i valori che si volevano, e si aggiustano i pesi in modo da fare diminuire l'errore.


Per aggiustare i pesi esistono diverse regole a seconda del tipo di rete, per una rete senza strati nascosti si utilizzano la formula seguente:

Wj = Wj + alj * (T-O)

dove Wj è il peso del collegamento j-esimo, alfa è una costante chiamata "velocità di apprendimento" (learning rate), Ij è l'ingresso j-esimo, T è l'uscita i-esima desiderata e O è l'uscita i-esima della rete. La costante alfa viene utilizzata per diminuire la velocità di convergenza, in modo da limitare oscillazioni attorno al minimo di errore (l'errore è rappresentato da T-O).

Reti di questo tipo con funzioni di attivazione lineari (chiamate adalines) vengono impiegate spesso nel riconoscimento dei caratteri o nella costruzione di filtri adattivi.

Se la rete contiene strati di neuroni nascosti è necessario utilizzare per l'addestramento la tecnica di "backpropagation", grazie alla quale si riesce a suddividere l'errore all'uscita tra i neuroni dei livelli nascosti e quindi a variare i pesi in modo da minimizzare l'errore.

Nell'addestramento di una rete neurale è importante presentare tutte le coppie di ingresso-uscita diverse volte. Ciascuna presentazione viene chiamata "epoca" di addestramento. Se l'addestramento procede correttamente ad ogni epoca l'errore (quadratico) medio su tutte le uscite dovrebbe diminuire.

L'algoritmo di addestramento può essere schematizzato come segue:

;Ripeti per n epoche
Per ogni esempio di addestramento
Presenta ingressi
Propaga in avanti
calcola errore (T-O)
Ritocca pesi
Fine ciclo esempi
Fine ciclo epoche

Per utilizzare una rete neurale nella risoluzione di un particolare problema è opportuno cercare di identificare gli ingressi e le uscite che riescano a caratterizzare bene il problema. Riguardo alla topologia della rete da usare non si può dire molto, in quanto non sono ancora disponibili teorie riguardo al numero ottimale di neuroni e collegamenti da utilizzare.

Un risultato importante è che le reti con un solo livello nascosto riescono a rappresentare tutte le funzioni continue, mentre le reti con due livelli riescono a rappresentare anche quelle discontinue. Le prestazioni di tutte le reti neurali dipendono molto dal set di addestramento: più il set è rappresentativo del problema e più è completo più le prestazioni saranno migliori e la anche la capacità di generalizzare della rete sarà migliore.

Esempio. La rete della prima figura è un rete che viene utilizzata di solito nel riconoscimento di caratteri. In questo caso numero delle uscite sono tante quante i caratteri da riconoscere (un neurone per ogni carattere). Gli ingressi ricevono la luminosità media di un certo numero di aree dell'immagine (normalmente disposte a griglia). Il neurone che ha attivazione più alta in uscita viene considerato come risposta della rete.

Atri tipi di reti neurali
Tra i numerosi tipi di reti neurali esistenti sono da ricordare le reti di Hopfield e le self organizing nets di Kohonen.

Le prime sono delle reti ricorrenti formate da un solo strato di neuroni. Ciascun uscita è collegata agli ingressi di tutti gli altri neuroni. Questa rete viene addestrata utilizzando delle particolari formule lineari e può funzionare come rete auto associativa. Dopo la fase di allenamento la rete è in grado di riconoscere una configurazione che ha imparato (anche se parzialmente corrotta) e di presentare in uscita la versione originale (quindi integra). La rete viene utilizzata ad esempio per riconoscere immagini ad un solo bit colore. Un risultato teorico interessante è che la rete può memorizzare in maniera affidabile fino a 0.138N esempi, dove N è il numero di neuroni della rete.

Le reti di Kohonen invece costituiscono un esempio di reti che sono in grado di apprendere senza bisogno di supervisione, cioè hanno la capacità di ricevere diverse configurazioni in ingresso e di classificarle per somiglianza. Anche in questo caso le formule usate nell'addestramento sono diverse da quelle usate per i percettroni.


Nessun commento:

Privacy Policy

This site uses Google AdSense for advertisements. The DoubleClick DART cookie is used by Google in the ads served on publisher websites displaying AdSense for content ads. When users visit an AdSense publisher's website and either view or click on an ad, a cookie may be dropped on that end user's browser. The data gathered from these cookies will be used to help AdSense publishers better serve and manage the ads on their site(s) and across the web. * Google, as a third party vendor, uses cookies to serve ads on this site. * Google's use of the DART cookie enables it to serve ads to you users based on your visit to this site and other sites on the Internet. * Users may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy. We use third-party advertising companies to serve ads when you visit our website. These companies may use information (not including your name, address, email address, or telephone number) about your visits to this and other websites in order to provide advertisements about goods and services of interest to you.

Questo sito utilizza Google AdSense per la pubblicità. Il DoubleClick DART cookie è utilizzato da Google per gli annunci pubblicati su siti web publisher AdSense per i contenuti, visualizzazzandone gli annunci. Quando un utente visita un sito web publisher AdSense e clicca su un annuncio, un cookie può essere rilasciato a tal fine, nel browser dell'utente. I dati raccolti da questi cookie verranno utilizzati per aiutare i publisher AdSense a servire meglio e a gestire gli annunci sul loro sito(i) in tutto il web. * Google, come parte di terzo fornitore, utilizza i cookie per la pubblicazione di annunci su questo sito. * L'uso del DART cookie consente a Google di pubblicare annunci per gli utenti, e si basa sulla vostra visita a questo sito e su altri siti su Internet. * Gli utenti possono scegliere di utilizzare i DART cookie visitando i contenuti sulla privacy nell'annuncio di Google. Usiamo società di pubblicità per la pubblicazione di annunci di terze parti, quando si visita il nostro sito web. Queste aziende possono utilizzare le informazioni (non compreso il vostro nome, indirizzo, indirizzo e-mail, o numero di telefono) sulle visite a questo e ad altri siti web, al fine di fornire la pubblicità su beni e servizi di vostro interesse.