Sei sulla pagina 1di 43

Istituto di Istruzione Superiore M.

Buonarroti Via Velio Spano, 7 09036 Guspini (VS

Le Reti Neurali Artificiali


Gia!o"o #rudu $lasse %&' Industriale 'nno s!olasti!o (0)0 (0))

*ttp+,,---.*a!./our"ind.or0,

II

Premessa
L'obiettivo di questa tesi fornire al lettore le conoscenze necessarie a comprendere e a progettare una rete neurale artificiale di tipo feedforward. Ho scelto di trattare questo argomento perch da sempre suscita in me grande interesse e perch desideravo produrre un documento che fosse utile a chiunque volesse avvicinarsi per la prima volta a questi innovativi sistemi per il trattamento dell'informazione. Ho trovato diversa documentazione sul Web, alcune tesi di laurea, per la maggior parte in lingua inglese, e alcuni tutorial strettamente pratici, ma non un unico documento che introducesse le reti neurali artificiali in modo chiaro e sufficientemente preciso. Non sono sicuro di esserci riuscito e non ho alcuna pretesa in merito. nzi, il tempo a mia disposizione era limitato ed giusto ribadire che io !autore" non ho alcuna competenza particolare, se non la #passione per il sapere$ e la determinazione a migliorarmi. %l documento suddiviso sostanzialmente in tre parti& un capitolo introduttivo, che descrive in termini generici il modello computazionale a partire dai suoi fondamenti biologici' un capitolo sugli aspetti teorici, che fornisce al lettore le basi matematico(scientifiche necessarie a comprendere il funzionamento delle reti neurali artificiali' ed una parte conclusiva, nella quale presentata la libreria Serotonina insieme ad un esempio di applicazione delle reti neurali artificiali. La parte teorica descrive alcuni modelli di rete neurale feedforward, a partire da quello pi) elementare, il percettrone, fino a quelli che sono considerati lo stato dell'arte, ossia le reti di percettroni multistrato che usano algoritmi di addestramento basati sulla Resilient Backpropagation. *gni paragrafo di questa sezione correlato da una semplice implementazione in linguaggio +,,. Serotonina una libreria libera per la creazione e la gestione di reti neurali artificiali feedforward ed stata scritta come parte integrante del lavoro svolto in questa tesi. -li esempi contenuti in questo documento, infatti, sono stati scritti all'insegna della semplicit. didattica e non secondo le rigide regole dell'efficienza e degli standard. /erotonina costituisce da questo punto di vista una buona base di partenza per chi volesse avvicinarsi seriamente alla progettazione di reti neurali artificiali ad alte prestazioni. Le immagini presenti in questo documento sono state realizzate attraverso gli strumenti grafici di LibreOffice Writer 3.4, del software gnuplot 4.4 e di G !" #.$ .

III

Indice
010) Introduzione.................................................................................................................................) 010( 2onda"enti 3iolo0i!i...................................................................................................................) 010(+0) Il !er4ello u"ano...............................................................................................................) 010(+0( Il neurone 3iolo0i!o...........................................................................................................) 0103 5e reti neurali arti6i!iali...............................................................................................................3 0103+0) Il per!ettrone......................................................................................................................7 0103+0( Il per!ettrone (!odi!e ........................................................................................................8 0103+03 59apprendi"ento del per!ettrone.......................................................................................9 0103+07 59apprendi"ento del per!ettrone (!odi!e .......................................................................)( 0103+0% Il per!ettrone "ultistrato..................................................................................................)6 0103+06 Il per!ettrone "ultistrato (!odi!e ...................................................................................)9 0103+07 59al0orit"o di retropropa0azione dell9errore...................................................................(( 0103+08 59al0orit"o di retropropa0azione dell9errore (!odi!e .....................................................(% 0103+09 5a retropropa0azione elasti!a..........................................................................................(9 0103+)0 5e 6unzioni di tras6eri"ento............................................................................................3) 0107 5a li3reria Serotonina................................................................................................................37 0107+0) Installazione su siste"i G:;,5inu1................................................................................37 0107+0( Installazione su siste"i MS <indo-s.............................................................................37 0107+03 $reazione e addestra"ento di una rete neurale...............................................................3% 0107+07 ;n9appli!azione reale.......................................................................................................36 010% $on!lusione...............................................................................................................................38 0106 Bi3lio0ra6ia................................................................................................................................38

IV

0x01 Introduzione
+on il passare degli anni i computer si sono dimostrati strumenti estremamente efficaci nell'eseguire calcoli matematici e nella risoluzione di problemi strutturati, ossia in tutti quei compiti che richiedono la ripetizione di una serie di operazioni ben definite. /i tratta, infatti, di elaboratori se%uen&iali, fondati sul concetto di macc'ina di (uring0 e progettati per eseguire sequenze di calcoli numerici, anche a frequenze molto elevate !attualmente dell'ordine dei G)&". 1uttavia, apparentemente, queste macchine non sembrano essere in grado di svolgere quei lavori che per un essere umano appaiono estremamente semplici e immediati& distinguere un volto familiare in una foto, riconoscere un suono, identificare un fiore dal suo profumo, etc' sono tutti compiti che richiedono un'elevata capacit. di segmentazione dell'informazione, che non pu2 avvenire esclusivamente attraverso delle operazioni di basso livello !come ad esempio l'analisi delle variazioni di luminosit. in un'immagine o la ricerca di corrispondenze in un database". %l volto di una persona, ad esempio, pu2 apparire in infinite pose, con differenti espressioni e sotto diverse illuminazioni, senza contare che le immagini, come i suoni, sono soggette a #rumore 3$. 4er cui diventa estremamente complicato, se non del tutto impossibile, formalizzare questo tipo di problemi in un algoritmo di risoluzione sequenziale che possa essere inserito in un programma. 4er far fronte a questi limiti sono stati introdotti dei nuovi paradigmi computa&ionali* biologicamente ispirati, attraverso i quali stata possibile la realizzazione di #sistemi intelligenti$ per il trattamento dell'informazione, con capacit. di apprendimento, adattamento e 'uman+like reasoning. L'intelligen&a computa&ionale !o soft computing" la disciplina che studia questi nuovi paradigmi di ispirazione biologica e che comprende diversi modelli di elaborazione dell'informazione, tra i quali figurano le reti neurali artificiali, gli algoritmi evolutivi5 e i sistemi a logica fu&&,6.

0x02 Fondamenti biologici


0x02:01 Il cervello umano
%l cervello umano la struttura pi) complessa dell'universo conosciuto. Ha un peso di circa 0577( 0677 grammi ed un volume che va dai 0077 ai 0577 cm5. +on le sue ridotte dimensioni in grado di svolgere operazioni estremamente complesse& al suo interno, miliardi di unit. processanti, dette neuroni, sono interconnesse tra di loro per formare un'unica grande rete processante, chiamata appunto rete neurale !o rete neuronale". 8uesta singolare struttura consente al cervello di elaborare le informazioni in modo massivamente parallelo e distribuito e li conferisce, inoltre, la straordinaria capacit. di #generalizzare$ le soluzioni apprese, ossia la capacit. di risolvere un problema mai incontrato prima attraverso analogie con i problemi gi. imparati.

0x02:02 Il neurone biologico


%l neurone !o cellula neuronale", come abbiamo visto, l'unit. fondamentale del sistema nervoso. /i tratta di una cellula altamente differenziata e specializzata per la raccolta, l'integrazione e la conduzione di impulsi nervosi. ll'interno del cervello umano se ne trovano circa -.. miliardi, delle
) =ensata nel )936 dal "ate"ati!o in0lese Alan Turing, > un dispositi4o ideale in 0rado di risol4ere un nu"ero "olto 4asto di pro3le"i attra4erso una se?uenza di istruzioni. ( =erdita di in6or"azioni do4uta ad inter6erenze durante la di0italizzazione di un i""a0ine o di un suono. 3 ;n "etodo euristi!o ispirato al prin!ipio della selezione naturale di Charles Darwin. 7 Siste"i a lo0i!a poli4alente, !o"e alternati4a ai siste"i 3asati sulla lo0i!a tradizionale.

dimensioni di -. micron ciascuno. 9sistono tre classi principali di neuroni& i neuroni sensori, con sottotipi visivi, uditivi, olfattivi, tattili, etc' sono i neuroni incaricati di raccogliere gli stimoli dall'ambiente esterno e costituiscono l'input della rete neuronale' i neuroni motori o moto+neuroni, che controllano generalmente le fibre muscolari e che costituiscono l'output della rete neurale' i neuroni intermedi o inter+neuroni, connessi sia ai primi, sia ai secondi, sia ad altri inter( neuroni, che servono all'elaborazione vera e propria dell'informazione e alla sua trasmissione.

*gni neurone possiede un corpo cellulare, detto soma, dotato come tutte le cellule del patrimonio genetico dell'individuo !/01". :al soma si diramano una fibra nervosa principale, chiamata assone, lunga da un millimetro a un metro, e diverse fibre secondarie, dette dendriti. /ia le dendriti che l'assone si connettono a molti altri neuroni in punti detti sinapsi;.

Fig. 1: Struttura di un neurone biologico

1ali contatti possono essere di tipo eccitatorio o inibitorio e la loro eccitazione<inibizione avviene grazie all'emissione locale di speciali sostanze chimiche dette neurotrasmettitori !ad esempio& acetilcolina, dopamina, acido - = , etc". %l compito dei dendriti di ricevere l'informazione dai neuroni comunicanti !sotto forma di impulso nervoso" e di portarla verso il corpo cellulare' se la somma di tutti gli impulsi ricevuti, negativi e positivi, supera una certa soglia caratteristica, detta soglia di attiva&ione, il neurone invia in uscita un impulso corrispondente che, passando attraverso il suo assone, viene smistato alle dendriti di molti altri neuroni. 8uesto significa che il comportamento di ogni neurone influenzato da quello dei suoi vicini e che, di conseguenza, l'elaborazione dell'informazione determinata dal comportamento complessivo dell'intera rete. Non esiste perci2 un # grandmot'er cell$2 !un neurone della nonna", ovvero un neurone che da solo detiene le informazioni su nostra nonna, ma, al contrario, l'informazione delocalizzata nella topologia stessa della rete e nei pesi sinaptici> dei neuroni che la compongono.
% Si ipotizza !*e o0ni neurone del !er4ello u"ano a33ia !ir!a )0.000 !onnessioni !on altri neuroni, an!*e a lun0*e distanze, per un totale di ?uasi )0)7 sinapsi. ;n nu"ero da44ero i"pressionante. 6 #er"ine !oniato intorno al )968 dal pro6. Jerry Lettvin per illustrare l9in!onsistenza delle teorie pre!onnessioniste di66use 6ino a0li anni 980 !*e sostene4ano l9esistenza di una 0erar!*ia tra le reti del !er4ello tale !*e un sin0olo neurone potesse essere in 0rado di rappresentare !on!etti spe!i6i!i "a !o"plessi, !o"e addirittura il 4olto di una persona. 7 5a propriet@ e!!itatoria o ini3itoria di una sinapsi.

0x03 Le reti neurali artificiali


Le reti neurali artificiali !artificial neural net3ork, o pi) comunemente solo reti neurali" sono dei sistemi di elaborazione dell'informazione che cercano di riprodurre, pi) o meno in parte, il funzionamento dei sistemi nervosi biologici e, in particolare, i processi computazionali che avvengono all'interno del cervello umano durante le fasi di apprendimento e di riconoscimento. La caratteristica pi) importante di questi sistemi , appunto, quella di poter apprendere modelli matematico(statistici attraverso l'esperien&a, ossia tramite la lettura dei dati sperimentali, senza dover determinare in modo esplicito le relazioni matematiche che legano le soluzioni al problema. La rete neurale artificiale non viene quindi programmata, bens? #addestrata$ attraverso un processo di apprendimento basato su dati empirici. Ne deriva una modellistica di tipo #black bo4$ !scatola nera", che si contrappone a quella # 3'ite bo4$ !scatola bianca" perch non si conoscono le componenti interne al sistema e non possibile spiegare in termini logici come esso giunga ad un determinato risultato. 4er addestrare una rete neurale artificiale esistono tre grandi paradigmi di apprendimento& l'apprendimento supervisionato, in cui si utilizzano opportuni algoritmi atti a minimizzare l'errore di previsione della rete su un insieme finito di esempi tipici ripartiti in coppie input( output !detto training set"' esso pu2 essere di tipo online, se la correzione avviene in modo incrementale utilizzando un esempio alla volta, o di tipo batc', se la correzione dei pesi sinaptici effettuata sulla totalit. dell'errore degli esempi' se l'addestramento ha successo la rete impara a riconoscere la relazione implicita che lega le variabili di ingresso a quelle di uscita ed in grado di rispondere correttamente anche a stimoli che non erano presenti nell'insieme di addestramento' l'apprendimento non supervisionato, dove si ricevono le informazioni sull'ambiente esterno senza fornire alcuna indicazione sui valori di output, nel tentativo di raggruppare tali dati in cluster, riconoscendo sc'emi o patterns impliciti' l'apprendimento per rinfor&o, un paradigma pi) realistico e flessibile dei precedenti, in cui la rete interagisce direttamente con l'ambiente esterno che risponde attraverso stimoli positivi o negativi !#premi$ o #punizioni$" che guidano l'algoritmo nella fase di apprendimento' la rete viene quindi adattata in modo da aumentare le probabilit. di ottenere dei #premi$ e diminuire quelle di ricevere #punizioni$'

+ome quelle biologic'e, le reti neurali artificiali sono composte da un certo numero di unit. processanti che operano in parallelo. 8ueste unit. sono dette neuroni artificiali o neurodi e possono essere ripartite in pi) sottoinsiemi della rete, chiamati #strati$. % neurodi di uno strato e quelli di un altro possono comunicare tra di loro attraverso delle connessioni pesate simili alle sinapsi biologiche. %n base all'organizzazione di tali connessioni avremo& reti totalmente connesse, dove ogni neurone di uno strato connesso ad ogni neurone di un altro strato' reti par&ialmente connesse, dove ogni neurone di uno strato connesso ad un particolare sottoinsieme di neuroni di un altro strato' reti feedfor3ard, dove le connessioni trasportano il segnale solo in avanti' reti feedback !o reti ricorrenti5, dove le connessioni trasportano il segnale anche all'indietro. 3

*ppure in base al flusso dei segnali&

%l comportamento della rete neurale determinato da tutti questi fattori ed ogni tipo di rete adatto a svolgere determinati lavori. 10 1) 1( I0 I1 I2 H0 H1 H2 O0 O1 O2 /0 /) /( 10 1) 1( I0 I1 I2 O1 O0 /0 /)

Fig. ": #na rete $eed$orward a tre strati ed una rete $eed$orward ricorsiva a due strati

4er quanto riguarda le caratteristiche generali delle reti neurali, si pu2 riassumere dicendo che esse sono in grado di& apprendere per esempi, come si detto parlando del paradigma di apprendimento supervisionato' generali&&are le solu&ioni apprese, ovvero rispondere correttamente a stimoli simili a quelli usati durante l'addestramento' astrarre nuove solu&ioni, ossia rispondere correttamente a stimoli diversi da quelli usati per l'addestramento' trattare dati 6rumorosi2, ossia rispondere correttamente anche in presenza di dati alterati o parziali.

%n questa tesi, tuttavia, tratteremo unicamente le reti neurali feedfor3ard che sono sicuramente il modello di rete neurale pi) diffuso e che ben si adattano all'approssimazione di funzioni matematiche e all'interpolazione statistica.

0x03:01 Il percettrone
% primi a proporre una rete neurale per scopi computazionali furono !c7ulloc' e "itts nel 0@65, i quali idearono un neurone artificiale, composto essenzialmente da un combinatore lineare a soglia, in grado di calcolare semplici funzioni booleane. 1uttavia il prototipo di rete neurale pi) significativo fu sicuramente il percettrone pensato da 8. Rosenblatt nel 0@;A' questo modello, come vedremo tra poco, introdusse per la prima volta i pesi sinaptici variabili permettendo alla rete neurale di #apprendere$. %l percettrone !o perceptron" considerato il modello pi) semplice di rete neurale artificiale feedforward, pensato per il riconoscimento e la classificazione di forme !o patterns". /i tratta di una rete neurale artificiale composta da un singolo neurone, avente #n$ ingressi ed una sola uscita& 1) 1( ... 1n
Fig. : Sche!a del percettrone

-(

-n

'

%l neurone possiede una fun&ione di attiva&ione 612 e una fun&ione di trasferimento 6(2& la prima serve a calcolare il poten&iale di attiva&ione del neurone, corrispondente alla somma di tutti gli ingressi moltiplicati per i rispettivi pesi sinaptici' la seconda, invece, serve a calcolare il valore del 7

segnale di uscita sulla base del potenziale di attivazione ed scelta in funzione delle grandezze numeriche da trattare' nel percettrone originale era usata la fun&ione di trasferimento a gradino , la stessa che utilizzeremo in questo ambito. +on queste semplici premesse possibile scrivere la formula d'uscita del percettrone&
n

y = T ( w i %i ( )
i= )

Fig. ': #scita del percettrone

dove [ % ), % (, ... & % n ] sono gli ingressi, [ w), w(, ... & wn ] sono i rispettivi pesi sinaptici e , il valore dell'uscita' infine 9 rappresenta una soglia caratteristica del neurone, detta soglia di lavoro. La soglia di lavoro pu2 essere considerata anche come il peso sinaptico di un ingresso fittizio #n:-$ con valore unitario negativo, detto comunemente Bias. %n questo modo la formula di uscita del percettrone pu2 essere riscritta come segue&
n +)

y = T ( w i %i )
i= )

Fig. ): #scita del percettrone con l*ingresso $itti+io del ,ias

+ome facile intuire, questa rete neurale artificiale in realt. un classificatore in grado di svolgere semplici problemi di separazione lineare.

Fig. .: /se!pio di classi$ica+ione lineare in cui gli ele!enti di un insie!e vengono ripartiti in due classi di appartenen+a distinte

), se % 0 /cegliendo ad esempio la funzione di trasferimento T % = 0, se % 0 , che spinge il percettrone ad attivarsi solo quando il suo potenziale di attivazione maggiore di zero, l'uscita della rete sar. data dalla seguente espressione&
n+ )

wi % i = w) % )+ w( %(+ ...+ w n % n ( > 0


i =)

Fig. -: #scita del percettrone con $un+ione di tras$eri!ento booleana

/e consideriamo gli ingressi [ % ), % (, ... & % n ] come le coordinate di un punto 6"2 di un iperspazio ad #n2 dimensioni e i pesi [ w), w(, ... & wn ] come delle costanti numeriche, tale espressione identifica un iperpianoA !che diventa un piano per n;3 ed una retta per n;#" che suddivide lo spazio degli ingressi in due semispazi distinti.
8 ;n iperpiano > un estensione della 6i0ura 3idi"ensionale della retta e di ?uella tridi"ensionale del piano, una 6i0ura !on piB di tre di"ensioni.

w ) %) + w ( % (+... + w n % n( = 0
Fig. 4: 5perpiano dell*uscita del percettrone

8uesto significa che, scegliendo dei pesi sinaptici appropriati, possibile fare in modo che il neurone si attivi solo quando il punto 6"2 situato in una determinata regione dello spazio degli ingressi. 4er capire meglio come opera il percettrone analizziamo ora una semplice rete neurale a due ingressi ed una sola uscita in grado di svolgere la forma logica OR@. 1) 1(
)

-(

'

Fig. 2: 3ercettrone a due ingressi

La sua uscita data dalla solita espressione in 8ig < che, in questo caso specifico, individua un semipiano nello spazio bidimensionale degli ingressi, corrispondente all'area di attivazione del neurone.
n+ )

w i % i = w ) % ) + w ( %( ( > 0
i =)

Fig. 16: #scita del percettrone a due ingressi

Bealizzare la forma logica OR attraverso il percettrone significa fare in modo che esso restituisca un uscita alta quando almeno uno dei suoi ingressi di valore #0$. Nella pratica questo significa far corrispondere il semipiano di attivazione del neurone ai punti dello spazio degli ingressi in cui si desidera che l'uscita sia alta.

x1 0 1 0 1

x2 0 0 1 1

y 0 1 1 1

Fig. 11: Separa+ione lineare dell*operatore 01 nello spa+io degli ingressi e tabella riassuntiva dell*operatore

La retta individuata graficamente in 8ig --, ad esempio, soddisfa perfettamente il problema dell'operatore OR in quanto isola i punti !7'0", !0'7" e !0'0", corrispondenti alle aree in cui il neurone deve attivarsi e restituire un'uscita alta. Cista la semplicit. della rete possiamo ricavare i pesi sinaptici in modo analitico partendo dalla sua formula di uscita, che corrisponde all'e%ua&ione implicita di una retta&

w ) %)+ w ( % ( ( = 0
Fig. 1": 1etta di uscita del percettrone 9 59operatore lo0i!o 01 restituis!e ) se al"eno uno de0li ele"enti > ), "entre restituis!e 0 in tutti 0li altri !asi.

/ar. sufficiente trasformarla nella sua forma esplicita&

%( =

w) ( %) + w( w(

Fig. 1 : 1etta dell*uscita del percettrone 7$or!a esplicita8

8uindi utilizziamo un sistema a due equazioni e tre incognite per ricavare i parametri della retta passante per i punti !7'0" e !0'7", coincidenti con i pesi sinaptici della nostra rete&

w) ( )+ w( w( w ( ) = ) 0+ w( w( 0 =

w) = w( = ( 0

Le soluzioni del sistema ci indicano che possibile far funzionare la rete neurale scegliendo dei pesi sinaptici eguali tra loro e diversi da zero, ad esempio 3- ; 3# ; 9 ; -= in realt., per fare in modo che i punti !7'0" e !0'7" siano compresi nella soluzione, necessario utilizzare una soglia di lavoro leggermente inferiore, visto che il neurone si attiva con un potenziale di attivazione maggiore di zero e non maggiore o uguale a zero. La soglia di lavoro, infatti, influisce sulla posizione verticale della retta rispetto all'origine, come possibile notare dalla formula di uscita. Dn esempio funzionante di percettrone che risolve la forma logica *B potrebbe essere il seguente& 1) 1(
)C

-(C %
3C 7

'

D)
Fig. 1': 3ercettrone dell*operator 01 con ,ias

la cui uscita determinata dall'espressione&

y = ( % % ) +% % ( 7 > 0 )
Fig. 1): #scita del percettrone dell*operatore 01

Non ci resta quindi che mettere alla prova le capacit. della nostra rete neurale provando tutte le possibili combinazioni degli ingressi e analizzando i risultati in uscita&
x1 0 1 0 1 x2 0 0 1 1 5 x1 + 5 x2 - 4 > 0 5 5 5 5 0+ 1+ 0+ 1+ 5 5 5 5 0-4> 0-4> 1-4> 1-4> 0 0 0 0 y 0 1 1 1

Fig. 1.: /secu+ione del percettrone dell*operatore 01

*vviamente possono esistere diverse combinazioni dei pesi sinaptici che risolvono il medesimo problema, questo perch pi) rette possono isolare le aree della soluzione' di seguito sono forniti alcuni esempi di rette in grado di risolvere la forma logica OR& 7

Fig. 1-: Separa+ione lineare dell*operatore 01

0x03:02 Il percettrone (codice


Bealizzare un percettrone virtuale attraverso un linguaggio di programmazione strutturata una procedura abbastanza semplice& si pu2 rispettare la forma matematica, descrivendo i parametri del neurone come variabili !o vettori" e le funzioni di attivazione e di trasferimento come procedure e funzioni strutturate equivalenti. :i seguito trovate una semplice implementazione in linguaggio +,,&
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <iostream> #include <cstdio> #include <cstdlib> // Precisione dei valori t !ede" double #$Precision% #$Precision activation$"unction& const #$Precision '() const #$Precision '*) si+e$t n , // Poten+iale di attiva+ione #$Precision !otential . 0% // /teratore si+e$t i . 0% // 0alcolo il !oten+iale di attiva+ione del !ercettrone "or & % i <. n% i11 , !otential 1. (2i3 ' *2i3% 4 return !otential% 4 #$Precision trans"er$"unction& const #$Precision '() const #$Precision '*) si+e$t n , // 0alcolo il !oten+iale di attiva+ione del !ercettrone #$Precision !otential . activation$"unction& () *) n ,% // 0alcolo l5uscita del !ercettrone sulla base del !oten+iale di attiva+ione return &#$Precision, & !otential > 0 ,% 4

36 int main& void , 37 38 // 6umero di in7ressi 39 const si+e$t n . 2% 40 41 // /n7ressi del !ercettrone &!i8 il bias, 42 #$Precision (2n 1 13% 43 // Pesi sina!tici &!i8 il !eso del bias, 44 #$Precision *2n 1 13% 45 // 9scita del !ercettrone 46 #$Precision % 47 48 // /teratori 49 si+e$t i) :% 50 51 // /m!osto il valore ne7ativo unitario del bias 52 (2n3 . ;1% 53 54 // /m!osto il valore dei !esi 55 *203 . 5% 56 *213 . 5% 57 *223 . 4% 58 59 // <tam!o l5intesta+ione della tabella 60 !rint"& =2(13>t2(23>t2 3>n= ,% 61 62 // Provo tutte le combina+ioni de7li in7ressi 63 "or & : . 0% : <. 1% :11 , 64 65 "or & i . 0% i <. 1% i11 , 66 67 // /m!osto 7li in7ressi 68 (203 . i% 69 (213 . :% 70 71 // 0alcolo l5uscita del !ercettrone 72 . trans"er$"unction& () *) n ,% 73 74 // <tam!o 7li in7ressi e la ris!ettiva uscita 75 !rint"& =?@0">t?@0">t?@0">n=) (203) (213) ,% 76 4 77 4 78 79 return 0% 80 4 81

%l percettrone stato scomposto in due vettori ed una variabile& il primo vettore contiene gli ingressi, il secondo i pesi sinaptici, mentre la variabile utilizzata per contenere il valore di uscita. La funzione di trasferimento la funzione a gradino vista nel paragrafo precedente. %l sorgente abbastanza intuitivo e non credo occorra dilungarsi ulteriormente.

0x03:03 L!apprendimento del percettrone


4er un percettrone #apprendere$ significa modificare progressivamente i propri pesi sinaptici fino al raggiungimento della risposta desiderata. Eu lo stesso Bosenblatt, nel 0@F3, a proporre un algoritmo in grado di tarare automaticamente i pesi sinaptici sulla base dei dati sperimentali. La # regola delta$, questo il nome dell'algoritmo, rientra tra i paradigmi di apprendimento supervisionato e

cerca di minimizzare l'errore della rete attraverso una procedura di discesa del gradiente07. :ato un insieme di addestramento non vuoto formato da 6S2 coppie ingressi(uscite, si definisce una fun&ione di errore !o fun&ione costo" 6>2 corrispondente allo scarto quadratico medio tra l'uscita reale #,c$ e l'uscita desiderata #dc$ di ogni esempio, dove 6c2 appunto l'indice dell'esempio&
S

/ =
c=)

) ( ( d c yc ) (

Fig. 14: Fun+ione di errore del percettrone

4er minimizzare l'errore della rete e fare in modo che essa risponda correttamente agli stimoli necessario trovare il minimo-- di questa funzione. /cendere lungo il gradiente di una funzione significa partire da un punto scelto a caso nel suo spazio multidimensionale e spostarsi fino a convergere sul minimo locale pi) vicino. %l gradiente di una funzione, infatti, indica la direzione di massima crescita !o di massima decrescita" della funzione a partire da un determinato punto. %l gradiente, in questo caso, il vettore che ha per componenti le derivate parziali della funzione costo rispetto a tutti i pesi sinaptici della rete&

/ (w ) =

/ / / & & ... & w0 w) wn

Fig. 12: <radiente della $un+ione di errore

:al gradiente si ricava la regola di discesa del gradiente, utilizzata per la correzione dei pesi sinaptici del percettrone&

9wi = :

/ ; wi

w ti = w ti )+ 9w i

Fig. "6: 1egola della discesa del gradiente applicata al percettrone

dove 6t2 l'istante dell'addestramento, 6?3i2 rappresenta la modifica da applicare al peso sinaptico63i2 e dove @ una costante chiamata learning rate !o tasso di apprendimento" positiva e minore di uno che determina la velocit. di apprendimento del neurone. La derivata parziale determina la rapidit. di crescita o decrescita dell'errore sul singolo peso 63i2, in base alla pendenza della funzione costo.

Fig. "1: Super$icie dell*errore del percettrone a due ingressi )0 Il gradiente di una 6unzione > il 4ettore !*e *a !o"e !o"ponenti le deri4ate parziali della 6unzione rispetto a tutte le 4aria3ili indipendenti !al!olate in un deter"inato punto. )) Il !ini!o di una 6unzione > il piB pi!!olo dei 4alori !*e essa puE assu"ere al 4ariare dei suoi para"etri.

)0

/e l'errore cresce con l'aumentare dei pesi sinaptici, questi vengono leggermente diminuiti e viceversa, fino al raggiungimento del minimo locale pi) vicino. Dsare un tasso di apprendimento troppo piccolo render. l'addestramento molto lungo' con un tasso di apprendimento troppo grande, invece, non sar. possibile convergere sul minimo locale della funzione costo, che verr. saltato a causa della correzione troppo marcata.

