Esperienze di Apprendimento Automatico per il corso di Intelligenza Artificiale

Pagina creata da Filippo Gagliardi
 
CONTINUA A LEGGERE
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