Lo sviluppo della ANN

Lo sviluppo della ANN (rete neurale artificiale) è iniziato nel 1940, ma a causa di alcune pubblicazioni che mostravano imprecisioni nei primi modelli di percettrone, l’appoggio finanziario fu bloccato e molti scienziati abbandonarono il campo. L’interesse nelle reti neurali riemerse solo dopo che alcuni importanti risultati teorici furono raggiunti nei primi anni ottanta (il più notevole fu la scoperta della retropropagazione dell’errore), e lo sviluppo di nuovi hardware aumentò la capacità di elaborazione.
Attualmente, le ANN sono impiegate con successo nei campi riguardanti sistemi di identificazione e controllo, simulatori di gioco e processi decisionali, riconoscimento di pattern (identificazione di volti, identificazione vocale, identificazione di oggetti), riconoscimento di sequenze, diagnosi medica, applicazioni finanziarie ed anche… filtri spam per e-mail.

La teoria dietro alle ANN è piena di astrazioni. Ci sono diverse nuove nozioni per molti di noi, sebbene non siano precisamente il campo degli ingegneri, ma piuttosto di matematici e teorici. In molti casi però lo scopo delle reti è di essere implementate in software o hardware, dove noi possiamo vederle e toccarle.

ANN Esempio 1

Una ANN può essere implementata come software in un PC, ed il suo scopo potrebbe essere quello di riconoscere un volto specifico. I dati immessi potrebbero consistere in un’immagine di un volto umano acquisita via webcam, ed il responso della ANN potrebbe essere una risposta positiva o negativa riguardo il permesso di quella persona ad avere accesso ad una specifica parte di un edificio.

ANN Esempio 2

Una ANN può essere implementata come hardware in un FPGA, che può interagire con un microfono ed un ADC per riconoscere uno specifico comando vocale. Se la rete è stata correttamente addestrata ed implementata, può anche essere usata per riconoscere come valido un comando, solo se dato da una particolare persona, riconoscendo lo schema specifico di quella voce.

ANN Esempio 3

Una ANN può essere usata come sistema hardware-software per decidere se uno specifico prodotto sia “buono” o “cattivo”. Per esempio un’azienda che produce videocamere può usare la rete per identificare se l’immagine di una determinata videocamera è accettabile o no.

Piuttosto che misurare tutti i tipi di parametri come messa a fuoco, limpidezza del colore o tinta ecc, l’immagine di ogni videocamera potrebbe essere collegata direttamente alla ANN che potrebbe decidere autonomamente se è accettabile o no, basandosi su prove preventive.

Parlando semplicisticamente, l’addestramento è portato a termine dando alla ANN un ragionevole numero di buone immagini (accettabili per un giudice umano) ed informando la ANN che quelle immagini sono buone; allo stesso modo alla ANN potrebbe essere stato dato un numero simile di immagini non accettabili (per un giudice umano) ed essere stata informata che quelle immagini “non sono buone”. Se è stato utilizzato il corretto algoritmo di prova e se il numero di immagini utilizzate per la prova è anch’esso appropriato, la ANN sarà in grado da quel momento in poi di decidere autonomamente se un’immagine è buona o no.

Da un punto di vista astratto, la rete neurale è un gruppo di nodi interconnessi, simili alla grande rete di neuroni nel cervello umano (sebbene questo paragone semplifichi davvero la struttura del cervello umano).

Artificial Neural Networks

Il “nodo” più semplice è un percettrone, che nel caso più basilare ha solo 2 input e un output:

Artificial Neural Networks

Ognuno degli input, x1 e x2 ha un peso corrispondente, quindi l’output del percettrone sarà una funzione semplicemente data dalla somma ponderata degli input:

y=f(x1*w1+x2*w2)

La funzione f è anche definita esattamente quando il percettrone è effettivamente implementato nel software o hardware, state quindi guardando una rete neurale a singolo strato, che usa come input dei numeri e che a sua volta restituisce un numero.
L’output della rete è perciò dipendente dai pesi (w1 e w2). Questi devono essere corretti così che l’output del percettrone si adatti all’applicazione, tale correzione viene fatta in fase di addestramento.

La ragione per la quale un tale concetto è considerato una rete neurale artificiale, è il suo aspetto simile ad una rete neurale vera e propria, che è comunque basata su una rete basilare di nodi chiamati neuroni. La naturale struttura di un neurone ed il suo ambiente sono illustrati qui di seguito con gli elementi che lo compongono: un insieme di fibre in entrata – i dendriti (corrispondenti ai valori dell’input x1 e x2 del percettrone), le sinapsi (e l’efficienza delle sinapsi corrisponde ai pesi del percettrone), il soma (che corrisponde alla somma aritmetica del percettrone), ed una fibra in uscita – l’assone (pressappoco la funzione f).

