Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Roberto Prevete » 13.Interpretazione output di una rete neural feed-forward


Introduzione

In questa lezione faremo vedere:

  • Una interpretazione dell’output della rete.
  • Alcuni esempi per chiarire tale interpretazione.

Interpretazione output di una rete neurale feed-forward

Si può dimostrare che addestrare la rete andando a minimizzare la funzione di errore

E=∑nk[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.

Interpretazione output di una rete neurale feed-forward (segue)

L’affermazione precedente è vera sotto le seguenti due ipotesi:

  • Il training set deve essere sufficientemente grande da poter approssimare un insieme infinito, cioè il numero di punti N→+∞.
  • La funzione realizzata dalla rete neurale yk(x,w) deve essere sufficientemente generale, cioè il numero di nodi hidden deve essere sufficientemente grande.

Dimostrazione dell’interpretazione

Sotto le ipotesi fatte, l’errore può essere scritto come:

E = limN→+∞n=1..Nk=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

Dimostrazione dell’interpretazione (segue)

Se Definiamo

  • <tk/x>=∫ tk p(tk/x) dtk
  • <t2k/x>=∫ t2k p(tk/x) dtk

Possiamo scrivere [yk -tk]2 come

  • [yk -tk]2 = [yk - <tk/x>+<tk/x>-tk]2
  • [yk -tk]2 =[yk - <tk/x>]2+[<tk/x>-tk]2+ 2[yk - <tk/x>][<tk/x>-tk]

Dimostrazione dell’interpretazione (segue)

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>

Un esempio in matlab

Facciamo un esempio in matlab.

Mostreremo:

  • Un esempio di training set.
  • Un esempio di implementazione in matlab della propagazione in avanti della rete.
  • Un esempio di implementazione in matlab del processo di apprendimento.
  • Esempi della risposta della rete.

Un esempio in matlab: training set

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

Esempio di training set con rumore


Un esempio in matlab: training set (segue)

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*');

Esempio di training set con rumore

Esempio di training set con rumore


Un esempio in matlab: Creazione, forward e training

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 …

Un esempio in matlab: Creazione della rete

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.

Un esempio in matlab: forward-propagation

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.

Un esempio in matlab: learning – Codice matlab per la fase di apprendimento (1)


Un esempio in matlab: learning (segue) – Codice matlab per la fase di apprendimento (2)


Un esempio in matlab: learning (segue) – Codice matlab per la fase di apprendimento (3)


Un esempio in matlab: risposta della rete

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.

Esempio di risposta della rete (in verde) dopo pochi cilci di apprendimento

Esempio di risposta della rete (in verde) dopo pochi cilci di apprendimento


Un esempio in matlab: risposta della rete (segue)

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.

Esempio di risposta della rete (in verde) dopo pochi cilci di apprendimento, in giallo dopo 10 cicli

Esempio di risposta della rete (in verde) dopo pochi cilci di apprendimento, in giallo dopo 10 cicli


Un esempio in matlab

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.

Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion