Sei sulla pagina 1di 9

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:

g + 15 m + 6 −( x 2 + y 2 ) /10
f ( x, y ) = sin( )cos( )e (1)
60 24

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.

−( x 2 + y 2 ) /10
f ( x, y ) = sin(0.75)cos(0.67)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
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 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
ropt = 1 − (2)
2W

W rappresenta il numero dei pesi sinaptici ed ropt 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')

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 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

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 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.

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 5

W11
X N f1
W21 W41
f11
f2
N W42 N Z
W12
W410
W22 W101 f10
Y N
W102

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.

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 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

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 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

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 8

Figura 4b Errore ottenuto per N=100

Figura 5a Funzione Ottenuta per N=40

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 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.

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

Potrebbero piacerti anche