Fig. "": Tasso di apprendi!ento troppo piccolo o troppo grande pplicando la regola di deriva&ione delle fun&ioni composte-# otteniamo che&

/ / y = wi y wi
Fig. " : Sviluppo della regola di discesa del gradiente

Bisolvendo le due derivate parziali&

) [ ( d y )( ] / ( ) = = [ (( d y )() )] = ( d y ) y y (
n +) n +)

y = wi
vremo che&

T ( w i %i )
i =)

w i %i =
i= )

wi

wi

= %i

Fig. "': Sviluppo della regola di discesa del gradiente

/ = ( d y ) %i wi
Fig. "): Derivata dell*errore sul peso =3i2

+he, considerando tutti gli esempi dell'insieme di addestramento !modalit. batc'", diventa&

/ = [(d c yc ) %ci ] w i c= )
Fig. ".: Derivata dell*errore sul peso =3i2* considerando tutti gli esempi dell'insieme di addestramento

)( 5a deri4ata di una 6unzione !o"posta > data dal prodotto delle deri4ate delle 6unzioni ele"entari.

))

%nfine, riscrivendo la formula di discesa del gradiente, otteniamo la regola delta, utilizzata per l'apprendimento del percettrone con funzione di trasferimento a gradino&
S

9wi = :

[(d c yc ) %ci ] ;
c= )

w i = w i + 9w i

t )

Fig. "-: La re0ola delta del percettrone

+ome verifica di tutto quello che abbiamo appena scritto, proviamo ad addestrare un percettrone a due ingressi ed un a sola uscita affinch impari a svolgere la forma logica 10/. %nnanzitutto prepariamo un insieme di addestramento come quello in 8ig. #A.
x1 0 1 0 1 x2 0 0 1 1 y 0 0 0 1

Fig. "4: Tabella dell*operatore A>D

8uindi usiamo la regola delta sulla rete fino a quando l'errore converger. su un livello trascurabile.
Epoche 0 1 2 3 4 5 w1 7,00 7,50 8,00 8,50 9,00 9,50 E/w 1 -1,00 -1,00 -1,00 -1,00 -1,00 -1,00 w2 2,00 2,50 3,00 3,50 4,00 4,50 E/w 2 -1,00 -1,00 -1,00 -1,00 -1,00 -1,00 wb 15,00 14,50 14,00 13,50 13,00 12,50 E/w b 1,00 1,00 1,00 1,00 1,00 1,00 E 0,50 0,50 0,50 0,50 0,50 0,00

Fig. "2: Addestra!ento di un percettrone per la $or!a logica A>D

*gni ciclo di apprendimento della rete neurale detto 6epoca2 e corrisponde ad un piccolo passo verso la risposta corretta. questo punto non ci resta che verificare in modo empirico se il percettrone ha imparato ad eseguire correttamente la forma logica 10/&
x1 0 1 0 1 x2 0 0 1 1 9,5 x 1 + 4,5 x 2 - 12,5 > 0 9,5 9,5 9,5 9,5 0+ 1+ 0+ 1+ 4,5 4,5 4,5 4,5 0 12,5 > 0 12,5 > 1 12,5 > 1 12,5 > 0 0 0 0 y 0 0 0 1

Fig. 6: /secu+ione del percettrone dell*operatore A>D

0x03:0" L!apprendimento del percettrone (codice


4er aggiungere l'addestramento supervisionato al percettrone virtuale visto in precedenza necessario definire un'apposita funzione&
1 2 3 4 5 6 7 8 #include #include #include #include <iostream> <cstdio> <cstdlib> <ctime>

