Home > Doc > Reti Neurali su .... > Simulazione in C di esecuzione e apprendimento

Reti neurali su Personal Computer e Fuzzy Logic: Introduzione

Simulazione in C di esecuzione e apprendimento

Il listato contenuto nel dischetto è un programma di prova di reti neurali error_back_propagation che permette di addestrare la rete con un file ascii contenente i dati input e output desiderato in sequenza come mostrato in fig.6.

Questo programma prevede l'utilizzo di due hidden layers e quindi la retropropagazione dell'errore avviene due volte e non una sola: dallo strato di output allo strato hidden2 e dallo strato hidden2 allo strato hidden1.

La scelta di inserire due strati hidden di neuroni non è casuale, infatti, nonostante che la grande maggioranza dei problemi possano essere risolti con un solo strato nascosto, esiste una netta differenza tra le reti a due strati decisionali (output+1strato hidden) e quelle con tre strati decisionali (output+due strati hidden): come scritto in un rapporto della D.A.R.P.A (Defensive Advanced Research Project Agency) sulle reti neurali, con uno strato decisionale(output) è possibile realizzare una separazione lineare, mentre con due strati (output+hidden1) possono essere separati spazi convessi e, con tre strati decisionali (output+ +hidden1 +hidden2) possono essere riconosciute forme qualsiasi (fig.7).

Possiamo pensare che il primo strato decisionale sia in grado di separare i punti appartenenti a forme diverse con un semipiano o un iperpiano (separazione lineare) per ogni nodo e che il secondo strato decisionale faccia altrettanto intersecando i suoi semipiani con quelli del primo strato a formare regioni convesse(per ogni nodo): il terzo strato decisionale associa regioni convesse di nodi differenti dello strato precedente creando forme qualsiasi la cui complessità dipende dal numero di nodi dei primi due strati e il cui numero dipende dal numero di nodi del terzo strato.

I vantaggi relativi all'uso di più di due strati nascosti sono decisamente inferiori e comunque ne discuteremo eventualmente in un prossimo capitolo parlando, più approfonditamente, di potere di generalizzazione delle reti. Le due parti di programma che eseguono le due retropropagazioni sono assolutamente simmetriche dato che i calcoli da fare sono esattamente gli stessi: basta cambiare gli operatori.

Il programma contiene le seguenti procedure

exec: esegue la rete con un input

back_propagation: esegue la rtropropagazione dell'errore modificando i pesi delle connessioni

ebp_learn: carica i parametri dell’ addestramento e chiama learn

learn: procedura che esegue l' addestramento della rete nel seguente modo...

ciclo epoche

{
ciclo esempi
{
chiama exec(esecuzione della rete)
chiama back_propagation(modifica pesi)
calcola errore esempio
calcola errore epoca=max(errori esempi)
}
break se errore epoca < errore ammesso
}

input: preleva i dati dal file net.in in test
ouput: inserisce i dati nel file net.out in test
weight_save: salva i pesi della rete su file
load_weight: carica i pesi della rete da file

Bisogna innanzitutto definire i parametri della rete che sono numero di input e numero di output (dipendenti ovviamente dal problema applicativo) e numero di neuroni che vogliamo negli strati hidden. Esistono delle formule empiriche per calcolare il numero dei neuroni degli strati nascosti in base alla complessità del problema ma, generalmente, è più la pratica che suggerisce tale numero(spesso è inferiore al numero degli input e output).

Con più neuroni negli strati hidden l'apprendimento diventa esponenzialmente più lungo, nel senso che ogni epoca occupa un tempo maggiore(n_pesi=n_neuroni1*n_neuroni2), ma non è escluso che il risultato (raggiungimento del target) venga raggiunto in un tempo simile a causa di una maggiore efficienza della rete.

Luca Marchese

Successivo: Un esperimento: insegnamo alla rete a fare la somma di due numeri

Sommario: Indice