Addestramento rete neurale

9

Click here to load reader

Transcript of Addestramento rete neurale

Page 1: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 1

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 1

ESERCIZIO 1

1. Introduzione L’obiettivo di questo primo esercizio è quello di stimare mediante l’utilizzo di una rete neurale feed-forward l’andamento di una funzione matematica a due variabili di tipo gaussiano. La funzione utilizzata è la seguente:

2 215 6 ( ) /10( , ) sin( )cos( )60 24

g m x yf x y e+ + − += (1)

I parametri g ed m sono a discrezione del progettista, nel caso analizzato sono stati scelti i valori di g ed m pari ad 30 e 10.

2 2( ) /10( , ) sin(0.75)cos(0.67) x yf x y e− += (1a)

Il passo successivo riguarda ora la creazione e l’addestramento della rete. E’ necessario definire in maniera opportuna la struttura della rete, ovvero il tipo di connessione (fully-connected o meno), le funzioni di attivazione, il numero di strati che la costituiscono e quanti neuroni appartengono ad essi,ed altri parametri legati alla rete(goal,learning rate ecc...). In seguito si fissa il training set, ovvero l’insieme di coppie in ingresso alla rete utili per l’addestramento. Questa fase del progetto è molto importante in quanto dalla corretta definizione del training set si otterrà un corretto addestramento della rete, è necessario inoltre ricordare che non tutti i valori disponibili in ingresso sono utilizzabili

Page 2: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 2

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 2

in quanto una parte di essi sarà dedicata alla validazione della rete stessa. La suddivisione dei set non è fatta a caso ma è definita nel seguente modo:

1

12

optrW

= − (2)

W rappresenta il numero dei pesi sinaptici ed optr indica quanti

elementi devono essere dedicati alla validazione. Una volta ottenuta la funzione da stimare è stato realizzato un plot dell’errore ottenuto per verificare la bontà del progetto,

2. Realizzazione del progetto Il primo step consiste nel creare due vettori X ed Y costituiti da elementi scelti in maniera randomica in un range di interesse compreso tra [-5,5] per entrambi le variabili, questi valori costituiscono i punti su cui calcolare e addestrare la rete. N=100; s=10/N; X=(-5:s:4.9); Y=X; for i=1:N; for j=1:N; f(j,i)=sin((g+15)/60)*cos((m+6)/24)*exp(-(X(i)^2+Y( j)^2)/10); end end

s indica lo step o il passo, il quale è funzione di N (nel caso analizzato è 100), ovvero quanti punti vengono analizzati all’interno del set. Una volta effettuata questa scelta preliminare si ottiene la funzione da stimare mediante i comandi che seguono: figure();surf(X,Y,f); title( 'Funzione Realizzata' , 'color' , 'b' )

Page 3: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 3

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 3

Figura 1 Funzione Realizzata con N=100

Figura 2 Funzione Realizzata con N=40 come si può notare la gaussiana appare meno fitta in

quanto sono stati utilizzati un N più piccolo di punti

Page 4: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 4

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 4

Una volta realizzata la funzione sarà necessario campionarla in quanto lo scopo dell’esercizio è quello di ottenere due variabili xs ed ys costituite una volta da 100 e un’altra da 40 punti ciascuno prelevati casualmente nel range d’interesse. y=sqrt(5)*randn([1,N]); mxy=max(abs(y(:))); ys=5*(y/mxy); x=sqrt(5)*randn([1,N]); mxx=max(abs(x(:))); xs=5*(x/mxx);

La rete dunque avrà due ingressi (xs,ys), due layers aventi il primo dieci e il secondo un solo neurone. Per i neuroni del primo layer è stata scelta una funzione di tipo sigmoidale (tansig) mentre per il neurone del secondo layer una lineare (purelin). Di seguito è riportato il codice per la creazione della rete, ottenuta mediante il comando newff (new feed-forward), il quale contiene tute le caratteristiche della network:

p=[x_1;y_1]; net=newff(minmax(p),[10,1],{ 'tansig' , 'purelin' }, 'trainlm' );

