Nella lezione precedentemente abbiamo visto che un problema di classificazione può essere visto in termini di un insieme finito di funzioni discriminanti.
Tale problema, allora, si riduce ad un problema di approssimazione di funzione.
In generale, allora, possiamo porci il problema di approssimare la funzione
f: x∈Rd → f(x) ∈ Rc
tramite una funzione parametrizzata,
g : w∈Rp, x∈Rd → g(x;w) ∈ Rc
dove w è un vettore di p parametri.
Vogliamo, quindi, modellare la funzione f(x) tramite g(x;w).
A tale scopo è n ecessario:
Verificare che effettivamente g(x;w) abbia la capacità di rappresentare f(x) .
Una volta che si è appurato che g(x;w) ha la capacità di rappresentare f(x) è necessario trovare un procedimento che ci permetta di trovare il “corretto” valore w= w* per approssimare f(x).
A tale fine, in genere, abbiamo un insieme di esempio, TS, di coppie di valori (x1,f(x1)=t1), (x2,f(x2)=t2), …, (xn,f(xn)=tn) e la determinazione di w corrisponde a determinare il valore w= w* tale che g(x1,w*)=t1, g(x1,w*)=t1,…, g(xn,w*)=tn.
Il processo tramite il quale sono determinati i parametri w* è detto learning o training, e, per tale motivo, TS è detto training set.
Per risolvere un problema di approssimazione di una funzione tramite reti neurali dobbiamo, allora:
Possiamo caratterizzare molti modelli di rete neurale tramite le seguenti proprietà:
Detto wh il vettore dei pesi delle connessioni che arrivano su h e o il vettore degli output dei nodi k che hanno connessioni che partono da k e arrivano su h, l’input input ih è pari a ih= sh(wh, o ). Normalmente si ha: ih= ∑k whk*ok
Ciascun ah è pari a ah= gh (ih , bh)
Ciascun oh è pari a ah= fh (ah, bh)
Una sequenza di attivazione dei nodi, cioè l’ordine tramite il quale sono calcolati i valori di output dei nodi. Sequenze di attivazione possibili possono essere sincrone o asincrone.
Un sottoinsieme dei nodi di S, in genere, sono marcati come nodi di output e i restanti nodi sono detti nodi interni o nascosti (hidden).
Reti Feed-forward
Una modello classico di reti neurali sono le reti neurali feed-forward.
Queste hanno la proprietà di non avere cicli.
Possiamo dire che una rete neurale è feed-forward se gode della seguente proprietà: E’ possibile associare numeri successivi agli input e a tutti i nodi tale che ciascuna nodo possa riceve connessioni solamente dagli input o da un nodo avente un numero associato più piccolo.
La sequenza di attivazione è asincrona e segue l’ordine topologico stabilito dalle connessioni.
Allora, l’output di un nodo h di una rete feed-forward è dato da:
zh= fh (∑k whk*zk + bh)
Dove la somma va su tutti gli input e i nodi k che inviano connessioni ad h.
(In questo caso abbiamo supposto che la funzione di attivazione sia pari all’identità.
Forward-propagation
Per un dato insieme di valori dell’input della rete, successive applicazioni di
zh= fh (∑k whk*zk + bh)
permettono l’attivazione di tutti i nodi della rete, inclusi i nodi di output.
Questo processo puo’ essere visto come una propagazione in avanti (forward propagation) di segnali attraverso la rete (secondo l’ordine topologico stabilito dalle connessioni).
Osserviamo che il parametro di bias può essere interpretato come se ci fosse un ulteriore nodo, sempre con valore di output pari a 1, che invia una connessioni ai nodi h, quindi possiamo scrivere:
zh= fh (∑k whk*zk )
dove la somma, stavolta, è anche estesa al parametro di bias ponendo wh0=bh.
Importante !
Tali reti, allora, hanno la proprietà che le attivazioni dei nodi di output possono essere espresse come funzioni deterministiche degli input e così l’intera rete rappresenta un mapping non lineare tra uno spazio d-dimensionale ad uno spazio c-dimensionale con parametri dati da i pesi della rete.
Reti neurali a strati
Nella classe di reti feed-forward una sottoclasse fondamentale sono le reti neurali organizzate a strati (o layer). In questo caso la rete è suddivisa in r sottoinsiemi disgiunti l1, l2, …lr (strati, layer) tale che ci sono solamente connessioni che vanno dagli input ai nodi appartenenti a l1 e connessioni che vanno dai nodi appartenenti a lj-1 ai nodi appartenenti a lj con j=2,3, …,r. I nodi appartenenti a lr sono i nodi di output i restanti nodi sono i nodi interni. Osserviamo che una rete a r strati di nodi può essere vista come una rete di r strati di pesi. Nella classe delle reti neurali a strati feed-forward è possibile ancora individuare le reti full-connected.
In questo caso ciascun neurone di uno strato invia connessioni a tutti i neuroni dello strato successivo.
Quindi una rete neurale Feed-Forward è esprimibile come una funzione parametrizzata g(x;w) che ha come dominio uno spazio d-dimensionale , come codominio uno spazio c-dimensionale e come parametri tutti i pesi della rete più i bias dei nodi.
Una osservazione (1)
Notiamo che se le funzioni di output di tutti i nodi interni sono funzioni lineari allora esiste sempre una rete neurale equivalente senza nodi interni.
Supponendo, infatti, che:
possiamo scrivere:
zh= f (∑k w’hkxk ) (con f lineare), per i nodi interni
ym= f1(∑h w”mhzh ) = f1(∑h w”mh f(∑k w’hkxk ))= f1(∑h w”mh ∑k f( w’hk)xk )),
per i nodi di output
Una osservazione (2)
Quindi:
ym= f1(∑h∑k w”mh f( w’hk)xk)= f1(∑kxk∗∑h w”mh f( w’hk))
ym= f1(∑k wmk xk)
avendo posto wmk=∑h w”mh f(w’hk).
In questo modo possiamo ottenere una rete equivalente senza nodi interni.
Importante
Questo significa che da ora in avanti considereremo sempre reti neurali con nodi interni con funzione di output (o funzione di attivazione) non lineare..
Inoltre …
Da ora in avanti supporremo sempre che una tra la funzione di attivazione e la funzione di output coincida con la funzione identità.
Alcune funzioni di output
La sigmoide:
s(x) = 1/(1+e-x)
Tale funzione è limitata nel range (0,1).
Per x=0 assume valore pari ad ½
Esempio di implementazione in matlab:
x=[-10:0.1:10];
y=1 ./ (1+exp(-x));
plot(x,y)
Alcune funzioni di output
tanh(x)= (1 -e-2x)/(1 + e-2x)
Ha la stessa forma della sigmoide ma è limitata nel range (-1,1).
Esempio di implementazione in matlab:
x=[-10:0.1:10];
y= (1-exp(-2*x))./ (1+exp(-2*x));
plot(x,y)
Relazione tra sigmoide e tanh
Osserviamo che s(x) differisce da tanh(x) solo per una trasformazione lineare:
2s(2x)-1=tangh(x)
infatti
2s(2x)-1= 2/(1+ e-2x) -1 =
[2-(1+ e-2x)]/(1+ e-2x) =
(1- e-2x)/ (1+ e-2x) =
ex (1- e-2x)/ ex (1+ e-2x) =
(ex – e-x)/ (ex + e-x) = tanh(x)
quindi una rete neurale con funzione di attivazione pari a s(x) è equivalente a una rete neurale con funzione di attivazione pari a tanh(x) ma con pesi e bias differenti.
Nella prossime lezioni, vedremo:
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...