Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Anthony Giorgio
1 Il percettrone
Nel campo dell’apprendimento automatico, una rete neurale (in inglese Neural Net-
work, siglato NN) è un modello computazionale composto di ”neuroni” artificiali,
ispirato dalla semplificazione di una rete neurale biologica.
Il neurone artificiale è un classificatore1 che mappa un vettore x = (x1 , ..., xn ) ∈
Rn in un valore di output g(x). Il modello matematico del neurone richiede 3
elementi di base:
Un insieme di sinapsi o connessioni, ciascuna delle quali è rappresentata da un
peso (efficacia sinaptica)
1
una mappatura da uno spazio discreto o continuo di features X a un insieme di etichette Y
1
Identifichiamo 5 tipi di funzioni di attivazione base:
1) Threshold function o Heaviside function: ossia la funzione a gradini
1 se x ≥ 0
g(x) =
0 se x < 0
3) Piecewise-linear function:
1 se x ≥ 12
g(x) = x se − 21 < x < 1
2
0 se x ≤ − 1
2
1
g(x) =
1 + e−x
2
se i pesi w e la soglia w0 sono determinati in modo tale che risulti:
wT xp − w ≥ 0 se y p = 1
0
(1)
wT xp − w < 0 se y p = −1
0
Dal punto di vista geometrico ciò si può interpretare come la ricerca di un iperpiano
di separazione H = {x ∈ Rn ; wT x = w0 } che separi gli insiemi:
L’esistenza di w,w0 che risolva il sistema può quindi essere assicurata se gli
insiemi A e B sono linearmente separabili. Si verifica che le condizioni (1) ammettono
soluzione se e solo se ammette soluzione il sistema
wT xp − w > 0 xp ∈ A
0
(2)
wT xp − w < 0 xp ∈ B
0
kxp k = 1, p = 1, ...P
3
1.1 Algoritmo di Rosenblatt
L’algoritmo di Rosenblatt fornisce un algoritmo di addestramento di tipo incre-
mentale che consente la determinazione di w a partire da T :
y p = sgn(wT xp ) p = 1, ..., P
w(k + 1) = w(k) + y p xp
dove
δ = min{y p wT xp } = min{sgn(wT xp )wT xp } > 0
p p
Poichè la (5) vale per ogni k e w(0) = 0, ragionando per induzione e usando la
4
disuguaglianza di Schwarz:
D’altra parte, tenendo conto del fatto che y p w(k)T xp ≤ 0 (poichè xp non è classificato
correttamente) e che ky p xp k = 1, si ha:
2 Reti multistrato
Le limitazioni del percettrone, ossia di reti costituite da un solo strato adattivo di
neuroni formali vengono superate da architetture costituite da più strati di neuro-
ni connessi in cascata, denominate reti multistrato. L’architettura di una rete
neurale multistrato può essere descritta definendo:
5
Indicheremo con l = 1, ..., L gli indici associati ai vari strati. A ciascun arco
orientato entrante nel neurone j dello strato l e uscente dal neurone i dello strato
(l)
l − 1 oppure dal nodo di ingresso i, è associato un peso wji che rappresenta l’entità
della connessione sinaptica.
Ciascun neurone formale si suppone caratterizzato da una funzione di attivazione
(l)
gj : R → R che opera su una combinazione lineare pesata degli ingressi e di un
(l)
valore di soglia wj0 .
(l) (l)
Indicando con aj la somma pesata degli ingressi e della soglia e con zj l’uscita
del neurone, per il neurone j dello strato 1 si può scrivere:
n
(1) (1) (1) (1) (1) (1)
X
aj = wji xi − wj0 , zj = gj (aj ) (9)
i=1
(l−1)
NX
(l) (l) (l) (l) (l) (l)
aj = wji xi − wj0 , zj = gj (aj ) (10)
i=1
avendo indicato con N (l) il numero di neuroni dello strato l. In output si otterrà un
vettore y = (y1 , ..., yK )
Nello specifico, se consideriamo una rete a due strati con un solo strato nascosto
di N neuroni con funzione di attivazione g e uno strato d’uscita di K neuroni con
funzione di attivazione σ, si ottiene
N
X n
X
(2) (1) (1) (2)
yk (x, W1 , W2 ) = σ wkj g wji xi + wj0 + wk0 (11)
j=1 i=1
dove tutti i pesi e i parametri soglia sono stati raggruppati in un opportune matrici
W1 (pesi e soglie tra lo strato di input e lo strato nascosto) e W2 (pesi e soglie tra
lo strato nascosto e lo strato di output). Come visto precedentemente, includendo
6
il parametro soglia nella sommatoria e definendo un input addizionale x0 = 1 si
ottiene:
N
X n
X
(2) (1)
yk (x, W1 , W2 ) = σ wkj g wji xi (11)
j=0 i=0
T = {(xp , y p ), xp ∈ Rn , y p ∈ RK , p = 1, ..., P }
metodi batch in cui ad ogni passo i pesi vengono aggiornati utilizzando infor-
mazioni relative a tutti i campioni dell’insieme di addestramento T . Essi sono
riconducibili a metodi di ottimizzazione non vincolata per la minimizzazione
di E.
metodi on-line in cui ad ogni passo i pesi vengono aggiornati tenendo conto
soltanto di un singolo campione T .
7
BP batch, in cui i pesi vengono aggiornati dopo la presentazione di tutti i
campioni del training set T.
wk+1 = wk − η∇E(wk )
(0) (L)
zi = xi , i = 1, ..., n zi = yi , i = 1, ..., K
Per semplificare le notazioni omettiamo gli indici relativi ai diversi strati. Sia wji
il peso di un arco entrante nel neurone j di uno strato. Utilizzando le regole di
derivazione di può porre:
∂Ep ∂Ep ∂aj
=
∂wji ∂aj ∂wji
Definendo
∂Ep
δj =
∂aj
X
e ricordando che aj = wjh zh , si ha:
h
∂Ep
= δ j zi
∂wji
zi è l’uscita del neurone i o l’ingresso i-esimo del neurone dello strato successivo
e si determina, a partire allo strato di ingresso, applicando successivamente le
trasformazioni definite dalla rete (propagazione in avanti degli ingressi)
8
(a) il neurone appartiene allo strato d’uscita
(b) il neurone appartiene a uno strato nascosto
Nel caso (a), sia k l’indice di un neurone d’uscita. Si ha che yk = g(ak ) e quindi
si può scrivere
∂Ep ∂Ep
δk := = g 0 (ak )
∂ak ∂yk
∂Ep
essendo g 0 (ak ) la derivata della funzione di attivazione e ∂yk calcolabile analitica-
mente.
Nel caso (b), sia j l’indice di un neurone nascosto. Si ha:
dove la somma è estesa a tutti i neuroni (nascosti o d’uscita) che ricevono segnali
dal neurone j. (Ep dipende da aj solo attraverso la dipendenza da ak ).
Essendo ak = ... + wkj zj + ... = ... + wkj g(aj ) + ... si ha:
∂ak
= g 0 (aj )wkj
∂aj
Ne segue che gli errori δj relativi ai neuroni di uno strato, si ottengono propagando
all’indietro lungo la rete gli errori relativi ai neuroni dello strato successivo, a partire
dallo strato d’uscita (retro-propagazione degli errori).
X
La tecnica di backpropagation consente di calcolare ∇E = ∇Ep con un costo
p
O(P × W ) dove W è il numero di parametri, P il numero di pattern.
La scelta del fattore di apprendimento η influenza molto il comportamento del-
l’algoritmo, infatti se scegliamo valori troppo piccoli, la convergenza sarà lenta,
mentre se scegliamo valori troppo grandi si rischia di avere una rete instabile con
comportamento oscillatorio. Un metodo semplice per incrementare il fattore di ap-
prendimento senza il rischio di rendere la rete instabile è quello di modificare la
regola di aggiornamento inserendo il momento:
9
3.2 Algoritmo di Backpropagation
(0) (0)
Dati input: (xp , y p ) ∈ Rn × RK . Poni zi = xpi , i = 1, ..., n e zn+1 = −1.
For l = 1, ..., L
End For
(l)
Poni zN (l) +1 = −1
End For
For i = 1, ..., K
(L)
poni ei = zi − yip
End For
Retro-propagazione dell’errore
For j = 1, ..., K
(L) (L)
δj = ej gj0 (aj )
End For
For l = L − 1, ..., 1
End For
End For
10
3.3 Criteri d’arresto
Non esistono criteri d’arresto ben definiti. Ne citiamo 3:
L’immagine è definita dai 784 elementi successivi che indicano i valori dei
pixel che compongono l’immagine.
11
Il seguente script effettua il train di una rete neurale con due strati nascosti dei
quali si può scegliere il numero di neuroni e uno strato di output di 10 neuroni.
Viene utilizzato l’algoritmo di backpropagation e la discesa stocastica del gradiente
con mini-batch, per aggiornare i valori dei pesi e delle soglie. Si tratta di una
variante ampiamente utilizzata che rappresenta un approccio intermedio tra la SGD
on-line e SGD batch. Essa prevede di calcolare il gradiente su un sottoinsieme di
elementi del dataset ad ogni iterazione, invece che su un singolo elemento. Ciò rende
l’evoluzione della funzione costo nel corso delle iterazioni meno rumorosa, in quanto
il gradiente ad ogni iterazione diventa la media di ogni mini-batch, risultando in un
effetto di smoothing, e riducendo il costo computazionale, consentendo una migliore
vettorizzazione del codice. La dimensione del mini-batch è scelta dall’utente. Il train
è effettuato su un numero di epoche a scelta. La funzione di attivazione per ogni
neurone è la sigmoide.
1 data = load ( ' m n i s t t r a i n . csv ' ) ;
2 e t i c h e t t e = d a t a ( : , 1 ) ; %s e p a r o n e i d a t i e t i c h e t t e e i m m a g i n i
3 y = zeros (10 ,60000) ;
4 f o r i = 1:60000
5 y ( e t i c h e t t e ( i ) +1 , i ) = 1 ; %S c r i v e 1 n e l l a p o s i z i o n e i n d i c a n t e i l numero c o r r e t t o
6 end
7 immagini = data ( : , 2 : 7 8 5 ) ;
8 i m m a g i n i = i m m a g i n i / 2 5 5 ; %r e n d o i l v a l o r e d e l p i x e l un numero t r a 0 e 1
9 i m m a g i n i = immagini ' ; %v e t t o r i d i i n p u t
10 hn1 = i n p u t ( ' I n s e r i s c i i l numero d i n e u r o n i n e l primo s t r a t o n a s c o s t o : ' ) ;
11 hn2 = i n p u t ( ' I n s e r i s c i i l numero d i n e u r o n i d e l s e c o n d o s t r a t o n a s c o s t o : ' ) ;
12 %I n i z i a l i z z a z i o n e d i p e s i e s o g l i e
13 w12 = randn ( hn1 , 7 8 4 ) * s q r t ( 2 / 7 8 4 ) ;
14 w23 = randn ( hn2 , hn1 ) * s q r t ( 2 / hn1 ) ;
15 w34 = randn ( 1 0 , hn2 ) * s q r t ( 2 / hn2 ) ;
16 b12 = randn ( hn1 , 1 ) ;
17 b23 = randn ( hn2 , 1 ) ;
18 b34 = randn ( 1 0 , 1 ) ;
19 %l e a r n i n g r a t e
20 e t a = i n p u t ( ' I n s e r i s c i L e a r n i n g Rate : ' ) ; %p r o v a 0 . 0 0 5
21 %numero d i e p o c h e p e r l ' a d d e s t r a m e n t o
22 e p o c h s = i n p u t ( ' I n s e r i s c i i l numero d i e p o c h e d ' ' a d d e s t r a m e n t o : ' ) ;
23 m = i n p u t ( ' I n s e r i s c i i l v a l o r e d e l mini−b a t c h : ' ) ; %p r o v a 10
24 %i n i z i a l i z z a z i o n e v e t t o r e p e r g r a f i c o d e l l ' andamento d e l l ' e r r o r e
25 g r a f i c o 1 = z e r o s ( epochs , 1 ) ;
26 %g r a d i e n t e s t o c a s t i c o con mini−b a t c h
27 f o r k = 1 : epochs
28
29 prove = 1 ;
30 %i n i z i a l i z z o l ' e r r o r e dell ' epoca
31 erroretot1 = 0;
32
33 for j = 1 : 6 0 0 0 0 /m
34 %I n i z i a l i z z a z i o n i d i v e t t o r i errore e gradienti
35 errore4 = zeros (10 ,1) ;
36 e r r o r e 3 = z e r o s ( hn2 , 1 ) ;
37 e r r o r e 2 = z e r o s ( hn1 , 1 ) ;
38 erroretot4 = zeros (10 ,1) ;
39 e r r o r e t o t 3 = z e r o s ( hn2 , 1 ) ;
40 e r r o r e t o t 2 = z e r o s ( hn1 , 1 ) ;
41 grad4 = z e r o s ( 1 0 , 1 ) ;
42 g r a d 3 = z e r o s ( hn2 , 1 ) ;
43 g r a d 2 = z e r o s ( hn1 , 1 ) ;
44 f o r i = p r o v e : p r o v e+m−1
45
46 %P r o p a g a z i o n e i n a v a n t i dell ' ingresso
47 z1 = immagini ( : , i ) ;
48 a2 = w12 * z 1 + b12 ;
49 z 2 = s i g m o i d ( a2 ) ;
50 a3 = w23 * z 2 + b23 ;
51 z 3 = s i g m o i d ( a3 ) ;
12
52 a4 = w34 * z 3 + b34 ;
53 z 4 = s i g m o i d ( a4 ) ; %v e t t o r e di output
54
55 %b a c k p r o p a g a t i o n ( R e t r o p r o p a g a z i o n e d e l l ' e r r o r e )
56 e r r o r e 1 = ( norm ( z4−y ( : , i ) ) ˆ 2 ) / 2 ; %c a l c o l o l ' e r r o r e
57
58 e r r o r e 4 = ( z4−y ( : , i ) ) . * s i g m o i d g r a d ( a4 ) ;
59 e r r o r e 3 = ( w34 ' * e r r o r e 4 ) . * s i g m o i d g r a d ( a3 ) ;
60 e r r o r e 2 = ( w23 ' * e r r o r e 3 ) . * s i g m o i d g r a d ( a2 ) ;
61
62 e r r o r e t o t 1 = e r r o r e t o t 1 + e r r o r e 1 ; %sommo g l i errori
63
64 erroretot4 = erroretot4 + errore4 ;
65 erroretot3 = erroretot3 + errore3 ;
66 erroretot2 = erroretot2 + errore2 ;
67 g r a d 4 = g r a d 4 + e r r o r e 4 * z3 ' ;
68 g r a d 3 = g r a d 3 + e r r o r e 3 * z2 ' ;
69 g r a d 2 = g r a d 2 + e r r o r e 2 * z1 ' ;
70
71 end
72
73 %G r a d i e n t descent
74 w34 = w34 − eta * grad4 ;
75 w23 = w23 − eta * grad3 ;
76 w12 = w12 − eta * grad2 ;
77 b34 = b34 − eta * e r ro r e t ot4 ;
78 b23 = b23 − eta * e r ro r e t ot3 ;
79 b12 = b12 − eta * e r ro r e t ot2 ;
80
81 p r o v e = p r o v e + m;
82
83 end
84 f p r i n t f ( ' Epoca : ' ) ;
85 d i s p ( k ) %m o s t r o i l numero d i e p o c a
86
87 %S a l v o l ' e r r o r e p e r l a v i s u a l i z z a z i o n e grafica
88 grafico1 (k ,1) = erroretot1 ;
89
90 [ immagini , y ] = r i m e s c o l o ( immagini , y ) ; %r i m e s c o l o l ' ordine per l ' epoca successiva
91 end
92 d i s p ( ' Apprendimento c o m p l e t a t o ! ' )
93 k0 = l i n s p a c e ( 1 , e p o c h s , e p o c h s ) ;
94 %V i s u a l i z z a z i o n e g r a f i c a d e l l ' e r r o r e
95 p l o t ( k0 , g r a f i c o 1 , '−b ' )
96 %S a l v a t a g g i o p a r a m e t r i i n f i l e
97 s a v e ( ' w f o u r . mat ' , ' w34 ' ) ;
98 s a v e ( ' w t h r e e . mat ' , ' w23 ' ) ;
99 s a v e ( ' wtwo . mat ' , ' w12 ' ) ;
100 s a v e ( ' b f o u r . mat ' , ' b34 ' ) ;
101 s a v e ( ' b t h r e e . mat ' , ' b23 ' ) ;
102 s a v e ( ' btwo . mat ' , ' b12 ' ) ;
1 function f r = sigmoid ( x )
2 f = zeros ( length (x) ,1) ;
3 for i = 1: length (x)
4 f ( i ) = 1/(1+ exp(−x ( i ) ) ) ;
5 end
6 fr = f ;
7 end
1 f u n c t i o n [ B , v ] = r i m e s c o l o (A, y )
2 c o l o n n e = s i z e (A, 2 ) ;
3 P = randperm ( c o l o n n e ) ;
4 B = A ( : , P) ;
5 v = y ( : , P) ;
6 end
13
Se si testa la rete con 30 e 20 neuroni per gli strati nascosti, per 50 epoche con
mini-batch 10 e learning rate 0.005 si ottiene il seguente andamento dell’errore:
14
42 end
43 f p r i n t f ( ' Accuratezza : ' ) ;
44 f p r i n t f ( '%f ' , s u c c e s s o /n * 1 0 0 ) ;
45 disp ( ' %' ) ;
Utilizzando i parametri sopra indicati si ottiene nel test un’accuratezza del 96%.
Riferimenti bibliografici
[1] Christopher M. Bishop. Patteren Recognition and Machine Learning. Springer,
2006.
15