// Precisione dei valori t !ede" double #$Precision%

)(

A 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

@@@ BCD/6/E/F6C BCGGC D96E/F6/ B/ H##/IHE/F6C C B/ #JH<DCJ/KC6#F @@@ #$Precision trainin7$"unction& #$Precision '() #$Precision '*) si+e$t n) const #$Precision 'd() const #$Precision 'd ) si+e$t sn) const #$Precision eta) const #$Precision desired$error , // 9scita calcolata #$Precision % // Crrore della rete #$Precision error% // Crrore dell5uscita #$Precision dCd % // Crrore dei !esi sina!tici #$Precision dCd*2n3% // Kodi"ica del !eso sina!tico #$Precision delta*% // 0ontatore delle e!ocLe si+e$t e!ocLs . 0% // /teratore si+e$t i) t% // Go7 di lavoro !rint"& =/ni+io l5addestramento &eta . ?@2") errore desiderato . ?",@>n=) eta) desired$error ,% // /ni+iali++o i !esi sina!tici con dei valori casuali "or & i . 0% i < n% i11 , *2i3 . rand&, ? 10% 4 // 0ontinuo l5addestramento "incLM non ra77iun7o // l5errore desiderato &ma( 100 e!ocLe, do // <tam!o il numero dell5e!oca corrente !rint"& =C!oca #?+uN =) e!ocLs ,% // H++ero l5errore della rete error . 0@0% // H++ero 7li errori dei !esi sina!tici "or & i . 0% i <. n% i11 , dCd*2i3 . 0% 4 // Ji!eto !er tutti 7li esem!i nell5insieme di addestramento "or & t . 0% t < sn% t11 , // Prendo 7li in7ressi dall5esem!io "or & i . 0% i < n% i11 , (2i3 . d(2t ' n 1 i3% 4 // 0alcolo l5uscita del !ercettrone // con 7li in7ressi dell5esem!io . trans"er$"unction& () *) n ,%

)3

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 4 140 141 int 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

// 0alcolo l5errore sull5uscita dCd . ;&d 2t3 ; ,% // 0alcolo l5errore dei !esi sina!tici "or & i . 0% i <. n% i11 , dCd*2i3 1. dCd 4 // 0alcolo il Ouadrato dell5errore necessario // !er trovare lo scarto Ouadratico medio // C&(, . <9K& eP2 , / n$sam!les error 1. & dCd ' dCd , / 2@0% 4 // 0orre77o i !esi usando la re7ola delta "or & i . 0% i <. n% i11 , // 0alcolo la modi"ica del !eso delta* . ; eta ' dCd*2i3% // H!!lico la modi"ica al !eso sina!tico *2i3 . *2i3 1 delta*% // <tam!a il nuovo valore del !eso !rint"& =*2?+u3.?@1" &C.?@1",) =) i) *2i3) dCd*2i3 ,% 4 // #ermino la ri7a di lo7 a77iun7endo l5errore corrente !rint"& =K<C.?">n=) error ,% // /ncremento il numero delle e!ocLe e!ocLs11% 4 *Lile & error > desired$error QQ e!ocLs < 100 ,% // Go7 di lavoro !rint"& =Hddestramento terminato do!o ?+u e!ocLe@>n>n=) e!ocLs ,% main& void , // /ni+iali++o il 7eneratore di numeri !seudocasuali srand& &si+e$t, time& 69GG , ,% // 6umero di in7ressi const si+e$t n . 2% // /n7ressi del !ercettrone &!i8 il bias, #$Precision (2n 1 13% // Pesi sina!tici &!i8 il !eso del bias, #$Precision *2n 1 13% // 9scita del !ercettrone #$Precision % // /teratori si+e$t i) :% // /m!osto il valore ne7ativo unitario del bias (2n3 . ;1% // 6umero di esem!i dell5insieme di addestramento const si+e$t sn . 4% // Pre!aro l5insieme di addestramento !er l5o!eratore H6B ' (2i3%

)7

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 4 206

const #$Precision d(2sn ' n3 . 0) 0) 1) 1) 4% const #$Precision d 2sn3 . - 0) 0) 0) 1 4% // #asso di a!!rendimento const #$Precision eta . 0@5% // Crrore desiderato const #$Precision desired$error . 0@00001% // Hddestro il !ercettrone trainin7$"unction& () *) n) d() d ) sn) eta) desired$error ,% // <tam!o l5intesta+ione della tabella !rint"& =2(13>t2(23>t2 3>n= ,% // Provo tutte le combina+ioni de7li in7ressi "or & : . 0% : <. 1% :11 , "or & i . 0% i <. 1% i11 , // /m!osto 7li in7ressi (203 . i% (213 . :% // 0alcolo l5uscita del !ercettrone . trans"er$"unction& () *) n ,% // <tam!o 7li in7ressi e la ris!ettiva uscita !rint"& =?@0">t?@0">t?@0">n=) (203) (213) ,% 4 4 return 0% 0) 1) 0) 1

+ome il codice precedente anche questo dovrebbe essere abbastanza intuitivo. La funzione trainingBfunction quella che permette al percettrone di apprendere in modo supervisionato. %n essa i pesi sinaptici vengono inizializzati con dei valori pseudocasuali !attraverso la funzione randC5" e man mano calibrati sulla base degli esempi forniti, attraverso la regola delta vista precedentemente. % dati del training set sono stati raccolti in un unico vettore monodimensionale per una questione di praticit. e per facilitarne il passaggio alle funzioni di lavoro. L'accesso agli elementi del vettore, in ogni caso, gestito attraverso l'uso di due indici, come si pu2 vedere nell'equiparazione sottostante& !atrice [ colonne ][ righe ] !atrice [ colonne righe ] !atrice [ i ][ ? ] !atrice [ i righe ? ]

)%

0x03:0# Il percettrone multistrato


% limiti del percettrone diventano evidenti appena si cerca di risolvere un problema di separa&ione non lineare. 4rendiamo ad esempio la forma logica DOR Co esclusive+OR5E questa forma non linearmente separabile in quanto non vi modo di isolare i punti !0'7" e !7'0" dello spazio degli ingressi attraverso un unica retta !vedi la 8ig. 3-". La separazione sarebbe possibile solo se si utilizza una funzione di attivazione non lineare, ma questa renderebbe il percettrone estremamente pi) complesso. %n realt. esiste un modo per svolgere problemi non lineari mantenendo la linearit. propria del percettrone.

Fig. 1: Separa+ione della $or!a @01 attraverso due rette distinte

Dtilizzando pi) percettroni interconnessi, infatti, possibile aumentare il numero di rette che operano sullo spazio degli ingressi, scomponendo il problema di separazione non lineare in pi) sotto(problemi di lineari facilmente risolvibili dal percettrone. 1) 1(

a
OR /

Fig. ": 1ete a tre percettroni dell*operatore @01

Nel caso specifico dell'operatore DOR, ad esempio, potremmo utilizzare tre percettroni ripartiti in due strati, in modo tale da isolare i punti !7'0" e !0'7" con i primi due e, con l'ultimo, controllare se vi stata l'attivazione di almeno uno degli altri due percettroni !forma logica *B". %l problema, scomposto in forme linearmente separabili, apparirebbe cos?&

1)

/ 1(

Fig.

: Separa+ioni lineari necessarie a svolgere la $or!a logica @01

)6

:a questa idea nascono le reti di percettroni a piF strati !o !ultila,er "erceptron, o ancora !"L" composte tipicamente da uno strato di ingresso, uno o pi) strati intermedi !strati nascosti" ed uno strato di uscita, tutti completamente interconnessi. 10 1) /0 /)

... ... ... ...


1n
Fig. ': 1ete di percettroni a piA strati
n +) i =)

%n questa nuova architettura le uscite dei percettroni di uno strato diventano gli ingressi dei percettroni dello strato successivo !rete feedfor3ard", ad eccezione dell'ultimo dove le uscite dei percettroni corrispondono alle uscite effettive della rete. *gni strato ha inoltre un nodo fittizio !Bias" avente come valore di uscita 6+-2, che comune a tutti i neuroni dello strato successivo. % percettroni degli strati intermedi e quelli dello strato di uscita in genere utilizzano una funzione di trasferimento sigmoidale, mentre i percettroni dello strato di ingresso fungono da # buffer$ per gli ingressi della rete ed utilizzano una funzione di trasferimento a rampa, utilizzata per limitare l'intervallo dei valori che essi possono assumere = per questo motivo ogni percettrone dello strato di ingresso accetta un un unico valore corrispondente ad un determinato ingresso della rete. Dtilizzando la funzione di trasferimento sigmoidale l'uscita dei percettroni dell'ultimo strato della rete sar. data dalla seguente formula&

sig!oid ( w i %i = w ) %)+ w ( % ( +... + w n % n( )


Fig. ): #scita del percettrone con $un+ione di tras$eri!ento sig!oidale

1ale espressione identifica una sigmoide nello spazio degli ingressi, orientata secondo i pesi sinaptici del percettrone.

Fig. .: #scita del percettrone a due ingressi con $un+ione di tras$eri!ento sig!oidale

4er calcolare le uscite di questo tipo di rete neurale si procede ordinatamente& prima si calcolano le uscite dei percettroni dello strato di ingresso, poi quelle dello strato successivo e cos? via fino all'ultimo strato, le cui uscite corrispondo a quelle effettive della rete. )7

...
/"

Gan mano che il problema da affrontare diventa pi) complesso possibile aumentare il numero degli strati intermedi che compongono la rete al fine di incrementarne la potenza di calcolo. 1uttavia, secondo il teorema di Golmogorov-3 !0@;>", una rete di percettroni con un unico strato nascosto dovrebbe essere in grado di rappresentare qualsiasi funzione continua e di approssimarla con qualsiasi grado di precisione semplicemente aumentando il numero dei neuroni che compongono lo strato. :ico #dovrebbe$ perch tale teorema applicato alle reti neurali tutt'oggi oggetto di dibattito. %n ogni caso esso non fornisce alcuna indicazione su quale debba essere la struttura effettiva delle rete neurale per poter risolvere un determinato tipo problema. 4er avere almeno un punto di riferimento sulla topologia di rete da adottare possiamo classificare le diverse architetture in base ai problemi che esse sono sicuramente in grado di svolgere&

%n particolare l'ultima configurazione, caratterizzata da due strati nascosti, in grado di isolare qualunque regione complessa nello spazio degli ingressi. 4ossiamo generalizzarne il funzionamento dicendo che& il primo strato nascosto partendo dal basso divide lo spazio degli ingressi in varie regioni delimitate da iperpiani ad n(dimensioni !uno per percettrone"'

)3 #ale teore"a a66er"a !*e ?ualsiasi 6unzione reale !ontinua de6inita in un siste"a n di"ensionale puE essere de!o"posta !o"e la so""a di piB 6unzioni !*e *anno !o"e loro ar0o"ento so""e di 6unzioni !ontinue a 4aria3ile sin0ola.

)8

