Home > Doc > Reti Neurali su .... > Capitolo 4

Reti neurali su Personal Computer e Fuzzy Logic: Guida al software allegato

Capitolo 4

In questo capitolo sono trattate le reti neurali autoorganizzanti e nel dischetto, nella directory cap.4, è contenuta una simulazione di una rete classificatrice autoorganizzante.

Complessivamente sono contenuti i seguenti files:

- som.c: file sorgente in linguaggio C del programma som.exe

- som.exe: simulazione di una rete autoorganizzante costruita sulla base di una rete di Kohonen con alcune variazioni che non ne modificano, comunque, la struttura fondamentale.

- profil.lrn: è un file di addestramento per la rete "som" relativo al problema visto nel capitolo 2 del riconoscimento di profili altimetrici.

Come potrete notare il file contiene esempi di cinque valori di altitudine disposti consecutivamemente, senza nessun valore di output desiderato: il training set di una rete autoorganizzante come questa non deve contenere valori di output desiderato come invece avviene nei training set di reti ad apprendimento supervisionato(tab.3).

- profil.val: contiene gli esempi di validazione dell’apprendimento. Viene comunemente chiamato validation.set e il programma "som" inizia a testare l apprendimento appena terminato(completate le iterazioni sul training set) con gli esempi contenuti in questo file.

TAB.3

0.956 cinque valori esempio 1

0.767

0.486

0.800

0.900

0.300 cinque valori esempio 2

0.400

0.500

0.600

0.700

Eseguendo il programma "som" vengono richiesti il nome del file di addestramento, il nome del file di validazione, il numero di inputs(in questo caso sono cinque) e il numero di "iterazioni" che si vuole far compiere all’algoritmo di addestramento. Con un file così semplice e una rete così piccola (100 neuroni sulla griglia output) sono sufficienti poche iterazioni(5-10) per creare una traccia nei pesi sinaptici.

Terminata l'ultima iterazione sul file contenente il training set (es profil.lrn) il programma inizia una fase di test con gli esempi contenuti nel validation.set (es profil.val). In fase di test è visibile la matrice 10x10 dei neuroni di output con un simbolo "*" sul neurone winner (vincente). Sul lato sinistro del video compare l'insieme dei valori dell'input pattern e ciò vi permette di verificare su quali neuroni vengono "classificati" i vari patterns. Con poche iterazioni sono stati ottenuti i risultati di fig.1.

Bisogna notare che il problema del riconoscimento di profili altimetrici presenta, per il tipo di rete che abbiamo realizzato, il problema del "pattern piano" che richiederebbe la modifica della legge di trasferimento dei pattern di input sull’output. Nella rete realizzata con il sistema classico si effettua una moltiplicazione vettoriale del vettore di input con il vettore dei pesi che connettono l'input con l output: è evidente che la moltiplicazione di due vettori con forme simili porta ad un vettore in cui la somma degli elementi è più elevata.

Esempio:

1) monte / monte

input(0.2-0.4-0.5-0.2-0.1)* pesi(0.3-0.4-0.6-0.4-0.3)=

=(0.06-0.16-0.3-0.08-0.03)

e output=S(0.06,0.16,0.3,0.08,0.03)=0.63

2) monte / valle

input(0.2-0.4-0.5-0.2-0.1)* pesi(0.6-0.4-0.3-0.4-0.6)=

=(0.12-0.16-0.15-0.08-0.06)

e output=S(0.12,0.16,0.15,0.08,0.06)=0.57

Da questo esempio risulta evidente che il pattern piano si pone in una situazione di neutralità tra le varie forme e potrà pertanto essere clssificato in neurodi di output appartenenti ad altre classi e viceversa. Per una soluzione efficace del problema di profili altimetrici come quello esposto, con una rete autoorganizzante si può intervenire con le seguenti azioni:

1) modificare il trasferimento del vettore di input attraverso il vettore pesi in modo che si effettui una differenza vettoriale anziché una moltiplicazione: questa modifica permette al pattern piano di assumere una "forma propria".

2) effettuare una operazione di "stretching" dei vettori di input in modo che la rete diventi sensibile solamente alla "forma" del vettore e non ai valori assoluti dei suoi elementi. Mentre l'algoritmo di apprendimento resta invariato, la funzione di trasferimento diventa:

O(k)=1/(S|x(j)-w(k)(j)|+e)

e=0.01

Lo stretching del vettore di input si ottiene invece come preprocessing prima dell'inserimento nella rete. Lo stretching può essere effettuato in questo modo:

vettore iniziale= 0.2,0.3,0.4,0.2,0.1 (monte)

Si sottrae ad ogni elemento il valore più basso tra tutti gli elementi, in modo da portare la base del vettore sullo zero e poi si stira il vettore in modo che l'elemento di valore maggiore diventi uguale a 1.0. Per fare ciò si imposta a 1.0 l'elemento di valore più elevato e si dividono tutti gli altri elementi per il suo valore. In questo esempio valore min=0.1 e la prima operazione porta al nuovo vettore:

0.1,0.2,0.3,0.1,0.0

Adesso valore max=0.3 diventa 1.0 e

0.1 diventa 0.1/0.3=0.33

0.2 diventa 0.2/0.3=0.66

Il nuovo vettore è 0.33,0.66,1.0,0.33,0.0

Nel caso di valore max = valore min (es piano) si avrebbe un vettore di elementi nulli non accettabile per questa rete: si può ovviare aggiungendo 0.1 ad ogni elemento quando tale condizione si verifica. Questo procedimento è rappresentato graficamente in fig.2 dove si evidenzia come di "enfatizzare" la forma del pattern di input amplificandolo fino alla saturazione del range di lavoro.

In questo modo si amplificano le differenze di forma tra i patterns e si equalizzano i valori assoluti. Esistono molti tipi di preprocessing dei dati per la presentazione di essi alle reti neurali e sono strettamente vincolati al tipo di problema da esaminare e al tipo di rete utilizzata. Un corretto preprocessing dei dati è molto spesso determinante per il raggiungimento di risultati affidabili con qualsiasi rete neurale.

Quello appena visto può essere utilizzato nel riconoscimento di segnali, di profili, di immagini o comunque in tutte quelle applicazioni in cui è importante distinguere forme indipendentemente da valori assoluti.

 

 

Luca Marchese

Successivo: Capitolo 5

Sommario: Indice