Esperienze di Apprendimento Automatico per il corso di Intelligenza Artificiale
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Esperienze di Apprendimento Automatico per il corso di Intelligenza Artificiale Marco Lippi lippi@dsi.unifi.it 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 “: .” 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 − vmin v∗ = (1) vmax − vmin distribuzione gaussiana: la nuova distribuzione ha media nulla e varianza unitaria v − v̄ v∗ = (2) σ 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 Header No. of patterns : 1000 Numero di esempi No. of input units : 2 No. of output units : 1 Numero di attributi 0.994576 0.526442 0 Numero di classi 0.206155 0.156311 0 0.432411 0.855122 0 Vettore degli inputs Vettore degli outputs Marco Lippi 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 /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 Cancella Fattore di scala tutto orizzontale 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: Nesempi corretti Qk = (3) Nesempi 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
Puoi anche leggere