il secondo, successivamente, riconosce le eventuali intersezioni tra queste regioni, attraverso un'operazione di 10/ logico' l'ultimo strato, infine, effettua ulteriori unioni tra le precedenti intersezioni, attraverso un'operazione di OR logico.

:i seguito un esempio di elaborazione di una rete di percettroni avente due strati nascosti&

Fig. -: Super$icie di decisione non lineare ottenuta con una rete di percettroni con due strati nascosti

La rete in questione prende in ingresso due valori corrispondenti alle coordinate di un punto nello spazio bidimensionale degli ingressi, quindi, attraverso un'elaborazione in cascata, verifica se tale punto situato nell'area decisionale della rete, delimitata dalle separazioni lineari effettuate dai percettroni e, in questo caso, rappresentata da una figura cruciforme.

0x03:0$ Il percettrone multistrato (codice


%l seguente sorgente implementa una rete di percettroni a tre strati&
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include #include #include #include <iostream> <cstdio> <cstdlib> <cmatL> &( ' (, 1@0 / & 1@0 1 stdNNe(!&;(, , ( ' & 1 ; ( ,

#de"ine $$PFR2$$&(, #de"ine $$</SKF/B$$&(, #de"ine $$B$</SKF/B$$&(,

// Precisione dei valori t !ede" double #$Precision% // <truttura di un neurone struct 6euron #$Precision value% 4% // <truttura di una connessione tra due neuroni &sina!si, struct < na!se #$Precision *ei7Lt% // Peso della connessione 4% // 9scita del !ercettrone

)9

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

void run$net*orT& 6euron 'i$neuron) si+e$t in!ut$si+e) 6euron 'L$neuron) < na!se 'L$s na!se) si+e$t Lidden$si+e) 6euron 'o$neuron) < na!se 'o$s na!se) si+e$t out!ut$si+e , // Poten+iale di attiva+ione "loat !otential% // /teratori si+e$t :) i% // 0alcolo le uscite dello strato intermedio "or & i . 0% i < Lidden$si+e% i11 , // H++ero il !oten+iale di attiva+ione !otential . 0% // 0alcolo il !oten+iale di attiva+ione "or & : . 0% : < in!ut$si+e% :11 , !otential 1. i$neuron2:3@value ' L$s na!se2i ' & in!ut$si+e 1 1 , 1 :3@*ei7Lt% 4 // H77iun7o il valore del bias !otential 1. L$s na!se2i ' & in!ut$si+e 1 1 , 1 :3@*ei7Lt% // 0alcolo l5uscita del neurone sulla base del !oten+iale di attiva+ione L$neuron2i3@value . $$</SKF/B$$& !otential ,% 4 // 0alcolo le uscite dello strato di uscita "or & i . 0% i < out!ut$si+e% i11 , // H++ero il !oten+iale di attiva+ione !otential . 0% // 0alcolo il !oten+iale di attiva+ione "or & : . 0% : < Lidden$si+e% :11 , !otential 1. L$neuron2:3@value ' o$s na!se2i ' & Lidden$si+e 1 1 , 1 :3@*ei7Lt% 4 // H77iun7o il valore del bias !otential 1. o$s na!se2i ' & Lidden$si+e 1 1 , 1 :3@*ei7Lt% // 0alcolo l5uscita del neurone sulla base del !oten+iale di attiva+ione o$neuron2i3@value . $$</SKF/B$$& !otential ,% 4 4 int main& void , // Bimensioni della rete const si+e$t in!ut$si+e . 2% const si+e$t Lidden$si+e . 4% const si+e$t out!ut$si+e . 1% // 0reo i neuroni de7li strati 6euron i$neuron2 in!ut$si+e 3% 6euron L$neuron2 Lidden$si+e 3% 6euron o$neuron2 out!ut$si+e 3% // 0reo le sina!si de7li strati &1 Ouelle del bias,

(0

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

< na!se L$s na!se2 &in!ut$si+e 1 1, ' Lidden$si+e 3% < na!se o$s na!se2 &Lidden$si+e 1 1, ' out!ut$si+e 3% // /m!osto i !esi sina!tici L$s na!se203@*ei7Lt . ;3@9340242026% L$s na!se213@*ei7Lt . 8@2505052824% L$s na!se223@*ei7Lt . 0@3043062447% L$s na!se233@*ei7Lt . 6@8427240303% L$s na!se243@*ei7Lt . 6@8347133644% L$s na!se253@*ei7Lt . ;1@4695877520% L$s na!se263@*ei7Lt . 8@2647545506% L$s na!se273@*ei7Lt . ;4@1937195208% L$s na!se283@*ei7Lt . 0@5536933684% o$s o$s o$s o$s na!se203@*ei7Lt na!se213@*ei7Lt na!se223@*ei7Lt na!se233@*ei7Lt . . . . ;12@2588589492% 13@6915483842% ;12@2575228405% 4@8756901299%

// /teratore si+e$t i) :% // <tam!o l5intesta+ione della tabella !rint"& =2(13>t2(23>t2 3>n= ,% // Provo tutte le combina+ioni de7li in7ressi "or & : . 0% : <. 1% :11 , "or & i . 0% i <. 1% i11 , // /m!osto 7li in7ressi i$neuron203@value . i% i$neuron213@value . :% // Cse7uo la rete neurale run$net*orT& i$neuron) in!ut$si+e) L$neuron) L$s na!se) Lidden$si+e) o$neuron) o$s na!se) out!ut$si+e ,%

// <tam!o 7li in7ressi e la ris!ettiva uscita !rint"& =?@0">t?@0">t?@0">n=) i$neuron203@value) i$neuron213@value) o$neuron203@value ,% 135 4 136 4 137 138 return 0% 139 4 140

/ono state definite due strutture che rappresentano i percettroni e le rispettive sinapsi. Le istanze di quest'ultime sono state raccolte in un unico vettore monodimensionale per una questione di praticit. e per facilitarne il passaggio alle funzioni di lavoro. La funzione che fa operare la rete neurale artificiale runBnet3ork che calcola le uscite di ogni strato, un percettrone per volta, fino a determinare le uscite della rete.

()

0x03:0% L!algoritmo di retropropagazione dell!errore


L'algoritmo pi) usato per l'addestramento delle reti G4L senza dubbio la retropropaga&ione dell'errore !o >rror Back "ropagation, o ancora >B"". /i tratta di un algoritmo di apprendimento supervisionato che estende la regola delta vista nel paragrafo precedente alle reti feedforward multistrato con funzioni di trasferimento non lineari !e derivabili"' per questo motivo esso conosciuto anche con il nome di Regola /elta Generali&&ata. L'obiettivo dell'addestramento ancora una volta quello di minimizzare la fun&ione costo della rete, in questo caso definita come l'errore quadratico medio tra tutte le uscite della rete e i rispettivi valori desiderati, contenuti nell'insieme di addestramento. 1ale funzione pu2 essere definita come&
S n

/ =
c=) ? =)

) ( ( d c? yc? ) (

Fig. 4: Fun+ione di errore della rete di percettroni

dove 6,cH2 l' uscita H(esima della rete !corrispondente allo H(esimo percettrone dello strato di uscita" al momento della presentazione dell'esempio 6c2' #dcH$, invece, il rispettivo valore desiderato.

/ ( w ) = ... &

/ & ... w ?C

Fig. 2: <radiente della $un+ione di errore

ttraverso il confronto con i valori dell'insieme di addestramento possiamo conoscere l'errore dei percettroni dello strato di uscita. %nvece non vi alcuna indicazione su quali debbano essere le uscite dei nodi interni alla rete. 4er determinare l'errore di un percettrone nascosto allora necessario retropropagare l'errore dallo strato di uscita, in modo da rendere possibile la correzione dei pesi sinaptici. 4rendiamo ad esempio una generica rete di percettroni a 5 strati, composta da 6n2 neuroni nello strato di ingresso @ i [ i =), (, ... & n ] , 6m2 neuroni nello strato nascosto B C [ C =), (,... & ! ] e 6p2 neuroni in quello di uscita D ? [ ? =), (, ... & p ] . 4er correggere i pesi sinaptici di un percettrone dello strato di uscita utilizziamo la regola&

9w ?C = :

/ ; w ?C

) w t?C = w t?C + 9w ?C

Fig. '6: 1egola della discesa del gradiente applicata ai percettroni dello strato di uscita

dove 6?3Hk2 il peso I(esimo del percettrone 6IH2, ossia il peso sinaptico che connette il percettrone 6Jk2 a quello 6IH2. /viluppando la formula attraverso la regola di deriva&ione delle fun&ioni composte otteniamo che&

/ / y? 3? = w ?C y ? 3 ? w ?C
Fig. '1: Sviluppo della regola di discesa del gradiente

dove 6,H2 l'uscita H(esima della rete e 6"H2 il potenziale di attivazione del rispettivo nodo. ((

8uindi risolvendo le derivate parziali otteniamo&

) [ ( d ? y ? )( ] / ( ) = = [ (( d ? y ? )() )] = ( d ? y ? ) y? y? (

y? T (3 ?) = = T * ( 3 ?) 3? 3?
! +)

3? = w ?C

( w ?C + C )
C =)

w ?C

= +C

Fig. '": Sviluppo della regola di discesa del gradiente

dove 6&k2 l'uscita I(esima dello strato precedente, regolato dal peso 63Hk2. Bicostruendo l'equazione iniziale abbiamo che&

/ = d ? y ? T * 3 ? + C w ?C
Fig. ' : Derivata dell*errore sul peso sinaptico

/e poi poniamo&

E ? = d ? y ? T * 3 ?
Fig. '': Sviluppo della regola di discesa del gradiente

*tteniamo la regola delta generali&&ata per un nodo di uscita&

9w ?C = : E ? + C
Fig. '): 1egola delta generali++ata 7per un nodo di uscita8

8uando invece dobbiamo correggere il peso sinaptico di un nodo interno, abbiamo&

/ / +C 3C = w Ci + C 3 C w Ci
Fig. '.: Sviluppo della regola di discesa del gradiente

:ove&

yC T 3C = = T * 3C 3C 3C
n +)

3C = w Ci

( % Ci %i )
i =)

w Ci

= %i

Fig. '-: Sviluppo della regola di discesa del gradiente

(3

Gentre la derivata dell'errore sull'uscita interna 6&k2 ottenuta retropropagando l'errore dallo strato successivo&
p ) p ) p) / / / y? 3? = = = [ d ? y ? T * 3 ? w ?C ] +C ? =) w ?C ?= ) y ? 3 ? + C ?= )

Fig. '4: Sviluppo della regola di discesa del gradiente

Eormula che, come abbiamo visto, pu2 essere riscritta nel seguente modo&

/ = E ? w ?C +C ? =)
Fig. '2: Sviluppo della regola di discesa del gradiente

p )

La correzione del peso sinaptico sar. data quindi da una funzione ricorsiva che propaga all'indietro l'errore dello strato successivo&
p )

9w Ci = :
%nfine, ponendo&

E ? w ?C T * 3 C % i
? =)

Fig. )6: Sviluppo della regola di discesa del gradiente

p )

E C = E ? w ?C T * 3 C
?= )

Fig. )1: Sviluppo della regola di discesa del gradiente

*tteniamo una forma uguale a quella utilizzata per correggere i pesi sinaptici di un nodo di uscita&

9w Ci = : E C % i
Fig. )": 1egola delta generali++ata 7per un nodo nascosto8

4ossiamo quindi generalizzare la regola di addestramento in questo modo&

9w Ci = : E C + i ;

w Ci = w Ci + 9w Ci

t )

EC =

( d C y C ) T * ( 3 C ) se F un nodo di uscita

( E ? w ?C ) T * ( 3 C )
? =)

p +)

se F un nodo interno

Fig. ) : La regola delta generali++ata

9' interessante notare che quando si utilizza una funzione di trasferimento sigmoidale si ha&

T * 3 C = T 3 C [ ) T 3 C ] = y C ) y C
Fig. )': Derivata dell*errore sul poten+iale di attiva+ione con una $un+ione di tras$eri!ento sig!oidale

(7

4er questa propriet., estremamente favorevole dal punto di vista computazionale, la sigmoide una delle pi) usate funzioni di trasferimento. *vviamente per aggiustare i pesi sinaptici di un nodo della rete considerando tutti gli esempi dell'insieme di addestramento !modalit. batc'" dobbiamo modificare la formula come segue&
S

9w Ci = :

( E cC + ci ) ;
c= )

w Ci = w Ci + 9w Ci

t )

Fig. )): La regola delta generali++ata per tutti gli ese!pi dell*insie!e di addestra!ento

0x03:0& L!algoritmo di retropropagazione dell!errore (codice


%l seguente sorgente implementa la regola delta generali&&ata per la rete di percettroni multistrato vista in precedenza&
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 #include #include #include #include #include <iostream> <cstdio> <cstdlib> <cmatL> <ctime> &( ' (, 1@0 / & 1@0 1 stdNNe(!&;(, , ( ' & 1 ; ( ,

#de"ine $$PFR2$$&(, #de"ine $$</SKF/B$$&(, #de"ine $$B$</SKF/B$$&(,

// Precisione dei valori t !ede" double #$Precision% // <truttura di un neurone struct 6euron #$Precision value% #$Precision dCd % 4% // <truttura di una connessione tra due neuroni &sina!si, struct < na!se #$Precision *ei7Lt% // Peso della connessione #$Precision dCd*% // Crrore della connessione 4% A @@@ BCD/6/E/F6C BCGGH D96E/F6C PCJ G5C<C09E/F6C BCGGH JC#C 6C9JHGC @@@ void init$*ei7Lt& < na!se 's na!se) si+e$t la er$si+e) si+e$t !rev$la er$si+e , // Ialore casuale #$Precision random$% // /teratori si+e$t :) i . 0% // /ni+iali++o i !esi sina!tici con dei valori casuali "or & % i < la er$si+e% i11 , "or & : . 0% : <. !rev$la er$si+e% :11 , // Prelevo un valore casuale // 9scita del !ercettrone // Crrore del neurone

(%

95 96 97 98

random$ . rand&,% // /m!osto il valore del !eso tra 0 e 1 s na!se2i ' !rev$la er$si+e 1 :3@*ei7Lt . & sin&random$, ' sin&random$,

,% 99 4 100 4 101 4 102 103 void 104 bacT!ro!a7ation& 6euron 'i$neuron) si+e$t in!ut$si+e) 105 6euron 'L$neuron) < na!se 'L$s na!se) si+e$t Lidden$si+e) 106 6euron 'o$neuron) < na!se 'o$s na!se) si+e$t out!ut$si+e) 107 const #$Precision 'd() const #$Precision 'd ) si+e$t sn) 108 const #$Precision eta) const #$Precision desired$error , 109 110 // Crrore della rete 111 #$Precision error% 112 113 // Kodi"ica del !eso sina!tico 114 #$Precision delta$*% 115 116 // 0ontatore delle e!ocLe 117 si+e$t e!ocLs . 0% 118 119 // /teratori 120 si+e$t t) :) i% 121 122 // Go7 di lavoro 123 !rint"& =/ni+io l5addestramento &eta . ?@2") errore desiderato . ?",@>n=) eta) desired$error ,% 124 125 // /ni+iali++o i !esi sina!tici con dei valori casuali 126 init$*ei7Lt& L$s na!se) Lidden$si+e) in!ut$si+e ,% 127 init$*ei7Lt& o$s na!se) out!ut$si+e) Lidden$si+e ,% 128 129 // 0ontinuo l5addestramento "incLM non ra77iun7o 130 // l5errore desiderato &ma( 50000 e!ocLe, 131 do 132 133 // H++ero l5errore della rete 134 error . 0@0% 135 136 // Ji!eto !er tutti 7li esem!i nell5insieme di addestramento 137 "or & t . 0% t < sn% t11 , 138 139 // Prendo 7li in7ressi dall5esem!io 140 "or & i . 0% i < in!ut$si+e% i11 , 141 142 i$neuron2i3@value . d(2t ' in!ut$si+e 1 i3% 143 4 144 145 // Cse7uo la rete neurale 146 run$net*orT& i$neuron) in!ut$si+e) 147 L$neuron) L$s na!se) Lidden$si+e) 148 o$neuron) o$s na!se) out!ut$si+e ,% 149 150 // 0alcolo l5errore dello strato di uscita 151 "or & i . 0% i < out!ut$si+e% i11 , 152 153 // 0alcolo l5errore dell5uscita del neurone 154 // dC/d $i . ;&B$i ; U$i, 155 o$neuron2i3@dCd . ;& d 2t ' out!ut$si+e 1 i3 ; o$neuron2i3@value ,% 156 157 // H77iun7o l5errore al totale 158 error 1. $$PFR2$$& o$neuron2i3@dCd ,%

(6

159 160 161 162 163 164 165 166 167 168 169 170 171 172

4 // 0alcolo l5errore dello strato intermedio "or & i . 0% i < Lidden$si+e% i11 , // H++ero l5errore del neurone L$neuron2i3@dCd . 0% // 0alcolo l5errore dello strato intermedio // dC/d+$T . <9K& dC/d $: ' d $:/dP$: ' dP$:/d+$T , "or & : . 0% : <. out!ut$si+e% :11 , -

// 0alcolo l5errore dell5uscita del neurone L$neuron2i3@dCd 1. o$neuron2:3@dCd ' o$s na!se2: ' & Lidden$si+e 1 1 , 1 i3@*ei7Lt% 173 4 174 4 175 176 // H77iusto i !esi dello strato di uscita 177 "or & i . 0% i < out!ut$si+e% i11 , 178 179 // 0orre77o il !eso sina!tico 180 "or & : . 0% : < Lidden$si+e% :11 , 181 182 // 0alcolo la modi"ica del !eso sina!tico 183 // delta$* . ; eta ' dC/d $: ' d $:/dP$: ' dP$:/d*$:T 184 delta$* . ; eta ' o$neuron2i3@dCd ' $$B$</SKF/B$$& o$neuron2i3@value , ' L$neuron2:3@value% 185 186 // H!!lico la modi"ica al !eso sina!tico 187 // * . * 1 delta$* 188 o$s na!se2i ' & Lidden$si+e 1 1 , 1 :3@*ei7Lt 1. delta$*% 189 4 190 191 // 0alcolo la modi"ica del !eso del bias 192 // delta$* . ; eta ' dC/d $: ' d $:/dP$: ' dP$:/d*$:T 193 delta$* . ; eta ' o$neuron2i3@dCd ' $$B$</SKF/B$$& o$neuron2i3@value , ' L$neuron2:3@value% 194 195 // H77iun7o la corre+ione del bias 196 // * . * 1 delta$* 197 o$s na!se2i ' & Lidden$si+e 1 1 , 1 :3@*ei7Lt 1. ; eta ' o$neuron2i3@dCd ' $$B$</SKF/B$$& o$neuron2i3@value ,% 198 4 199 200 // H77iusto i !esi dello strato intermedio 201 "or & i . 0% i < Lidden$si+e% i11 , 202 203 // 0orre77o il !eso sina!tico 204 "or & : . 0% : < in!ut$si+e% :11 , 205 206 // 0alcolo la modi"ica del !eso sina!tico 207 // delta$* . ; eta ' dC/d+$T ' d+$T/dP$T ' dP$T/d*$Ti 208 delta$* . ; eta ' L$neuron2i3@dCd ' $$B$</SKF/B$$& L$neuron2i3@value , ' i$neuron2:3@value% 209 210 // H!!lico la modi"ica al !eso sina!tico 211 // * . * 1 delta$* 212 L$s na!se2i ' & in!ut$si+e 1 1 , 1 :3@*ei7Lt 1. delta$*% 213 4 214 215 // 0alcolo la modi"ica del !eso del bias 216 // delta$* . ; eta ' dC/d+$T ' d+$T/dP$T ' dP$T/d*$Ti 217 delta$* . ; eta ' L$neuron2i3@dCd ' $$B$</SKF/B$$& L$neuron2i3@value ,% 218

(7

219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 4 243 244 int 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284

// H77iun7o la corre+ione del bias // * . * 1 delta$* L$s na!se2i ' & in!ut$si+e 1 1 , 1 :3@*ei7Lt 1. delta$*% 4 4 // 0alcolo l5errore Ouadratico medio della rete &K<C, // C&(, . <9K& eP2 , / n$sam!les error /. & in!ut$si+e ' sn ,% // F7ni 1000 e!ocLe stam!o il lo7 di addestramento i" & e!ocLs ? 1000 .. 0 , !rint"& =C!oca #?+u) K<C.?">n=) e!ocLs) error ,% 4 // /ncremento il numero delle e!ocLe e!ocLs11% 4 *Lile & error > desired$error QQ e!ocLs < 50000 ,% // Go7 di lavoro !rint"& =Hddestramento terminato do!o ?+u e!ocLe@>n>n=) e!ocLs ,% main& void , // /ni+iali++o il 7eneratore di numeri !seudocasuali srand& &si+e$t, time& 69GG , ,% // Bimensioni della rete const si+e$t in!ut$si+e . 2% const si+e$t Lidden$si+e . 4% const si+e$t out!ut$si+e . 1% // 0reo i neuroni de7li strati 6euron i$neuron2 in!ut$si+e 3% 6euron L$neuron2 Lidden$si+e 3% 6euron o$neuron2 out!ut$si+e 3% // 0reo le sina!si de7li strati &1 Ouella del bias, < na!se L$s na!se2 &in!ut$si+e 1 1, ' Lidden$si+e 3% < na!se o$s na!se2 &Lidden$si+e 1 1, ' out!ut$si+e 3% // 6umero di esem!i dell5insieme di addestramento const si+e$t sn . 4% // Pre!aro l5insieme di addestramento !er l5o!eratore VFJ const #$Precision d(2sn ' in!ut$si+e3 . 0) 0) 0) 1) 1) 0) 1) 1 4% const #$Precision d 2sn ' out!ut$si+e3 . - 0) 1) 1) 0 4% // #asso di a!!rendimento const #$Precision eta . 0@5% // Crrore desiderato const #$Precision desired$error . 0@0001% // Hddestro la rete neurale bacT!ro!a7ation& i$neuron) in!ut$si+e) L$neuron) L$s na!se) Lidden$si+e)

(8

285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309

o$neuron) o$s na!se) out!ut$si+e) d() d ) sn) eta) desired$error ,% // /teratore si+e$t i) :% // <tam!o l5intesta+ione della tabella !rint"& =2(13>t2(23>t2 3>n= ,% // Provo tutte le combina+ioni de7li in7ressi "or & : . 0% : <. 1% :11 , "or & i . 0% i <. 1% i11 , // /m!osto 7li in7ressi i$neuron203@value . i% i$neuron213@value . :% // Cse7uo la rete neurale run$net*orT& i$neuron) in!ut$si+e) L$neuron) L$s na!se) Lidden$si+e) o$neuron) o$s na!se) out!ut$si+e ,%

// <tam!o 7li in7ressi e la ris!ettiva uscita !rint"& =?@0">t?@0">t?@0">n=) i$neuron203@value) i$neuron213@value) o$neuron203@value ,% 310 4 311 4 312 313 return 0% 314 4 315

La struttura dei percettroni e quella delle sinapsi stata modificata per aggiungere, rispettivamente, la derivata dell'errore sull'uscita del nodo e la derivata dell'errore sul peso sinaptico. La funzione initB3eig't inizializza un gruppo di pesi sinaptici che connettono due strati utilizzando dei valori pseudo casuali compresi tra zero e uno. La funzione backpropagation, invece, addestra la rete neurale sulla base degli esempi che le vengono passati come argomento. l suo interno vengono calcolate prima le derivate degli errori sulle uscite dei percettroni e, successivamente, le derivate degli errori sui pesi sinaptici che vengono utilizzate per correggere questi ultimi.

0x03:0' La retropropagazione elastica


% due metodi di apprendimento visti finora utilizzano un tasso di apprendimento costante. 8uesto significa che, per tutta la fase di addestramento, la discesa della funzione di errore avviene ad una velocit. direttamente proporzionale alla sua pendenza. % limiti di questa metodologia sono gli stessi messi in evidenza nel paragrafo .4.3E.3, ossia le difficolt. nel trovare un tasso di apprendimento adeguato che non sia eccessivamente piccolo, il ch porterebbe a tempi di addestramento lunghi, ne troppo grande, che renderebbe impossibile la convergenza sul minimo locale della funzione di errore. 4er aggirare questo ostacolo, e cercare di ridurre i tempi dell'apprendimento, si pensato bene di introdurre un fattore di iner&ia, un parametro che stabilisca quando la velocit. di apprendimento debba essere incrementata, ad esempio nelle lunghe discese, e quando, invece, diminuita, ad esempio dopo il superamento del minimo locale pi) vicino. 4er capire meglio ci2 che vogliamo ottenere, si pensi al movimento di una biglia che viene lasciata cadere da un lato di una rampa a forma di #D$, che acquista velocit. nelle lunghe pendenze e che ne perde al cambio di direzione impostoli dalla sfonda opposta, fino a fermarsi nel punto pi) basso della rampa. (9

%l metodo pi) semplice per introdurre questo nuovo fattore quello di modificare la Regola /elta Generali&&ata in questo modo&

9w ?i = : E ? % i+ G 9w ?i
Fig. ).: 1egola delta generali++ata con il !o!entu!

t+ )

dove 6K2 un parametro arbitrario costante, maggiore o uguale a zero e minore di uno, detto momentum, ossia il fattore di inerzia accennato precedentemente. 8uesta nuova formula tiene conto della correzione effettuata nell'epoca precedente, in modo tale da aumentare la velocit. di apprendimento nel caso in cui le correzioni di due epoche consecutive abbiano segni algebrici concordi, ossia nei periodi in cui la pendenza stata costante, e per diminuirla nel caso in cui i segni siano discordi, ovvero al cambio della pendenza e quindi dopo il superamento del minimo locale pi) vicino. 8uesto accorgimento rende l'addestramento pi) preciso e, sopratutto, pi) rapido di quello originale.

Fig. )-: 1aggiungi!ento del !ini!o locale con l*adatta!ento del tasso di apprendi!ento

1uttavia si giunti allo stato dell'arte solo con l'introduzione dell'algoritmo Rprop ! o Resilient backpropagation, o retropropaga&ione elastica", sviluppato da !artin Riedmiller e )einric' Braun nel 0@@3. /i tratta di un metodo euristico che elimina del tutto l'influenza dannosa della derivata parziale dell'errore& in questo modo il tasso di apprendimento pu2 crescere o diminuire indipendentemente da quale sia la pendenza della funzione costo. %n questo algoritmo, infatti, ogni peso sinaptico della rete ha il suo specifico tasso di apprendimento, che viene incrementato o diminuito a seconda della pendenza della funzione costo assunta nel corso dell'addestramento. La prima parte dell'algoritmo molto semplice ed usa il segno della derivata dell'errore sul peso sinaptico per stabilire quale sia il verso della correzione&

w ?i = w ?i + 9w ?i

t )

9w ?i =

: ?i se : ?i 0
se se

/ >0 w ?i / t <0 w ?i t / =0 w ?i

Fig. )4: Aggiorna!ento dei pesi sinaptici attraverso l*algorit!o 1prop

30

dove 6?@Hi2 appunto il tasso di apprendimento del peso sinaptico 6?3Hi2. La seconda parte, invece, quella che modifica il tasso di apprendimento in modo euristico&

: ?i = : ?i + 9: ?i

t )

) 9: ?i = : 9: t?i se

: 9:

t ) ?i

se

9: ?i

t )

se

/ / >0 w ?i w ?i / t ) / t <0 w ?i w ?i t ) t / / =0 w ?i w ?i

t )

Fig. )2: Hodi$ica dei tassi di apprendi!ento attraverso l*algorit!o 1prop


+ dove 6@:2 e 6@+2 sono due parametri scelti arbitrariamente, tali che risulti 0 < : < )< : , e sono detti, rispettivamente, fattore di incremento e fattore di decremento.

8uando la derivata della funzione costo sul peso sinaptico mantiene per due epoche consecutive lo stesso segno, e quindi la stessa pendenza, il tasso di apprendimento viene moltiplicato per il fattore di incremento che, essendo maggiore di uno, aumenta la velocit. della discesa' viceversa, quando la pendenza varia da un epoca alla successiva, il tasso di apprendimento viene moltiplicato per il fattore di decremento, e quindi diminuito, per avvicinarsi con pi) lentezza al minimo locale della funzione. % valori ritenuti ideali per 6@:2 e 6@+2 sono, rispettivamente, 0.3 e 7.; . ltri algoritmi che cercano di eliminare l'influenza dannosa della derivata parziale sono il SuperS1B !Super self+adHusting back+propagation, /uper retropropagazione autoregolante", sviluppato da (om (ollenaere, e il Luickprop !8uick propagation, 4ropagazione rapida" proposto da Scott >. 8a'lman' oltre ovviamente a tutte le evoluzioni dell' Rprop !Rprop:, Rprop+, Rprop:, Rprop+".

0x03:10 Le funzioni di trasferimento


:i seguito trovate le pi) comuni funzioni di trasferimento usate per le reti di percettroni.

Eunzione lineare&

T % = a% , derivabile come T * ( % ) = a . 3)

+a & se % >0 Eunzione a gradino T ( % ) = , non derivabile. b & se % 0

Eunzione a rampa T ( % ) =

+a & se % a % & se %< a , derivabile come T * ( % ) = ) , a & se % a

valori compresi tra +a e :a.

Eunzione booleana T ( % ) = 0, se % 0 , non derivabile. a & se % > 0

3(

) Eunzione sigmoidea T ( % ) = )+ e% , derivabile nella forma T * ( % ) = T ( % )( ) T ( % )) , valori compresi tra . e -.

Eunzione tangente iperbolica T ( % ) = tan* ( % ) = valori compresi tra +- e :-.

e % e % , derivabile, e % + e %

33

0x0" La libreria (erotonina


/erotonina una libreria libera per la creazione e la gestione di reti neurali artificiali. 9' una libreria orientata agli oggetti, scritta in linguaggio +,, ed stata pensata per gestire con semplicit. ed efficienza qualsiasi tipo di rete neurale feedforward, attraverso vari metodi di apprendimento supervisionato implementati sotto forma di moduli. % tratti distintivi, nonch gli obiettivi che essa si pone di raggiungere, sono& la velocitM, per poter gestire con efficienza e rapidit. qualsiasi tipo di rete neurale artificiale' la modularitM, per consentire agli utilizzatori di estendere le funzionalit. della libreria attraverso la creazione di moduli personalizzati' la portabilitM, principalmente sui sistemi -ND<LinuJ e Gicrosoft Kindows= l'elegan&a del codice, secondo le regole della chiarezza e dell'essenzialit., ponendo sempre al primo posto l'efficienza.

La libreria rilasciata sotto licenza G0N LG"L v3 e i suoi sorgenti sono reperibili all'indirizzo https&<<github.com<KicIer3;</erotonina(Neural(NetworI(LibrarL . /erotonina non necessita di dipendenze particolari, ma alcuni suoi demo si appoggiano alle librerie 8L(G e Open7O. lla stesura di questo documento la versione corrente la -.-.4* la stessa a cui faremo riferimento in questa breve introduzione.

0x0":01 Installazione su sistemi )*+,Linux


/ui sistemi -ND<LinuJ possiamo ottenere una copia dei sorgenti di /erotonina attraverso lo strumento git, dando da terminale un semplice&
W 7it clone Ltt!N//7itLub@com/RicTer25/<erotonina;6eural;6et*orT;Gibrar

4er la compilazione, invece, usiamo lo strumento 7!ake, dopo esserci spostati all'interno della cartella contenente i sorgenti&
W cd <erotonina;6eural;6et*orT;Gibrar W cmaTe @/ ;B0KHXC$/6<#HGG$PJCD/V.<PH#Y> W maTe

Dna volta che la compilazione andata a buon fine possiamo installare la libreria sul nostro sistema digitando&
# maTe install

Gentre possibile annullare una precedente installazione con&


# maTe uninstall

0x0":02 Installazione su sistemi -( .indo/s


Nei sistemi G/ Kindows l'installazione avviene praticamente allo stesso modo, poich +GaIe genera il !akefile o qualsiasi altro #file progetto$ necessario alla compilazione&
> cmaTe @/ ;S <Seneratore del KaTe"ile> ;B0KHXC$/6<#HGG$PJCD/V.<PH#Y>

4er maggiori informazioni& http&<<www.cmaIe.org<KiIi<+GaIeM-eneratorM/pecificM%nformation . 37

l momento non esistono pacchetti autoinstallanti.

0x0":03 0reazione e addestramento di una rete neurale


4er aggiungere /erotonina ai nostri programmi sufficiente includere l'intestazione serotonina.'pp ed utilizzare il rispettivo namespace&
1 2 3 4 5 6 // /ncludo l5intesta+ione di <erotonina #include <serotonina@L!!> // 9so il names!ace di <erotonina usin7 names!ace <erotonina%

4ossiamo creare una nuova rete neurale artificiale istanziando la classe SerotoninaEE0et3ork&
7 int main& void , 8 9 // 0reo la rete neurale 10 6et*orT net*orT& 3) 2) 5) 1 ,% 11

Nel riquadro sovrastante, ad esempio, viene creata una rete neurale multistrato 3J;J0& il primo argomento del metodo costruttore, infatti, indica il numero totale degli strati della rete, mentre i successivi argomenti indicano il numero dei neuroni che li compongono, in modo ordinato dal primo all'ultimo strato. 4er addestrare la nuova rete neurale necessario creare un (rainer, un #addestratore$, che permetta di calibrarne la risposta sulla base degli esempi forniti&
12 13 14 // 0reo l5addestratore della rete neurale #rainer trainer& net*orT ,%

Dna volta associato un (rainer alla rete neurale possibile iniziare l'addestramento scegliendo l'algoritmo e i rispettivi parametri da utilizzare&
15 16 17 18 // Hddestro la rete neurale con il metodo ZatcL trainer@<etParameters& 0@5) 0@8 ,% trainer@#rainFnDile< Hl7oritLmsNNZatcL >& =e(am!les/train/and@train=) 0@000001) 100000) 5000 ,%

%l metodo Set"arameters serve ad impostare i parametri dell'addestramento, in questo caso specifico il tasso di apprendimento e il momentum !fattore inerzia" usati per la Regola /elta Generali&&ata. 4er addestrare la rete neurale, invece, abbiamo a disposizione due metodi& (rain, che legge l'insieme di addestramento da un vettore' (rainOn8ile, che legge l'insieme di addestramento da un file esterno'

%l primo parametro del metodo (rainOn8ile, lo stesso utilizzato nell'esempio precedente, il percorso al file contenente l'insieme di addestramento, il secondo indica l'errore desiderato, il terzo le epoche massime per l'addestramento e l'ultimo l'intervallo di epoche tra un report e l'altro. %l parametro template, invece, la classe(modulo usata per l'addestramento. ttualmente /erotonina mette a disposizione i seguenti algoritmi di addestramento& Batc' CRegola delta : !omentum5, Rprop, Rprop:, Rprop+, Rprop: e Rprop+.

3%

%l contenuto del file 6and.train2 usato per l'addestramento il seguente&


1 2 3 4 5 2 0 0 1 1 1 0N0 1N0 0N0 1N1

La prima riga l'intestazione del training set ed indica alla libreria che gli esempi forniti sono per una rete a due ingressi ed una sola uscita. %l corpo del file, invece, costituito dagli esempi veri e propri, uno per riga, dove il carattere di separazione 6E2 indica la fine degli esempi di ingresso e l'inizio di quelli di uscita. 4er mandare in esecuzione la rete neurale usiamo il metodo Run, che prende come unico parametro un vettore di tipo SerotoninaEE(B"recision contenente gli ingressi della rete, e che restituisce un riferimento al vettore delle uscite&
19 20 21 22 23 24 25 26 27 // /m!osto 7li in7ressi della rete neurale <erotoninaNN#$Precision in223 . - 1) 1 4% // 0alcolo l5uscita della rete neurale const stdNNvector< #$Precision > Qout . net*orT@Jun& in ,% // <tam!o i risultati stdNNcout@set"& stdNNiosNN"i(ed) stdNNiosNN"loat"ield ,% stdNNcout << =>nJun & = << in203 << = H6B = << in213 << = , . = << out203 << stdNNendl% return 0%

28 29 30 4 31

%nfine, con la distruzione dell'istanza, vengono deallocate tutte le strutture della rete.

0x0":0" +n!applicazione reale


%nsieme ai sorgenti della libreria /erotonina sono stati inclusi alcuni software d'esempio che fanno uso delle reti neurali artificiali& uno strumento grafico per l'addestramento delle reti neurali !stMg,m", un riconoscitore di caratteri manoscritti ! stBocr" ed un software per l'autenticazione facciale !stBfaceBrecognition, attualmente in costruzione".

Fig. .6: 1iconoscitore di caratteri !anoscritti

36

4rendiamo in considerazione il riconoscitore di caratteri manoscritti, che rappresenta una possibile applicazione pratica delle reti neurali artificiali. /i tratta di un software in grado di riconoscere una lettera manoscritta su una tavola da disegno, una semplificazione dei programmi utilizzati per la digitalizzazione dei documenti cartacei !O7R". ll'avvio del programma !8ig $." appare una semplice finestra OpenGL costruita attorno al frame3ork 8L(G !una libreria grafica degna di nota per la sua semplicit. e portabilit.". %n questa prima finestra possiamo distinguere la tavola da disegno, nella quale possibile disegnare il carattere manoscritto, ed un riquadro pi) piccolo, contenente il carattere estrapolato dalla tavola' l'area di colore rosso(trasparente la delimitazione automatica del carattere, ossia la pi) piccola area rettangolare che lo pu2 contenere. 8uando disegniamo sulla tavola da disegno, l'area contenente il carattere viene ridimensionata e portata alle dimensioni di 07J07 pJ. 8uesta prima elaborazione, oltre ad estrapolare il carattere dal suo contesto, serve a #normalizzare$ le informazioni prima della classificazione vera e propria, che avviene per mezzo di diverse reti neurali artificiali che operano in cascata. L'immagine 07J07 pJ, infatti, pu2 essere descritta come un vettore monodimensionale di 077 elementi, dove le righe dell'immagine sono messe in fila una dietro l'altra. *gnuno di questi elementi contiene un valore reale compreso tra 7 ed 0, corrispondente al livello di #oscurit.$ del piJel a cui fa riferimento' tuttavia, trattandosi di un'immagine monocromatica, i piJel neri corrisponderanno al valore 0 e quelli bianchi al valore 7.

Fig. .1: /se!pio di elabora+ione del riconoscitore di caratteri !anoscritti

Le informazioni sul carattere vengono quindi processate da diverse reti neurali delle dimensioni di 077J0;J0;J0 !che potete trovare al percorso #dataPc'aracterP $", con un numero di ingressi pari al numero degli elementi del vettore che contiene le informazioni. 1ra tutte le reti neurali, quella con l'indice di riscontro pi) alto identificata come la rete di appartenenza del carattere. Nel caso in cui, invece, l'identificazione non vada a buon fine, possibile correggere la risposta delle reti neurali indicando manualmente la classe di appartenenza del carattere disegnato' potete farlo dal menF di addestramento !8ig $#" che pu2 essere richiamato premendo il tasto 6m2 della tastiera.

Fig. .": HenA di addestra!ento del riconoscitore di caratteri !anoscritti

Dna volta selezionata la classe di appartenenza del carattere sufficiente premere su 61ggiungi carattere2 e, aggiunto un numero sufficiente di esempi, possibile ripetere l'addestramento delle reti neurali premendo sul pulsante 61ddestra le reti2' durante questa fase viene generato il training set di ogni carattere, associando alle immagini del carattere preso in considerazione un uscita alta e 37

a tutte le altre un uscita bassa. /ono sufficienti pochi esempi per consentire il riconoscimento del carattere.

0x0# 0onclusione
pplicazioni come quella del paragrafo precedente mettono in evidenza le straordinarie potenzialit. delle reti neurali artificiali, in particolare la loro forte tolleranza agli errori e la straordinaria capacit. di astrarre nuove soluzioni, l. dove non siamo in grado di spiegare in termini logici la soluzione di un problema. Ga essa solo una delle tante applicazioni. Nella medicina moderna le reti neurali artificiali sono utilizzate in numerosissimi ambiti, dai sistemi di supporto per le persone portatrici di handicap, come i sistemi di e,e tracking !tracciamento dell'occhio" per la video scrittura e le interfacce vocali* che permettono alle persone con limitata mobilit. di interagire con dei dispositivi informatici' fino alla diagnosi precoce delle malattie, ad esempio i sistemi per il riconoscimento dei tessuti tumorali o delle malattie neurodegenerative come l' lzheimer. Ga anche nella finanza, nella meteorologia, nella sismologia, nella biometria, etc. Le reti neurali artificiali trovano significative applicazioni in tutti quei contesti dove gli approcci tradizionali falliscono. 1ra gli svantaggi, invece, dobbiamo citare l'impossibilit. di comprendere a pieno le soluzioni apprese dalle reti, poich esse rimangono dei sistemi a #scatola chiusa$. %noltre reti di elevate dimensioni possono essere computazionalmente pesanti da elaborare, ma questo un limite che sar. presto superato con il progresso dei calcolatori e con la costruzione di hardware dedicato. /pero che questa tesi vi abbia stimolato o quantomeno incuriosito su un argomento che con gli anni si appresta a divenire un tema di grande attualit..

0x0$ 1ibliografia
lberto Garotta, Gisura delle frazioni di produzione degli adroni charmati carichi in interazioni indotte da neutrini nelle emulsioni dellNesperimento +H*BD/, Dniversit. degli /tudi di Napoli #Eederico %%$, 3773 +rescenzio -allo, Beti Neurali rtificiali& 1eoria ed pplicazioni, Dniversit. degli /tudi di Eoggia, 377>, www.dsems.unifg.it<q3A377>.pdf Garco :e Gichele, Dna breve introduzione alle reti neurali, http&<<www.taolab.it<algorithms<nn<nn.htm Garco /carn2, Getodi per lo studio di variabili finanziarie& un confronto teorico ed empirico tra modelli statistici e modelli di reti neuronali, Dniversit. degli /tudi #La /apienza$, http&<<www.caspur.it<Omscarno<accademica<1esiGarco.pdf /alvatore 4oma, Beti Neurali, http&<<utenti.multimania.it<pomas<neural<neural.htm /ilvio +ammarata, /istemi a logica fuzzL. +ome rendere intelligenti le macchine, 91 /, 1orino, 0@@> /tefano +agnoni, pprendimento utomatico, Beti Neurali pprendimento supervisionato, http&<<www.ce.unipr.it<people<cagnoni<didattica<appraut<lucidi<apprautMF.ppt /usi :ulli, /ara Eurini, 9dmondo 4eron, :ata mining metodi e strategie, /pringer, Gilano, 377@ 1eoria e 1ecniche del Biconoscimento, Beti Neurali rtificiali, Dniversit. di 1rento, www.inf.unitn.it<%ntranet<:idattica<GaterialiMcorsi<Laurea<5anno3semestre<5anno3semestreMfile<1L

38

+<download<+apitoloF.pdf Cittorio Cillasmunta,, Beti neurali e previsioni del tempo, 3770, http&<<digilander.libero.it<vvillas<retiMneurali<retiMneuraliMeMprevisioniMdelMte.htm http&<<it.wiIipedia.org<wiIi<Neurone http&<<nsa.liceofoscarini.it<derivate<composta.html http&<<www.accademiaJl.it<=iblioteca<Cirtuale<%pertesti<neuroscienzePL<golgididattica.htm http&<<www.irccsdebellis.it<html<retiMneurali<HomeMretineurali.htm http&<<www.dontveter.com<bpr<faster.html

39

Potrebbero piacerti anche