Esperienze di Apprendimento Automatico per il corso di Intelligenza

annuncio pubblicitario
Esperienze di Apprendimento Automatico
per il corso di Intelligenza Artificiale
Marco Lippi
[email protected]
Dipartimento Sistemi e Informatica — Università di Firenze
Dipartimento Ingegneria dell’Informazione — Università di Siena
Marco Lippi
Intelligenza Artificiale
Introduzione
Esempi di problemi di apprendimento automatico
Filtro SPAM per e-mail
OCR (Optical Character Recognition)
Diagnosticare la patologia di un paziente
Predire l’esito di una partita di scacchi
Interpretazione di segmenti audio (Speech Recognition)
Classificazione di documenti testuali
Predire la struttura 3D di una proteina
...
Marco Lippi
Intelligenza Artificiale
Introduzione
Analisi di un problema di apprendimento automatico
Inquadramento del problema: definizione degli obiettivi
Scelta di un algoritmo di apprendimento
Preparazione dei dati
Addestramento del modello
Test del modello addestrato
Interpretazione dei risultati
Marco Lippi
Intelligenza Artificiale
I dataset UCI
“UCI Machine Learning Repository”: collezione di dataset
utilizzati dai ricercatori per testare gli algoritmi sviluppati
Per ogni dataset sono riportate le performance di alcuni
algoritmi di apprendimento automatico da usare come
confronto (benchmark)
Dataset tipicamente composti da uno o più dei seguenti file:
NOME.names: descrive la sorgente dei dati e gli attributi
NOME.data: contiene esempi e target (se esiste il file
NOME.test, spesso NOME.data rappresenta il training set)
NOME.test: contiene i dati da usare per il test
NOME.all: data + test
Dati spesso forniti nel formato compatibile con C4.5 (software
per alberi di decisione che vedremo nelle prossime lezioni).
Marco Lippi
Intelligenza Artificiale
Descrizione dei dati
Nel caso dei dataset UCI, la descrizione del dataset si trova nel file
.names, che contiene:
una serie di righe di intestazione, iniziate dal carattere “|”,
dove vengono descritti in maniera generale i dati e gli
algoritmi che sono stati applicati al dataset
una lista separata da “,” e terminata da “.” contenente i
nomi delle classi
una sequenza di coppie “<nome>: <valore>.” che descrive
gli attributi dei vettori di ingresso, dove valore può essere:
continuous: per gli attributi continui
valore1 ,valore2 ... valoren : per gli attributi discreti
Marco Lippi
Intelligenza Artificiale
Preparazione dei dati
Il formato dei file utilizzato nell’archivio di UCI è compatibile
con il formato di ingresso utilizzato dal tool “C4.5” ma non
con quello del simulatore di reti neurali “JNNS”
Le reti neurali possono gestire solamente attributi numerici
quindi gli attributi discreti devono essere opportunamente
codificati
Gli attributi continui devono essere normalizzati per facilitare
l’addestramento della rete
Marco Lippi
Intelligenza Artificiale
Preparazione dei dati: attributi continui
Si distinguono due tecniche per la normalizzazione di un attributo
continuo a seconda di come si distribuiscono i valori:
distribuzione uniforme: i dati vengono normalizzati
nell’intervallo [0, 1]
v∗ =
v − vmin
vmax − vmin
(1)
distribuzione gaussiana: la nuova distribuzione ha media nulla
e varianza unitaria
v − v̄
(2)
v∗ =
σ
dove v̄ è la media e σ è la deviazione standard
Marco Lippi
Intelligenza Artificiale
Preparazione dei dati: attributi discreti
Per rappresentare in modo efficace gli n valori di un attributo
discreto si utilizza la codifica one-hot:
Ad ogni valore dell’attributo discreto corrisponde un vettore
di n attributi binari
Se l’attributo discreto assume il valore k-esimo, allora il
corrispondente attributo binario vale 1 e tutti gli altri 0
{A,B,C,D}:
A
1 0 0 0
C
0 0 1 0
B
0 1 0 0
D
0 0 0 1
Marco Lippi
Intelligenza Artificiale
Preparazione dei dati: valore della classe
La classe di appartenenza di un esempio, ovvero il target
dell’addestramento, deve essere trattata come un attributo
discreto
Il vettore di attributi cosı̀ ottenuto costituisce l’output della
rete neurale
Per un problema con due sole classi è preferibile utilizzare un
singolo output, in questo caso il valore 0 rappresenta una
classe ed il valore 1 l’altra
Marco Lippi
Intelligenza Artificiale
Preparazione dei dati: dati mancanti
All’interno dei file di dati si possono trovare dei valori mancanti
(missing ) contraddistinti dal carattere “?”. Si distinguono i
seguenti casi:
La maggior parte dei dati ha valori mancanti per un certo
attributo: si elimina l’attributo in tutto il dataset
La maggior parte degli attributi di un esempio hanno valori
mancanti: si elimina l’esempio dal dataset
Solo in alcuni esempi l’attributo è mancante, e l’attributo è a
valori discreti: si prevede un valore aggiuntivo per identificare
i valori mancanti (oppure si sostituisce con la moda)
Solo in alcuni esempi l’attributo è mancante, e l’attributo è a
valori continui: si sostituisce il valore mancante con il valore
più comune (media o mediana)
Marco Lippi
Intelligenza Artificiale
Creazione dei Dataset
Per addestrare, validare e testare una rete neurale sono solitamente
impiegati tre file di dati:
train: serve per calcolare il gradiente della funzione di errore
che viene minimizzata durante l’addestramento
validation: serve per scegliere i parametri ottimali e per
fermare l’addestramento in modo da prevenire l’over-fitting
test: serve per calcolare l’accuratezza della rete neurale
addestrata, non deve essere mai usato per scegliere i
parametri e per addestrare la rete
I tre file devono essere ricavati suddividendo l’intero dataset in tre
parti che devono avere la stessa frazione di esempi per ogni
classe. La suddivisione in tre parti può essere fatta seguendo varie
tecniche (es. K-fold-cross-validation); per i primi esperimenti si
può usare una suddivisione 50%-25%-25%.
Marco Lippi
Intelligenza Artificiale
Creazione dei Dataset: i file dei Pattern
Dopo aver preparato opportunamente i dati, questi devono essere
scritti nel formato utilizzato da JNNS, e devono avere l’estensione
“.pat”:
SNNS pattern definition file V1.4
generated at Sun Jan 1 00:00:01 2004
No. of patterns
: 1000
No. of input units : 2
No. of output units : 1
0.994576 0.526442 0
0.206155 0.156311 0
0.432411 0.855122 0
Vettore degli inputs
Numero di esempi
Numero di attributi
Numero di classi
Vettore degli outputs
Marco Lippi
Header
Intelligenza Artificiale
JNNS: Avvio e Caricamento Dati
Il tool JavaNNS è un applicativo scritto in Java e
memorizzato sotto forma di archivio Jar
Per lanciare JNNS da terminale:
java -jar <path>/JavaNNS.jar
Ogni file di dati che verrà utilizzato durante l’addestramento
della rete neurale deve essere caricato con il comando File →
open
Allo stesso modo si possono caricare delle reti neurali
precedentemente addestrate
Marco Lippi
Intelligenza Artificiale
JNNS: Creazione della Rete 1/3
Il primo passo è la creazione della rete neurale utilizzando il
comando tools → create → layers
Dimensione layer
Tipo layer
Funzione attivazione
neuroni
Marco Lippi
Intelligenza Artificiale
JNNS: Creazione della Rete 2/3
Il layer di ingresso dovrà contenere un numero di neuroni pari
al numero di attributi nel dataset
Il layer di uscita dovrà contenere un numero di neuroni pari al
numero di classi
Un numero opzionale di layer nascosti potrà essere creato
(prima del layer di uscita) per aumentare il potere
discriminativo della rete neurale
Marco Lippi
Intelligenza Artificiale
JNNS: Creazione della Rete 3/3
Dopo aver creato i layers dovranno essere sistemate le connessioni
fra i neuroni in modo feed-forward usando tools → create →
connections
Marco Lippi
Intelligenza Artificiale
JNNS: il Pannello di Controllo
L’addestramento della rete viene controllato usando il pannello
tools → control panel. Per prima cosa i pesi della rete devono
essere inizializzati con un valore molto basso.
Marco Lippi
Intelligenza Artificiale
JNNS: il Pannello di Controllo
Fra tutti i dataset caricati si deve scegliere quale usare per
l’addestramento e quale per la scelta dei parametri.
Marco Lippi
Intelligenza Artificiale
JNNS: il Pannello di Controllo
I vari parametri dell’addestramento devono essere scelti in modo da
massimizzare l’accuratezza finale sul validation e dipendono
fortemente dal dataset
Algoritmo di
addestramento
Learning
rate
Momento
Numero
di epoche
Presentazione
casuale degli
esempi
Marco Lippi
Intelligenza Artificiale
JNNS: il Grafico dell’Errore
L’andamento dell’addestramento può essere seguito tramite il
panello view → error graph
Fattore di
scala
verticale
Errore sul train
Errore sul validation
Fattore di scala
orizzontale
Cancella
tutto
Marco Lippi
Intelligenza Artificiale
Selezione dei Parametri
Un’errata selezione dei parametri può portare ad una rete che
non ha appreso niente dai dati
Il learning-rate ed il momento controllano la velocità di
apprendimento
Un apprendimento troppo lento potrebbe portare a pensare
che la rete sia già arrivata al suo ottimo, oppure può finire in
un minimo locale
Un apprendimento troppo veloce potrebbe far mancare alla
rete il minimo della funzione d’errore, oppure potrebbe portare
ad un comportamento non convergente (oscillante)
Marco Lippi
Intelligenza Artificiale
JNNS: Selezione dell’Architettura
Un altro fattore critico per la qualità dell’apprendimento è la
dimensione della rete (numero di neuroni, numero di
connessioni)
Una rete troppo piccola non ha la capacità di apprendere la
funzione di discriminazione che separa gli esempi nelle varie
classi (under-fitting)
Una rete troppo grande potrebbe apprendere anche il rumore
(errori sulle classi degli esempi di training), ovvero dei fatti che
sicuramente non si verificano sui dati di test (over-fitting)
Il fenomeno dell’over-fitting può essere limitato usando la
tecnica dell’early-stopping
Marco Lippi
Intelligenza Artificiale
Calcolo dell’Accuratezza
Per confrontare due reti addestrate è necessario calcolare la
loro accuratezza sui dati di validazione
L’accuratezza si calcola come:
Qk =
Nesempi corretti
Nesempi
(3)
Un esempio è predetto correttamente se la classe predetta
dalla rete è la stessa presente nei dati
Per una rete con più uscite la classe predetta è quella
corrispondente all’uscita più elevata
Per una rete con una sola uscita (due classi) una classe è
associata ad un valore di uscita maggiore di 0.5, e viceversa
Marco Lippi
Intelligenza Artificiale
JNNS: Salvataggio delle Predizioni
Per verificare le predizioni della rete è necessario salvare su file
l’output calcolato sugli esempi di validation usando il comando:
file → save data
Marco Lippi
Intelligenza Artificiale
JNNS: ATTENZIONE
Per salvare gli output della rete su un certo insieme di dati, è
necessario selezionare prima il file corrispondente come training set
nella sezione patterns del pannello di controllo.
La figura mostra la selezione necessaria per salvare i dati del
validation set.
Marco Lippi
Intelligenza Artificiale
Scarica