minimax(p) indica alla rete di prendere i valori massimi e minimi degli ingressi, successivamente è definita la costituzione dei layer e le funzioni di attivazioni utilizzate per ogni strato, ed infine si sceglie l’algoritmo per l ‘addestramento. Solitamente il comando utilizzato è il TRAINGD ovvero il metodo del gradiente, ma in questo caso dal tool delle reti neurali si è scoperto un secondo algoritmo (TRAINLM) il quale approssima in maniera decisamente migliore problemi di questo tipo. Per avere un’idea più chiara del tipo di rete utilizzata è riportata un’immagine di essa.

Page 5: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 5

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 5

Figura 3Struttura della rete ff

La rete una volta creata ha bisogno di essere inizializzata, in modo tale da poter fissare i pesi sinaptici, questa scelta non è casuale in quanto potrebbe causare dei problemi al corretto funzionamento della rete. Solitamente i pesi vengono scelti nella regione lineare del neurone in modo da non rallentare eccessivamente il sistema. net.layers{1}.initFcn= 'initnw' ; net.layers{2}.initFcn= 'initnw' ; net=initlay(net);

La funzione initnw svolge proprio questo ruolo ed è proprio per questo motivo che viene preferita alla funzione initwb, la quale inizializza i pesi in maniera casuale. Infine prima di procedere con la nostra funzione, sono stati settati gli ultimi parametri i quali se non specificati sarebbero stati fissati di default. net.trainParam.show = 100; net.trainParam.lr = 0.05; net.trainParam.epochs =400; net.trainParam.goal = 1e-12;

� Lo show definisce la visualizzazione dei risultati del training (ogni

100 epoche). � Il learning rate indica il passo con cui l’algortitmo scelto si deve

muovere ottimizzare la funzione di costo.

� Le epochs rappresentano il numero di epoche entro le quali deve terminare l’addestramento.

N

N

N

N

X

Y

Z

W11

W21

W101

W12

W102

W22

f1

f2

f10

f11

W41

W42

W410

Page 6: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 6

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 6

� Il goal definisce un criterio di stop che prevede di terminare

l’addestramento se l’mse scende al di sotto di una soglia identificata nel nostro caso come 1e-12.

Sono stati definiti tutti i parametri utili per la risoluzione del problema di conseguenza è possibile effettuare il training della rete: for i=1:N; z(1,i)=sin((g+15)/60)*cos((m+6)/24)*exp(-(xs(1,i)^2+ys(1,i)^2)/10); end [net,tr]=train(net,p,z);

Il comando train prende al suo interno la rete creata (net), la matrice degli ingressi (p) e i target costruiti per la rete dalla funzione di partenza.Mentre restituisce il parametro tr, in cui sono immagazzinati i risultati del train, e net ovvero la rete addestrata. Sono state effettuate numerose prove ed è stato ritenuto opportuno per ottimizzare il train utilizzare un ciclo for (nel caso in questione un ciclo per un i pari a 5). Di seguito sono riportati i valori dei pesi e dei bias (o soglie) dei vari strati. w1=net.IW{1,1}; b1=net.b{1}; w2=net.lw{2,1}; b2=net.b{2};

L’ultimo passo del progetto è la validazione della rete, effettuata mediante la funzione sim. Come già detto in precedenza i valori di x e di y utilizza per il train vengono scartati

for i=1:N; for j=1:N; fott(i,j)=sim(net,[X(i);Y(j)]); end end

Page 7: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 7

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 7

Inoltre è stato caratterizzato e visualizzato l’errore, definito come la differenza tra la funzione desiderata e quella ottenuta ed il suo errore massimo preso in modulo: %% errore di stima err=f-fott; %errore massimo ottenuto err_m=max(abs(err(:))); Riportiamo i risultati ottenuti per N=40 e N=100:

Figura 4a Funzione Ottenuta per N=100

Page 8: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 8

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 8

Figura 4b Errore ottenuto per N=100

Figura 5a Funzione Ottenuta per N=40

Page 9: Addestramento rete neurale

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 9

Esercizi del corso di Reti Neurali per il Controllo: Esercizio1 Emanuele Duca 9

Figura 5b Errore per N=40

I risultati ottenuti cosi si può notare sono soddisfacenti, anche per N=40 la rete riesce a stimare a sufficienza la funzione di partenza. L’errore si mantiene intorno allo zero ad eccezione dei bordi.