2. AGENDA DEL CORSO
PARTE I
Introduzione all‟Intelligenza Artificiale e al Machine Learning.
Introduzione alle Reti Neurali. E
Encog 3.0.
Primi Esempi di Reti Neurali. S
PARTE II E
Addestramento supervisionato.
Normalizzazione dei dati. R
Valutazione del modello addestrato.
Classi e metodi d‟utilità per l‟addestramento. C
PARTE III I
Funzioni d‟attivazione.
PARTE IV Z
Altre tipologie di Reti Neurali.
I
REALIZZATO DA: VALERIO CAPOZIO 2
5. INTRODUZIONE ALL‟ IA
L'espressione "Intelligenza Artificiale“ (IA) fu coniata nel 1956 dal matematico
americano John Mc Carthy.
Scopo di questa disciplina è rendere le macchine capaci di compiere azioni per le
quali è richiesta l'applicazione di una qualche forma di "intelligenza".
Il desiderio di creare “automi intelligenti” cui affidare lavori, è sempre stato insito
nell‟uomo:
Nell‟antica Grecia si narrava che Efesto avesse creato degli automi per aiutarlo nei
lavori pesanti (Omero, Iliade XVIII 417-421).
Leonardo da Vinci nel 1495 progetto un automa cavaliere.
Johann Wolfgang von Kempelen (ingegnere ungherese) ideò e presentò il Turco
Meccanico, giocatore di scacchi del 1769.
L‟IA è stata soggetta ad un enorme interesse, seguito da una grande delusione
causata da promesse idealistiche e irraggiungibili:
I robot di Asimov
REALIZZATO DA: VALERIO CAPOZIO 5
6. INTRODUZIONE AL MACHINE LEARNING
Il Machine Learning (ML) è una branca dell‟IA.
Concerne la progettazione e lo sviluppo di algoritmi che consentano ai computer di
apprendere sulla base di dati empirici e, in alcuni casi, evolvere i propri
comportamenti.
Possiamo affermare che:
un algoritmo è in grado di apprendere da un‟esperienza E, rispetto ad un task T e
ad una misura delle prestazioni P, se le sue prestazioni P, nel task T, migliorano con
l‟esperienza E (Mitchell 1997).
Ad esempio:
T: “giocare a tennis”
E: “disputare un match”
P: “score”
REALIZZATO DA: VALERIO CAPOZIO 6
7. PRINCIPALI APPROCCI
Alberi di decisione: modello predittivo che associa le osservazioni di un elemento con
le conclusioni relative ai suoi possibili valori.
SVM: modello di classificazione basato sulla ricerca di un iperpiano di separazione dei
dati.
Clustering: modello basato sulla suddivisione dei dati in “insiemi simili”.
Reti Bayesiane: modello statistico inferenziale. I dati sono variabili generate da
distribuzioni di probabilità e legate da relazioni di dipendenza statistica.
Reti neurali: modello ispirato alla struttura delle reti neurali biologiche.
Algoritmi genetici: modello di algoritmo evolutivo ispirato all‟evoluzione biologica.
REALIZZATO DA: VALERIO CAPOZIO 7
9. ALGORITMI D‟APPRENDIMENTO
Le tecniche di apprendimento sono raggruppabili principalmente in tre macro
tipologie:
Supervisionato: utilizza un insieme di dati di training per ottenere una funzione che
guidi gli input verso gli output desiderati (classificazione).
Rinforzato: utilizza stimoli ambientali esterni (agenti intelligenti).
Non supervisionato: utilizza i dati osservati per modellarli ed ottenere l‟output
(clustering).
Semi-supervisionato: utilizza i due approcci precedenti combinandoli.
REALIZZATO DA: VALERIO CAPOZIO 9
10. ADDESTRAMENTO SUPERVISIONATO
Il sistema apprende una funzione dell‟input partendo da esempi di coppie input-
output
Esempio: Previsioni del tempo
Input: coppie temperatura – pressione
Output: bello /brutto tempo
T(°C) P(hPa) Output
12.2 1022.8 Bello
20.4 1015.9 Bello
25.2 1028.9 Brutto 𝒚 = 𝒔𝒊𝒈𝒏(𝜶 ∗ 𝑻 + 𝜷 ∗ 𝑷)
17.7 1020.0 Brutto
18.4 1021.5 Brutto
22.0 1021.7 Bello
28.1 1016.3 Brutto
REALIZZATO DA: VALERIO CAPOZIO 10
11. ADDESTRAMENTO SUPERVISIONATO RINFORZATO
Il sistema apprende esplorando l’ambiente e ricevendo ricompense in caso di azioni
positive.
Questa metodologia è utilizzata soprattutto per gli agenti software.
REALIZZATO DA: VALERIO CAPOZIO 11
12. ADDESTRAMENTO NON SUPERVISIONATO
Il sistema impara a riconoscere pattern o schemi nell‟input senza alcuna indicazione
dei valori di output.
Esempio: Clustering, Market Basket Analysis
REALIZZATO DA: VALERIO CAPOZIO 12
14. PROCEDURA DI APPRENDIMENTO
Training Set Testing Set
La procedura di apprendimento è divisa in 2 fasi:
Training:
Al sistema viene fornito un insieme di coppie input-output
Il sistema adatta il proprio stato interno per classificare correttamente le coppie
fornite.
Testing:
Al sistema viene fornito un diverso insieme di input(di cui è comunque noto
l‟output)
Si valuta l‟accuratezza del sistema analizzando la percentuale di risposte corrette
REALIZZATO DA: VALERIO CAPOZIO 14
15. ESEMPI DI REGRESSIONE
A) Under-fitting
B) Ok
C)Over-fitting
REALIZZATO DA: VALERIO CAPOZIO 15
16. OVER-FITTING
Adattare troppo il modello ai dati di input può portare al problema dell‟over-fitting.
In caso di over-fitting il sistema perde la sua capacità di generalizzazione.
Per prevenire il problema si può suddividere ulteriormente il training set, tenendo da
parte un validation set.
Durante l‟allenamento, si testerà
periodicamente l‟accuratezza del modello sul
validation set.
In presenza di un errore maggiore sul
validation set si è in over-fitting.
REALIZZATO DA: VALERIO CAPOZIO 16
17. N-FOLD CROSS VALIDATION
Per assicurarsi di non aver introdotto bias con suddivisioni particolari del result set si
possono applicare delle tecniche come:
Random sampling
N-fold cross validation: Si suddivide il dataset in N sottoinsiemi, si allena il sistema su N-
1 sottoinsiemi e lo si testa sul restante sottoinsieme. Si itera per N volte e si prende la
media dei risultati.
REALIZZATO DA: VALERIO CAPOZIO 17
18. 3-FOLD CROSS VALIDATION
Addestro tutti i punti non rossi e testo la qualità del modello sui rossi.
Addestro tutti i punti non verdi e testo la qualità del modello sui verdi.
Addestro tutti i punti non blu e testo la qualità del modello sui blu.
MSE lineare 2.05
MSE quadratico 1.11
MSE unisci punti 2.93
REALIZZATO DA: VALERIO CAPOZIO 18
19. QUICK TRICKS
Azioni che possono essere prese in considerazione per uscire da situazioni di
underfitting sono:
Inserire feature aggiuntive
Adottare un modello più complesso
Azioni che possono essere prese in considerazione per uscire da situazioni di overfitting
sono:
Inserire esempi di training aggiuntivi
Rimuovere alcune feature
REALIZZATO DA: VALERIO CAPOZIO 19
20. SKEWED DATA
Con questo termine sono indicati dataset contenenti classi asimmetriche.
Situazione che si verifica spesso nei casi reali
Fraud detection
Carte di credito
Acquisti on line
Furti di identità
Ecc
Esistono tecniche per tentare di superare questo problema:
Applicare un costo di errata classificazione
Under sampling
Over sampling
Utilizzare misure specifiche per valutare il modello ottenuto.
REALIZZATO DA: VALERIO CAPOZIO 20
22. NEURAL NETWORK
Il cervello umano è composto di
circa 1011 neuroni (100 bilioni).
Ogni neurone è connesso ad altri
e riceve segnali elettrici
attraverso i dendriti.
Ogni neurone invia messaggi
attraverso una lunga Dendriti
appendice chiamata assone.
Al termine di ogni assone si
diramano una serie di Assone
ramificazioni dette sinapsi. Sinapsi
Le sinapsi hanno lo scopo di
stimolare gli altri neuroni,
tramite segnali elettrici, al fine
di attivarli.
L‟apprendimento influenza la
capacità delle sinapsi di
attivare o meno altri neuroni.
REALIZZATO DA: VALERIO CAPOZIO 22
23. ARTIFICIAL NEURAL NETWORK
Il termine Artificial Neural Network (ANN) è utilizzato in IA, per identificare modelli
matematici volti a simulare la struttura e il funzionamento della rete neurale umana.
Le ANNs sono utilizzate per approcciare problemi di:
Pattern recognition
Classificazione/Predizione
Regressione
Image Analysis
…
Esistono diverse tipologie di reti:
FeedForward
Single-Layer
Multi-Layer
Recurrent
Self-Organizing Map (SOM)
Tipicamente le ANNs sono sistemi adattivi che mutano dinamicamente la propria
struttura topologica sulla base di informazioni che giungono durante la fase di
learning.
REALIZZATO DA: VALERIO CAPOZIO 23
24. STRUTTURA DI UN NEURONE ARTIFICIALE
Pesi BIAS
X1 Output
W1
𝑛
X2 W2
𝑥𝑖 𝑤𝑖 O1
Input
W3 𝑖=1
X3
Wn Funzione
d’attivazione
Xn
REALIZZATO DA: VALERIO CAPOZIO 24
25. COMPARAZIONE TRA MODELLI
Input
Sinapsi
F.Attivazio
Dendriti ne
Assone
Output
REALIZZATO DA: VALERIO CAPOZIO 25
26. CONNESSIONI TRA NEURONI
L‟utilizzo di più neuroni può dar vita a diverse topologie di rete:
Single Layer Multi Layer
REALIZZATO DA: VALERIO CAPOZIO 26
27. APPRENDIMENTO IN UNA RETE NEURALE
Una rete neurale, nella fase d‟apprendimento, stabilisce delle relazioni tra gli input e gli
output.
Calcolando l’importanza relativa esistente tra gli input e gli output il sistema è capace
di determinare alcune relazioni.
Il sistema compara i risultati attesi, presenti nel training-set, con quelli ottenuti attraverso
i diversi tentativi.
Lo studio dell‟errore compiuto ad ogni tentativo guida la modifica dei pesi assegnati
agli input.
L‟apprendimento può terminare al verificarsi di diverse condizioni, ad esempio quando
la rete raggiunge una data soglia di accuratezza.
REALIZZATO DA: VALERIO CAPOZIO 27
29. ENCOG 3.0
Encog è un Framework sviluppato sia in Java che .Net
Nato come framework per progettare e realizzare diverse tipologie di reti neurali sta evolvendo
includendo anche altre tecniche di machine learning.
Consente programmazione multithreading.
Può utilizzare la GPU per velocizzare i calcoli.
Per utilizzare la versione JAVA è necessario aver installato:
JVM 1.6 o superiori
Maven
IDE (Eclipse)
È richiesta familiarità con:
metodologie di programmazione OO;
utilizzo delle Collection;
utilizzo dei Generics;
capacità di consultare la javadoc.
REALIZZATO DA: VALERIO CAPOZIO 29
30. STRUTTURA DI UNA RETE NEURALE CON ENCOG
(1/2)
Input Layer:
L‟input di una rete neurale è SEMPRE rappresentato come un array di double.
Ogni elemento dell‟ array memorizza il valore di un neurone di input.
double[].size() = #neuroni in input.
In Encog questo array di double è gestito mediante l‟interfaccia
org.encog.ml.data.MLData.
Output Layer:
Rappresentato anche questo come un array di double.
Sempre gestito mediante l‟interfaccia MLData.
REALIZZATO DA: VALERIO CAPOZIO 30
31. STRUTTURA DI UNA RETE NEURALE CON ENCOG
(2/2)
Per rappresentare una generica rete in Encog si utilizza la classe
org.encog.neural.networks.BasicNetworks.
BasicNetworks fornisce i metodi e le strutture adatti per modellare una rete generica.
I metodi principali per la creazione della struttura sono:
addLayer(Layer l): consente di aggiungere livelli alla rete;
reset(): permette di inizializzare i pesi in maniera casuale.
Terminata l‟aggiunta dei livelli, prima di invocare il metodo reset() deve SEMPRE essere
invocato il metodo getStructure().finalizeStructure() per dichiarare completa la
struttura.
REALIZZATO DA: VALERIO CAPOZIO 31
32. ADDESTRAMENTO DI UNA RETE NEURALE CON
ENCOG (1/2)
L‟interfaccia org.encog.ml.data.MLDataSet è utilizzata in Encog per memorizzare i dati
dell‟insieme di training.
L‟insieme di training è composto di due sottoinsiemi:
I dati di input, su cui addestrare la rete.
I dati di output attesi per l‟input passato.
Gli oggetti di tipo MLDataSet consentono di gestire i valori dell‟insieme di training
mediante un unico oggetto.
Oggetti di tipo MLDataSet sono tipicamente memory-based. Quindi, per insiemi
particolarmente corposi di dati possono dar luogo a problemi di memoria
REALIZZATO DA: VALERIO CAPOZIO 32
33. ADDESTRAMENTO DI UNA RETE NEURALE CON
ENCOG (2/2)
Attraverso un oggetto di tipo org.encog.ml.train.MLTrain è possibile eseguire
l‟addestramento della rete.
Da un oggetto di tipo MLTrain è possibile eseguire un ciclo d‟addestramento invocando il
metodo iteration().
Al termine dell‟addestramento è MOLTO importante invocare il metodo finishTraining(). La
chiamata di questo metodo è particolarmente importante nella programmazione
multithread.
È possibile calcolare l‟errore compiuto dal modello durante l‟addestramento utilizzando il
metodo getError() sull‟oggetto di tipo MLTrain.
Ad un algoritmo d‟addestramento può essere assegnata una strategia attraverso il metodo
addStrategy(Strategy s)
L‟interfaccia org.encog.ml.train.strategy.Strategy è implementata da tutte le classi che
consentono di aggiungere logica addizionale al processo di addestramento
REALIZZATO DA: VALERIO CAPOZIO 33
34. ESECUZIONE DI UNA RETE NEURALE CON
ENCOG
Per eseguire la rete ottenuta è necessario invocare il metodo compute(MLData d).
Questo metodo, preso in input l‟oggetto MLData, esegue la rete e restituisce in output
un oggetto dello stesso tipo contenente il valore elaborato dalla rete.
È possibile utilizzare le reti anche come classificatori attraverso il metodo
classify(MLData d). L‟output in questo caso sarà un intero rappresentante la classe
d‟appartenenza dell‟input.
Esiste infine un metodo winner(MLData d) che restituisce un intero rappresentante
l‟indice del neurone di output attivato.
REALIZZATO DA: VALERIO CAPOZIO 34
36. LA NOSTRA PRIMA RETE
Feed-Forward Single-Layer:
Segnali viaggiano in una sola direzione.
La rete calcola una funzione degli input.
Percettrone.
I neuroni sono connessi tramite archi orientati e pesati
Un percorso può essere:
stimolante (peso positivo)
inibitorio (peso negativo).
L‟attivazione di un neurone è di tipo binario, il neurone può essere:
attivo (fired)
inattivo (not fired).
La funzione d‟attivazione sarà quindi del tipo:
F(yin) = 1, se yin>=T 0 altrimenti
Dove yin è il totale dei segnali ricevuti in input e T è la threshold per Y
REALIZZATO DA: VALERIO CAPOZIO 36
37. PRIMI ESEMPI: FUNZIONE NOT
X1 Y
0 1
1 0
-1
X1 Y
Threshold(Y)=0
REALIZZATO DA: VALERIO CAPOZIO 37
38. PRIMI ESEMPI: FUNZIONE AND
X1 X2 Y
0 0 0
0 1 0
1 0 0
1 1 1
X1 1
Y
X2 1
Threshold(Y)=1,5
REALIZZATO DA: VALERIO CAPOZIO 38
39. PRIMI ESEMPI: FUNZIONE OR
X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 1
X1 2
Y
X2 2
Threshold(Y)=2
REALIZZATO DA: VALERIO CAPOZIO 39
40. PRIMI ESEMPI: FUNZIONE XOR
X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 0
?
REALIZZATO DA: VALERIO CAPOZIO 40
41. COSA PUÒ RAPPRESENTARE UN PERCETTRONE
1,1
1,1
0,1
0,1
0,0 1,0
1,0
0,0
AND XOR
Funzioni che possono essere separate come nel caso della funzione AND sono
dette linearmente separabili.
Un percettrone, e più in generale una rete feed-forward single-layer, può
rappresentare SOLO funzioni linearmente separabili.
XOR non può essere rappresentato attraverso un percettrone.
REALIZZATO DA: VALERIO CAPOZIO 41
42. COME RAPPRESENTARE UNO XOR
Modificando l‟espressione logica e riscrivendola in forme note.
X1 XOR X2 = (X1 AND NOT X2) OR (NOT X1 AND X2)
X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 0
X NOT X NOT X1 AND NOT NOT X1 AND Y
1 X1 2 X2 X2 X2
0 1 0 1 0 0 0
0 1 1 0 0 1 1
1 0 0 1 1 0 1
1 0 1 0 0 0 0
REALIZZATO DA: VALERIO CAPOZIO 42
43. PRIMI ESEMPI: FUNZIONE XOR
X1 X2 Y
0 0 0
0 1 1 Threshold(H)=2
1 0 1 Threshold(Y)=2
1 1 0
Hidden-
(X1 AND NOT X2) Layer
2
X1 H
1 2
-1
OR Y
-1
H 2
X2 2
2
(X2 AND NOT X1)
X1 XOR X2 = (X1 AND NOT X2) OR (NOT X1 AND X2)
REALIZZATO DA: VALERIO CAPOZIO 43
44. HIDDEN LAYER
Servono per modellare problemi più complessi, come la funzione logica XOR.
Sono detti nascosti perché a cavallo tra il livello di input e di output della rete neurale
quindi all‟interno della blackbox rappresentata dalla rete stessa.
Nella stessa rete possono coesistere diversi livelli nascosti.
In molti casi si utilizza un numero di hidden layer compreso tra 1 e 2.
REALIZZATO DA: VALERIO CAPOZIO 44
47. ADDESTRAMENTO SUPERVISIONATO
Nella fase di addestramento i valori di pesi e soglie della rete neurale sono impostati in modo
da ottenere gli output desiderati.
Nell‟addestramento supervisionato, oltre ai dati di input, vengo passati all‟algoritmo anche i
dati attesi in output.
Le tecniche di addestramento a propagazione sono diverse e possono dare risultati
estremamente performanti a patto di avere un congruo numero di dati valutati e non
eccessivamente rumorosi.
Encog supporta tre principali forme di addestramento per propagazione:
Backpropagation.
Manhattan Update Rule.
Resilient Propagation.
Le classi di Encog basate sulla propagazione implementano l‟interfaccia
org.encog.neural.networks.training.propagation.Propagation.
REALIZZATO DA: VALERIO CAPOZIO 47
48. DISCESA DEL GRADIENTE
La discesa del gradiente è una tecnica di ottimizzazione locale.
Data una funzione differenziabile, la discesa del gradiente consente di trovare un
minimo (locale) in questa funzione.
La tecnica consiste nel valutare la funzione stessa e il suo gradiente in un punto scelto
a caso. Scelto poi un secondo punto sulle indicazioni del gradiente, si confrontano i
valori dei due punti.
Si possono verificare 2 casi:
La funzione ha un valore minore: si continua la discesa seguendo le indicazioni
ottenute dal calcolo del gradiente sul secondo punto.
La funzione ha un valore maggiore:
Si è arrivati ad un minimo locale.
Ci si è allontanati troppo dal primo punto.
REALIZZATO DA: VALERIO CAPOZIO 48
49. ADDESTRAMENTO A PROPAGAZIONE (1/2)
Gli algoritmi a propagazione passano attraverso una serie di iterazioni.
Ad ogni iterazione si tenta di migliorare l‟error-rate della rete neurale.
Ogni iterazione esegue un ciclo completo sull‟intero insieme dei dati di training
calcolando variazioni sui pesi e sulle soglie.
Un ciclo completo è comunemente identificato col nome di epoca .
I cambiamenti così calcolati sono applicati al termine di ogni iterazione, in questo
modo è possibile valutare, al termine di ogni epoca, lo stato dell‟addestramento.
REALIZZATO DA: VALERIO CAPOZIO 49
50. ADDESTRAMENTO A PROPAGAZIONE (2/2)
Nel corso di un‟epoca vengono elaborati tutti gli elementi presenti nel insieme di
training.
L‟elaborazione di ognuno di questi elementi dell‟insieme di training consiste di due fasi:
Forward.
Backward.
Nel fase di forward i dati vengono passati alla rete come se questa non fosse in fase di
addestramento. In questa fase vengono mantenuti anche gli output dei livelli
intermedi.
Nella fase di backward si procede a ritroso, partendo dal livello di output, si calcola la
differenza tra ognuno degli output reali con il corrispettivo ideale per ognuno dei
neuroni. Il gradiente di questa differenza viene poi calcolato effettuando la
derivata della funzione d‟attivazione del livello e moltiplicando il risultato ottenuto
per l‟errore.
REALIZZATO DA: VALERIO CAPOZIO 50
51. BACKPROPAGATION
L‟algoritmo di backpropagation è uno dei primi metodi d‟addestramento introdotti per
le reti neurali.
L‟algoritmo, oltre all‟errore, utilizza due parametri:
Learning rate.
Momentum.
Il learning rate è una percentuale che determina come il gradiente dovrebbe essere
applicato ai pesi e alle soglie. Il gradiente è moltiplicato per il learning rate e poi
aggiunto ai pesi e alle soglie.
Il Momentum è anch‟esso una percentuale e specifica con quale proporzione i
cambiamenti apportati nell‟epoca precedente debbano essere riapplicati.
REALIZZATO DA: VALERIO CAPOZIO 51
52. MANHATTAN UPDATE RULE
L‟utilizzo del gradiente può portare a cambiamenti troppo grandi nella matrice dei
pesi.
Algoritmi come questo utilizzano quindi solo il segno del gradiente. Ovvero l‟unica cosa
importante per l‟algoritmo non è il valore numerico del gradiente, ma che questi sia
positivo, negativo o vicino a zero.
Il segno del gradiente è utilizzato per determinare come aggiornare i valori di pesi e
soglie.
Se il valore è vicino allo zero nessun cambiamento viene apportato.
Se il valore è positivo il peso o la soglia sono incrementati.
Se il valore è negativo il peso o la soglia sono decrementati.
Il valore di incremento o decremento è una costante fornita in input all‟algoritmo.
REALIZZATO DA: VALERIO CAPOZIO 52
53. RESILIENT PROPAGATION
Il miglior pregio di questo algoritmo è l‟assenza di parametri aggiuntivi da impostare.
L‟algoritmo lavora in maniera similare al Manhattan update rule sfruttando il segno del
gradiente, ma utilizza un approccio più raffinato per calcolare il valore del
cambiamento da apportare.
Differentemente dagli altri due algoritmi appena proposti non utilizza parametri fissi, ma
ricalcola il valore da applicare sulla base dei progressi fatti dall‟addestramento.
Il valore d‟aggiornamento è estremamente piccolo all‟inizio per poi variare, nel corso
delle epoche, sulla base del segno (incremento/decremento) e del valore del
gradiente.
REALIZZATO DA: VALERIO CAPOZIO 53
54. SVANTAGGI DELL‟ADDESTRAMENTO A
PROPAGAZIONE
Sono algoritmi basati sull‟epoca, ovvero propagano tutti i dati in avanti e poi tutti gli
errori all‟indietro.
Avere l‟epoca come scope d‟addestramento può essere molto oneroso dal punto di
vista computazionale se si hanno molti dati.
Utilizzano il metodo di discesa del gradiente e quindi soffrono di:
Convergenza su minimi locali.
Convergenza lenta. Se la derivata è piccola l‟algoritmo si muove a piccoli passi.
REALIZZATO DA: VALERIO CAPOZIO 54
55. ADDESTRAMENTO A PROPAGAZIONE E
MULTITHREADING (1/2)
Ormai anche i computer di fascia più bassa sono dei multicore e quindi possono istanziare
più di un thread fisico alla volta.
Per sfruttare il vantaggio di avere core multipli su cui eseguire operazioni macchina è
necessario avere del software che sia multithread.
L‟idea generale si basa sul principio del DIVIDE ET IMPERA.
Encog consente la programmazione multithread in quei task tipicamente time consuming.
Ad esempio nella fase di training.
Tutti gli algoritmi d‟addestramento basati sulla tecnica della propagazione supportano
nativamente il multithreading.
Per specificare alla rete quanti thread utilizzare si fa uso del metodo setThreadCount(int n)
dell‟oggetto di tipo Propagation.
REALIZZATO DA: VALERIO CAPOZIO 55
56. ADDESTRAMENTO A PROPAGAZIONE E
MULTITHREADING (2/2)
Le tecniche di programmazione multithread fanno sentire maggiormente il loro
contributo in presenza di grandi moli di dati e, ovviamente, in presenza di
macchine che le supportino.
La possibilità di utilizzare più thread viene sfruttata nell‟elaborazione dei passi di
Forward e Backward.
All‟inizio di ogni epoca i dati vengono suddivisi in pacchetti e ogni pacchetto
assegnato ad un thread distinto per essere elaborato. Al termine un solo thread si
occupa di aggregare i risultati di tutte le elaborazioni e di riportare i risultati globali
sulla rete.
Avere un‟elaborazione multithread NON influisce sul numero di epoche necessarie
all‟addestramento della rete, ma sulla velocità dell‟addestramento.
REALIZZATO DA: VALERIO CAPOZIO 56
58. INTRODUZIONE ALLA NORMALIZZAZIONE
Spesso i dati ottenuti non sono utilizzabili direttamente da una rete.
Le reti neurali sono progettate per accettare in input numeri in virgola mobile.
In particolare lavorano al massimo delle prestazioni con input appartenenti al range [-
1,1] o [0,1].
La scelta del range può essere influenzata dall‟utilizzo di una determinata funzione
d‟attivazione.
Ad esempio la funzione Sigmoide gestisce solo numeri appartenenti ad un range
positivo.
Normalizzare, a seconda del tipo di dato trattato, può implicare diverse operazioni.
REALIZZATO DA: VALERIO CAPOZIO 58
59. NORMALIZZAZIONE DI VALORI NUMERICI (1/2)
I valori numerici sono comunemente utilizzati sia come input che come output.
I loro valori numerici hanno un significato in quanto numeri.
Affermare che il monte X sia alto 1000m e il monte Y sia alto 1200m ha un significato
perché 1200 > 1000.
Valori come l‟altezza dei monti non rientrano però nel range che consente alle reti
neurali di lavorare in maniera ottimale e devono quindi essere normalizzati.
In questo caso l‟operazione di normalizzazione consiste nel riportare i dati numerici
entro un range prestabilito [-1,1] oppure [0,1].
REALIZZATO DA: VALERIO CAPOZIO 59
60. NORMALIZZAZIONE DI VALORI NUMERICI (1/1)
La normalizzazione di valori numerici in Encog può essere eseguita attraverso la classe
org.encog.util.arrayutil.NormalizeArray.
Il metodo di normalizzazione è basato sulla seguente equazione:
𝑥 − 𝑚𝑖𝑛
𝑓 𝑥 = ∗ 𝑖𝑔 − 𝑙𝑜𝑤 + 𝑙𝑜𝑤
𝑚𝑎𝑥 − 𝑚𝑖𝑛
Dove:
x = il valore da normalizzare.
min = il valore minimo ricoperto da x.
max = il valore massimo ricoperto da x.
low = il valore minimo del range.
high = il valore più alto del range.
REALIZZATO DA: VALERIO CAPOZIO 60
61. NORMALIZZAZIONE DI VALORI NOMINALI (1/3)
I valori nominali sono utilizzati tipicamente per assegnare delle label alle cose.
Ad esempio il genere di una persona: uomo o donna.
I valori nominali possono essere utilizzati anche per descrivere attributi di un oggetto.
Valori nominali possono essere utilizzati sia in fase di input che di output.
Per essere normalizzati i valori nominali devono essere ricondotti a valori numerici
capaci di rappresentarli.
In Encog esistono due modalità di normalizzazione dei valori nominali:
One-of-n.
Equilateral.
REALIZZATO DA: VALERIO CAPOZIO 61
62. NORMALIZZAZIONE DI VALORI NOMINALI (2/3)
One-of-n è una forma di normalizzazione molto semplice.
Supponendo di avere una rete che in output restituisce 3 valori nominali A, B, C.
La rete dovrà avere tre neuroni di output (uno per ogni valore nominale).
Il valore nominale predetto dalla rete dovrà corrispondere al neurone col più alto
valore d‟attivazione.
Nell‟insieme di training i valori ideali di output saranno codificati inserendo un 1 nella
posizione relativa al neurone da attivare e -1 nelle altre. Si avrà ad esempio:
A=1,-1,-1
B=-1,1,-1
C=-1,-1,1
REALIZZATO DA: VALERIO CAPOZIO 62
63. NORMALIZZAZIONE DI VALORI NOMINALI (3/3)
Consente di „„spalmare‟‟ l‟errore su tutti i neuroni coinvolti.
Questo approccio garantisce che lo stesso errore abbia lo stesso peso anche in caso
di neuroni differenti.
Per ottenere questo risultato è necessario che ogni insieme di valori abbia la stessa
distanza.
Per quantificare la distanza viene utilizzata la distanza euclidea tra due punti.
𝑖1 − 𝑎1 2 + 𝑖2 − 𝑎2 2 +⋯ 𝑖𝑛− 𝑎𝑛 2
𝑑𝑖𝑠𝑡𝑎𝑛𝑧𝑎 =
𝑛
Dove:
i: rappresenta il valore di output ideale;
a: rappresenta il valore di output realmente ottenuto.
REALIZZATO DA: VALERIO CAPOZIO 63
65. MEAN SQUARED ERROR
L‟errore quadratico medio o mean squared error (MSE) è una misura utilizzata per
quantificare la qualità della stima effettuata.
L‟errore quadratico medio misura quanto i valori predetti si discostino da quelli reali.
𝑁 2
𝑖=1 𝑟𝑒𝑎𝑙 𝑖 − 𝑝𝑟𝑒𝑑 𝑖
𝑀𝑆𝐸 =
𝑁
In particolare valuta per ogni dato la distanza esistente tra il punto predetto e il
corrispondente reale.
Il quadrato è inserito per evitare che valori negativi cancellino i positivi.
REALIZZATO DA: VALERIO CAPOZIO 65
66. CONFUSION MATRIX
Rappresentazione tabellare del
risultato di una classificazione.
Valori FALSE classificati Ogni riga rappresenta un‟istanza di
come Positivi una classe predetta.
Errore di Tipo I Ogni colonna rappresenta un‟istanza
di una classe reale.
Valori Reali
Consente di capire le reali
True False prestazioni di un classificatore
Valori Predetti
anche nel caso di dataset
Positive True Positive False sbilanciati.
Positive
Negativ False True Un vantaggio di questa
e Negative Negative rappresentazione è la possibilità
di individuare subito se il
Valori TRUE classificati sistema confonde due classi.
come Negativi
Errore di Tipo II
REALIZZATO DA: VALERIO CAPOZIO 66
67. ACCURACY
L‟accuracy è una misura
statistica, utilizzata per
quantificare quanto
bene funzioni un
classificatore nell‟ Valori Reali
identificare le classi. True False
Valori Predetti
È definita come il Positive True Positive False
rapporto tra tutti i Positive
risultati true rispetto Negativ False True
all‟intera popolazione. e Negative Negative
𝑇𝑃+𝑇𝑁
𝐴𝑐𝑐 =
𝑇𝑃+𝑇𝑁+𝐹𝑃+𝐹𝑁
REALIZZATO DA: VALERIO CAPOZIO 67
68. PRECISION
La Precision è una misura
statistica utilizzata per Valori Reali
quantificare quanto bene
un classificatore identifichi i True False
membri di una classe.
Valori Predetti
Positive True Positive False
Questa misura è definita come Positive
il rapporto tra i true positive
e tutti i valori predetti come Negativ False True
positive. e Negative Negative
𝑇𝑃
𝑃𝑟𝑒𝑐 = 𝑇𝑃+𝐹𝑃
Un sistema con elevata
Precision tipicamente pochi
errori di Tipo I.
REALIZZATO DA: VALERIO CAPOZIO 68
69. RECALL
La Recall è una misura
statistica utilizzata per Valori Reali
quantificare quanto bene
un classificatore identifichi True False
risultati positivi.
Valori Predetti
Positive True Positive False
Questa misura è definita come Positive
il rapporto tra i true positive
e tutti i valori reali di quella Negativ False True
classe. e Negative Negative
𝑇𝑃
𝑅𝑐𝑎𝑙𝑙 = 𝑇𝑃+𝐹𝑁
Un sistema con elevata Recall
ha tipicamente pochi errori
di Tipo II.
REALIZZATO DA: VALERIO CAPOZIO 69
71. LEGGERE DATI DA FONTI ESTERNE
Encog dispone di alcune classi di utilità per leggere dati in maniera agevole da fonti
esterne quali:
File CSV.
Database Relazionali.
In entrambe i casi si fa uso di particolari specializzazioni della classe BasicMLDataSet.
org.encog.ml.data.specific.CSVNeuralDataSet. Sarà sufficiente istanziare l‟oggetto
passando come parametri il path del file, e le dimensioni del dataset di input e del
dataset di output atteso per ottenere un oggetto di tipo MLDataSet da utilizzare.
org.encog.ml.data.specific.SQLNeuralDataSet. Sarà sufficiente istanziare l‟oggetto
passando una connessione al database, la query SQL da effettuare e le dimensioni
del dataset di input e del dataset di output atteso per ottenere un oggetto di tipo
MLDataSet da utilizzare.
REALIZZATO DA: VALERIO CAPOZIO 71
72. METODI UTILI DI MLTRAIN
L‟addestramento di insiemi di dati molto corposi può portare via diverse ore (anche giorni).
Encog consente, con alcuni algoritmi d‟addestramento, di bloccare il processo e riprenderlo
in seguito.
Per sapere se un algoritmo d‟addestramento consente di essere „„messo in pausa‟‟ si può
richiamare il metodo canContinue().
Per bloccare un algoritmo e riprenderne in seguito l‟elaborazione si utilizza invece il metodo
pause() che restituirà un oggetto di tipo
org.encog.neural.networks.training.propagation.TrainingContinuation.
Per riprendere un addestramento precedentemente interrotto sarà necessario invocare il
metodo resume(TrainingContinuation tc).
Questi tre metodi sono presenti in tutti gli algoritmi d‟addestramento poiché specificati
nell‟interfaccia MLTrain.
REALIZZATO DA: VALERIO CAPOZIO 72
73. INTERFACCIA D‟UTILITÀ ENCOGPERSISTOR
Encog consente di salvare i modelli ottenuti a valle dell‟addestramento mediante
l‟utilizzo degli oggetti di tipo org.encog.persist.EncogPersistor.
EncogPersistor è un‟interfaccia di cui esistono diverse implementazioni che
specializzano i metodi sulla base del modello che si intende salvare.
Un oggetto di tipo EncogPersistor salva un oggetto di Encog in un file EG.
I metodi principali della classe sono 3:
getPersistClassString(). Restituisce una stringa contenente il nome della classe che si
vuole salvare/caricare.
read(InputStream i). Restituisce un Object contenente quanto caricato dallo stream.
save(OutputStream o, Object o). Salva l‟Object tramite lo stream.
REALIZZATO DA: VALERIO CAPOZIO 73
76. INTRODUZIONE ALLE FUNZIONI D‟ATTIVAZIONE
La funzione d‟attivazione è una delle componenti base dell‟architettura di una rete
neurale.
La funzione d‟attivazione agisce come una „„funzione di schiacciamento‟‟
comprimendo l‟output di un neurone in un determinato range (tipicamente [0,1]
oppure [-1,1])
In generale si possono raggruppare le funzioni d‟attivazione in tre macro-categorie:
1 𝑣≥0
Basate su soglia: 𝜑 𝑣 =
0 𝑣<0
1
1 𝑣≥
2
1 1
Lineari: 𝜑 𝑣 = 𝑣 − > 𝑣>
2 2
1
0 𝑣≤−
2
𝑣 1−exp(−𝑣)
Sigmoidali: 𝜑 𝑣 = tanh =
2 1+exp(−𝑣)
REALIZZATO DA: VALERIO CAPOZIO 76
77. INTERFACCIA ACTIVATIONFUCTION
In Encog tutte le funzioni d‟attivazione implementano l‟interfaccia
org.encog.engine.network.activation.ActivationFunction.
L‟interfaccia dichiara tre metodi
void activationFunction(double[] d)
void derivativeFunction(double[] d)
boolean hasDerivative()
La logica applicativa della funzione d‟attivazione si trova all‟interno del metodo
activationFunction.
Il secondo metodo è implementato da tutte quelle funzioni che si intende utilizzare
anche per l‟addestramento basato su propagazione.
Il terzo metodo è utilizzato per capire, in maniera veloce, se una funzione è
differenziabile oppure no.
REALIZZATO DA: VALERIO CAPOZIO 77
78. SCELTA DELLA FUNZIONI D‟ATTIVAZIONE
La scelta di quale funzione d‟attivazione utilizzare può essere guidata da alcuni
parametri quali:
Il tipo di rete neurale che si intende utilizzare.
Il tipo d‟addestramento che si intende utilizzare.
Il range in cui l‟output deve ricadere.
Oltre a questi criteri, utili per orientarsi nella scelta iniziale, sono poi sempre i dati a
guidare e validare le scelte compiute.
REALIZZATO DA: VALERIO CAPOZIO 78
79. ACTIVATIONBIPOLAR
Utilizzata quando si ha la necessità di ottenere un output bipolare.
Per qualunque valore passatole l‟output ottenuto può essere solo 1 o -1
𝑥>0 1
𝑓 𝑥 =
𝑥 ≤0 −1
Non è una funzione differenziabile.
REALIZZATO DA: VALERIO CAPOZIO 79
80. ACTIVATIONCOMPETITIVE
Utilizzata per forzare solo un gruppo di neuroni a vincere.
Vince il gruppo di neuroni che ha l‟output maggiore.
La grandezza dei gruppi è definibile mediante parametro.
Tutti i neuroni facenti parte del gruppo vincente avranno lo stesso valore, gli altri
saranno invece impostati a 0.
Non è una funzione differenziabile.
Spesso utilizzata nelle reti di tipo SOM.
REALIZZATO DA: VALERIO CAPOZIO 80
81. ACTIVATIONGAUSSIAN
Basata sulla funzione Gaussiana, produce la classica forma a campana.
𝑥−𝑏 2
−
𝑓 𝑥 = 𝑎𝑒 2𝑐 2
Dove a rappresenta l‟altezza del picco della curva, b rappresenta la posizione della
curva, c rappresenta la larghezza della curva.
È una funzione differenziabile.
a
b
c
REALIZZATO DA: VALERIO CAPOZIO 81
82. ACTIVATIONLINEAR
Non è una vera e propria funzione d‟attivazione.
Implementa semplicemente una funzione lineare del tipo :
𝑓 𝑥 = 𝑥
Questa funzione è utilizzata principalmente per specificare funzioni d‟attivazioni fittizie
per reti che non ne fanno uso come alcuni tipi di SOM.
È una funzione differenziabile.
REALIZZATO DA: VALERIO CAPOZIO 82
83. ACTIVATIONLOG
Utilizza un algoritmo basato sulla funzione logaritmo.
𝑥 ≥ 0 log(1 + 𝑥)
𝑓 𝑥 =
𝑥 < 0 − log(1 − 𝑥)
Produce una curva simile a quella della TANH.
Può essere utilizzata per prevenire la saturazione.
È una funzione differenziabile.
REALIZZATO DA: VALERIO CAPOZIO 83
84. ACTIVATIONSIGMOID
Basata sulla funzione del sigmoide.
1
𝑓 𝑥 =
1 + 𝑒 −𝑥
Ha un output sempre positivo.
È una funzione differenziabile.
Nessun output
negativo
REALIZZATO DA: VALERIO CAPOZIO 84
85. ACTIVATIONSIN
Basata sulla funzione seno.
𝑓 𝑥 = sin 𝑥
Utilizzata di rado.
È una funzione differenziabile.
Restituisce sia valori di output positivi che negativi.
REALIZZATO DA: VALERIO CAPOZIO 85
86. ACTIVATIONSOFTMAX
Appiattisce tutti i valori di input in modo che la loro somma sia uguale a uno.
Inizia sommando l‟esponente naturale di tutti i valori in input, quindi ricalcola ogni
valore di input come il rapporto tra lo stesso e la somma calcolata in precedenza.
È una funzione differenziabile.
double sum = 0;
for (int i = 0; i <
d.length; i++) {
d[i] =
BoundMath.exp(d[i]);
sum += d[i];
}
for (int i = 0; i <
d.length; i++) {
d[i] = d[i] / sum;
}
REALIZZATO DA: VALERIO CAPOZIO 86
87. ACTIVATIONTANH
Basata sulla funzione della tangente iperbolica.
𝑒 2𝑥 − 1
𝑓 𝑥 = 2𝑥
𝑒 +1
È probabilmente la funzione d‟attivazione più comune.
È una funzione differenziabile.
REALIZZATO DA: VALERIO CAPOZIO 87
90. LIMITI DELLE RETI FEED-FORWARD
Le reti di tipo feed-forward sono reti in cui la computazione si svolge sempre „„in
avanti‟‟.
Le reti di tipo feed-forward necessitano di un addestramento di tipo supervisionato.
In questo tipo di reti non sono quindi consentiti cicli.
Le reti feed-forward sono stateless.
In caso di dati provenienti da sequenze temporali può essere oneroso realizzare un
architettura feed-forward che ottenga buoni risultati.
REALIZZATO DA: VALERIO CAPOZIO 90
91. INTRODUZIONE ALLE RETI SOM
Le reti neurali Self Organizing Map sono una particolare tipologia di rete neurale
utilizzata per task di clusterizzazione.
Possono essere molto utili per identificare similarità tra i dati.
Le reti SOM sono addestrate mediante algoritmi d‟apprendimento non supervisionati.
Encog consente di utilizzare le reti SOM e riserva loro un set di classi specifiche
organizzate all‟interno del package org.encog.neural.som.
In Encog una rete SOM è implementata come una rete di due layer (input-output).
REALIZZATO DA: VALERIO CAPOZIO 91
92. ADDESTRAMENTO DELLE RETI SOM (1/2)
L‟addestramento procede per un numero di iterazioni prefissato.
Tra il pattern di training e i pesi viene calcolata la distanza euclidea:
𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = 𝑝1 − 𝑤1 2 + ⋯ + 𝑝 𝑛 − 𝑤 𝑛 2
In questo modo è possibile quantificare la differenza tra ogni vettore dei pesi e il
pattern di input.
La distanza è calcolata per ogni neurone di output. Il neurone con la distanza minima
è detto Best Matching Unit (BMU).
Il BMU è il neurone che apprende maggiormente dal pattern, mentre i suoi vicini
imparano meno.
REALIZZATO DA: VALERIO CAPOZIO 92
93. ADDESTRAMENTO DELLE RETI SOM (2/2)
Individuato il BMU si itera su tutti i pesi aggiornandone il valore sulla base della funzione
di apprendimento
𝑊𝑣 𝑡 + 1 = 𝑊𝑣 𝑡 + 𝜃 𝑣, 𝑡 𝛼 𝑡 𝐷 𝑡 − 𝑊𝑣 𝑡
Dove
t rappresenta il numero dell‟iterazione.
D(t)-Wv(t) rappresenta la differenza tra il peso corrente e il vettore di input.
𝛉 𝐯, 𝐭 rappresenta la funzione di vicinanza.
𝛂 𝐭 rappresenta un learning rate decrescente.
La funzione di vicinanza considera quanto uno neurone sia vicino al BMU.
Il learning rate influenza l‟apprendimento di un neurone, così come avviene anche
nella backpropagation.
REALIZZATO DA: VALERIO CAPOZIO 93
94. INTRODUZIONE ALLE RETI NEURALI RICORRENTI
Le reti neurali ricorrenti presentano le stesse caratteristiche delle reti feed-forward, ma
in più consentono di gestire dei cicli.
In particolare sono consentite conessioni:
Verso lo stesso livello.
Verso livelli precedenti.
La presenza di questi cicli consente alle reti di avere uno stato.
Alcune topologie hanno inoltre un livello particolare, detto livello di contesto.
REALIZZATO DA: VALERIO CAPOZIO 94
95. RETI NEURALI RICORRENTI IN ENCOG
Encog mette a disposizioni 4 topologie di reti neurali ricorrenti:
Hopfield.
Boltzmann.
Elman.
Jordan.
Queste sono le 4 topologie ricorrenti tipicamente più utilizzate.
Le prime due sono architetturalmente più semplici:
Sono auto-connesse.
Le ultime due sono più complesse:
Hanno un livello di contesto.
REALIZZATO DA: VALERIO CAPOZIO 95
96. RETE DI HOPFIELD
La rete di Hopfield è,
architetturalmente,
estremamente semplice.
È composta di un solo livello
che ha funzione sia di input
che di output e non
gestisce livelli nascosti.
Tutti i neuroni della rete sono
totalmente connessi gli uni
agli altri.
Non sono consentite connessioni tra un
neurone e se stesso.
La rete di Hopfield accetta
solo una funzione
d‟attivazione di tipo
Bipolare.
Per ogni neurone di output il valore sarà
solo 1 o -1.
REALIZZATO DA: VALERIO CAPOZIO 96
97. RETE DI BOLTZMANN
La macchina di Boltzmann è la
controparte stocastica della rete di
Hopfield ed è basata su un
approccio di tipo generativo.
Composta da un singolo livello.
Il grado di casualità della rete dipende
dalla „„temperatura corrente‟‟ della
rete stessa.
Più „„raffredda‟‟ e minore è la casualità.
Accetta come funzione d‟attivazione
solo la funzione Bipolare.
Utili per approcciare problemi di tipo
combinatorio (richiedono molto
tempo).
Spesso viene scartata per problemi di
performance non banali.
REALIZZATO DA: VALERIO CAPOZIO 97
98. RETE DI ELMAN
La rete di Elman ha un
funzionamento molto simile alle
reti di tipo feed-forward e può
utilizzare gli stessi metodi
d‟addestramento.
La rete di Elman è composta di tre
livelli classici:
Input
Output
Hidden
È composta inoltre di un livello di
contesto che consente il
feedback.
Il livello di contesto è connesso al livello
hidden tramite un‟associazione 1:1
Il livello di contesto è privo di pesi
e quindi non può apprendere,
serve solo per fornire la rete di
memoria.
REALIZZATO DA: VALERIO CAPOZIO 98
99. RETE DI JORDAN
La rete di Jordan è molto
simile alle rete di Helman
per topologia.
È composta di 4 livelli:
Input.
Output.
Hidden.
Contesto.
Nella rete di Jordan il livello
di contesto è collegato al
livello hidden attraverso
connessioni pesate, ma
anche al livello di output
da cui riceve il feedback.
REALIZZATO DA: VALERIO CAPOZIO 99
101. Questo opera è distribuita con
licenza Creative Commons
Attribuzione - Non commerciale
- Non opere derivate 2.5 Italia
REALIZZATO DA: VALERIO CAPOZIO 101