In questa lezione faremo vedere:
Si può dimostrare che addestrare la rete andando a minimizzare la funzione di errore
E=∑n∑k[yk(xn,w)-tkn]2/2
corrisponde ad avere un valore di output dei nodi di output della rete, dato un pattern x, interpretabile come media condizionata su x dei vettori target del training set, cioè
yk(x,w*)=<tk/x>=∫ tk p(tk/x) dtk
Dove w* è il valore dei pesi (e dei bias) al termine del processo di apprendimento.
L’affermazione precedente è vera sotto le seguenti due ipotesi:
Sotto le ipotesi fatte, l’errore può essere scritto come:
E = limN→+∞ ∑ n=1..N ∑ k=1..d [yk(xn,w) -tkn]2/2N
Al limite di N che tende all’infinito, allora tale formula può essere riscritta nel continuo come
E=(1/2) k=∑ k=1..d ∫ ∫ yk(x,w) -tk]2 p(tk/x) p(x)dtkdx
Se Definiamo
Possiamo scrivere [yk -tk]2 come
Dalla formula
[yk -tk]2 =[ynk - <tk/x>]2+[<tk/x>-tk]2+ 2[ynk - <tk/x>][<tk/x>-tk]
Possiamo, allora, dedurre
E=(1/2)∑ k=1..d ∫∑yk – <tk/x>]2 p(x) dx+(1/2)∑ k=1..d ∫[<t2k/x>- <tk/x>2] p(x) dx
Osserviamo che il secondo termine è indipendente dai parametri della rete.
Quindi minimizzare E significa rendere minimo il primo termine, il quale diventerà nullo se e solo se yk – <tk/x>=0.
Allora il vettore di pesi w* che rende minimo E sarà tale che:
yk(x,w*)= <tk/x>
Facciamo un esempio in matlab.
Mostreremo:
Esempio di training set
Supponiamo di avere un training set ottenuto da una funzione seno con un forte rumore sui dati. In figura gli elementi in blue rappresentano i target, in rosso è il valore reale del seno.
Nota che: I valori target si distribuiscono in maniera gaussiana intorno al valore reale.
Esempio di training set
Il training set in figura è ottenuto con la seguente funzione matalab:
function [x t mean]= exTS(num)
x=[0:0.1:1];
for i=1:num
x=[x x];
end
mean=sin(2*pi*x);
t=mean +0.2*randn(1,length(x));
end
Il training set e la figura sono ottenuti eseguendo::
[x t mean]= exTS(10);
hold on;
plot(x,t,'*');
plot(x,mean,'r*');
Supponiamo ora di creare una rete neurale a due strati di pesi e di addestrala su tale training set.
A tal fine realizziamo le seguenti funzioni in codice matalb:
function [W1 b1 W2 b2]=newML(d,m,c)
. Una funzione per creare la rete con pesi e bias inizialmente scelti random.function [y z]=forwardProp(W1,b1,W2,b2,x)
. Una funzione per la propagazione in avanti.function [W1 b1 W2 b2 err]=learningByBackProp(W1,b1,W2,b2,XTS,YTS,maxC,eta)
. Una funzione per la fase di apprendimento.Più nel dettaglio …
Codice matlab per la creazione della rete
function [W1 b1 W2 b2]=newML(d,m,c)
W1=rand(m,d)*2-1;
b1=rand(1,m)*2-1;
W2=rand(c,m)*2-1;
b2=rand(1,c)*2-1;
W1 e b1 sono i pesi e i bias del primo strato.
W2 e be sono i pesi e i bias del secondo strato.
d, m e c sono la dimensione dell’input, il numero di nodi interni e il numero di nodi di output, rispettivamente.
Codice matlab per la propagazione in avanti.
function [y z]=forwardProp(W1,b1,W2,b2,x)
% x is a m-by-n matrix
[N d]=size(x);
m=size(W1,1);
c=size(W2,1);
z=zeros(N,m);
y=zeros(N,c);
for n=1:N
z(n,:)=x(n,:)*W1';
z(n,:)=z(n,:)+b1;
z(n,:)=sigmoid(z(n,:));
y(n,:)=z(n,:)*W2';
y(n,:)=y(n,:)+b2;
end
y e z sono i valori di output dei nodi di output e dei nodi interni, rispettivamente.
Utilizzando le funzioni precedentemente implementate, ad esempio:
[W1 b1 W2 b2]=newML(1,3,1);
[W1_n b1_n W2_n b2_n err]=learningByBackProp(W1,b1,W2,b2,x',y', 100,0.1);
y=forwardProp(W1_n,b1_n,W2_n,b2_n,x');
Hold on;
plot(x,t,'*');
plot(x,mean,'r*');
plot(x,y','go');
Otteniamo il grafico in figura, dove i cerchi in verde rappresentano la risposta della rete sul training set dopo un sol ciclo di apprendimento.
Eseguendo un apprendimento per 10 cicli:
[W1 b1 W2 b2]=newML(1,3,1);
[W1_n b1_n W2_n b2_n err]=learningByBackProp(W1,b1,W2,b2,x’,y’, 10,0.1);
y=forwardProp(W1_n,b1_n,W2_n,b2_n,x’);
Otteniamo il grafico in figura, dove i cerchi in verde rappresentano la risposta della rete sul training set dopo un sol ciclo di apprendimento, in giallo dopo 10 cicli.
Si osservi come all’aumentare dei cicli di apprendimento, e quindi minimizzando sempre più la funzione di errore, la risposta della rete tende a convergere verso la media dei target, fissato l’input.
Alcune osservazioni
Si fa notare che non abbiamo utilizzato il validation set, poiché si è voluto concentrare l’attenzione sulla interpretazione che abbiamo dato all’output della rete.
Per lo stesso motivo, il codice matlab mostrato è solo di esempio e puo’ essere reso più efficiente.
1. Informazioni generali sul corso
3. Un modello computazionale del neurone biologico
4. Possibili problemi risolvibili con Reti Neurali
5. Problemi di Classificazione ed approccio probabilistico
7. Capacità rappresentativa delle reti neurali - parte prima
8. Capacità rappresentativa delle reti neurali - Parte seconda
9. Apprendimento e generalizzazione
10. Discesa del gradiente e backpropagation
11. Back-Propagation
13. Interpretazione output di una rete neural feed-forward
14. Complessità della rete, generalizzazione e termini di regolari...
15. Cross-entropy e variazioni sulla discesa del gradiente
16. Verso le reti neurali RBF: interpolazione esatta.
17. Reti neurali RBF
18. Addestramento di una rete RBF
19. Parametri delle funzioni a base radiale
20. Un primo modello di reti neurali ricorrenti: formalismo di Caia...