Artificial Neural Networks

I percettroni possono essere raggruppati in una rete neurale più estesa, proprio come il cervello umano è formato da circa 100.000.000.000 di neuroni (sufficienti per 1000 anni di vita – questi neuroni degenerano col passare del tempo e la natura non ci ha ancora fornito il modo di rimpiazzarli). Così possono essere costruite complesse reti neurali artificiali. E possono essere usate per svariati compiti.

Ovviamente la teoria matematica dietro alla ANN è abbastanza antiquata da spaventare molte persone orientate a scopi più pratici. Ma anche queste strutture possono avere semplici applicazioni che possono essere considerate l’ “hello world” (“ciao mondo”, N.d.T.) delle ANN. Vi suggerirò qui di seguito una di queste applicazioni.

Applicazione per il riconoscimento del carattere
Una ANN relativamente semplice può essere formata per riconoscere i caratteri da 0 a 9. I caratteri possono essere considerati come disegnati su una griglia da 10x14 pixel, in cui ogni pixel ha un valore di 0 (per il bianco) e 1 (per il nero).

Artificial Neural Networks

In questo modo l’immagine può essere composta da un vettore di 140 elementi, e questo vettore può essere inserito in una ANN con 140 input (che abbia un numero ragionevole di percettroni nel suo primo strato, per esempio 12 percettroni con 5 input ciascuno) e con 10 percettroni nello strato output. In base a quale dei 10 caratteri da 0 a 9 è rappresentato nella bitmap, solo uno dei 10 output della ANN dovrebbe essere attivato essendo logicamente 1, e tutti gli altri logicamente 0.

Artificial Neural Networks

In questo modo una struttura per la ANN è stabilita. Questa struttura non deve essere affatto considerata la migliore per questa applicazione; comunque può essere utile per eseguire il lavoro. Ci sono numerosi scritti (abbastanza astratti, ma molto scientifici e teorici) che vi insegneranno a scegliere la struttura per la ANN che meglio si adatta all’applicazione che avete in mente.
Ok, una volta che la struttura della ANN è stabilita, il passo successivo è di addestrarla. Di nuovo, questa è una scienza vera e propria, e addestrare una ANN può implicare complicati algoritmi; fortunatamente questi sono a portata di mano e prontamente implementati in potenti ambienti di sviluppo, come C o Matlab.

L’addestramento di una ANN è un processo durante il quale la ANN “impara”; fondamentalmente significa che deve correggere i pesi di ogni percettrone nella rete così che quando viene consegnato un modello conosciuto (come per esempio un chiaro carattere “2”, che non implica rumore e somiglianze con altri caratteri) la rete attiverà il corretto output.

Fondamentalmente, significa che alla rete viene consegnato il carattere “2” ed il suo peso sarà corretto secondo un particolare algoritmo così che matematicamente parlando, l’output del terzo percettrone nello strato di uscita sarà vicino ad 1 e gli output di tutti gli altri 9 percettroni saranno 0.

Ovviamente la giusta correzione dei pesi non può essere ottenuta in una sola iterazione, e l’addestramento della ANN comporta il consegnargli più volte modelli conosciuti ed anche modelli che sono soggetti a rumore, come ad esempio la figura qui sotto:

Artificial Neural Networks

Se correttamente addestrata la ANN dovrebbe essere in grado di riconoscere un’immagine soggetta a rumore, proprio come farebbe un cervello umano. Per via della loro complessità teorica, le reti neurali non sono particolarmente popolari tra gli ingegneri; sono più il campo dei matematici.
Comunque, se siete curiosi, fate una prova. Immaginate quale complesso algoritmo sarebbe coinvolto se una parte convenzionale di software dovesse essere usata per riconoscere i caratteri qui sopra.
Non dovrebbe essere un compito troppo arduo, ma la sua complessità dovrebbe crescere esponenzialmente con la risoluzione dei caratteri.

Le ANN offrono un metodo abbastanza facile (ed anche veloce sia in termini di implementazione che di esecuzione) per il problema. Come dicevo, Matlab ha un toolbox abbastanza fornito riguardo le reti neurali, che vi permette di generare, addestrare ed anche usare una ANN con relativa facilità. L’ambiente Matlab include inoltre alcune interessanti demo che sono molto più visuali (e forse istruttive) del linguaggio matematico convenzionalmente utilizzato per descrivere queste reti.

Repost: 9 Mar 2009

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend