Tesina di Intelligenza Artificiale Uso dell algoritmo di Quantizzazione Vettoriale per la determinazione del numero di nodi dello strato hidden in una rete neurale multilivello Roberto Fortino S228682
Introduzione Nel campo delle reti neurali, scegliere il numero di nodi presenti negli strati hidden non è sempre un compito banale. In una rete neurale multilivello (MLP), ogni nodo nascosto genera un piano di separazione. Se ci troviamo di fronte ad un problema di classificazione, scegliere il giusto numero di nodi hidden è fondamentale; un numero troppo basso o troppo alto, infatti, può portare problemi in termini di performance. In questo elaborato si è pensato di utilizzare l algoritmo di Quantizzazione Vettoriale per la determinazione del numero di nodi nello strato hidden di una rete neurale multilivello. Quantizzazione Vettoriale L algoritmo di Quantizzazione Vettoriale può essere utilizzato per dividere un insieme di dati in un certo numero di clusters. L algoritmo si basa sulla distanza Euclidea per l assegnazione dei campioni al cluster di appartenenza. Di seguito il funzionamento: 1. All inizio tutti i vettori vengono assegnati allo stesso cluster, il cui centro viene calcolato come valor medio di tutti i vettori; 2. Per ciascun rappresentante (centro di cluster), si introduce una perturbazione che genera due nuovi centri di cluster. Il vecchio rappresentante viene scartato; 3. Ogni vettore viene riassegnato a uno dei nuovi cluster secondo il criterio di minima distanza; 4. Vengono calcolati i nuovi rappresentanti come valor medio dei vettori assegnati ad ogni cluster. Questi saranno i nuovi centri di cluster; 5. Se è soddisfatto il criterio di fine, l algoritmo termina. Altrimenti, si torna al passo 2. Dataset Per questo esperimento, è stato utilizzato il dataset MNIST. Questo contiene circa 70000 immagini rappresentanti i numeri da 0 a 9 scritti a mano.
Ogni immagine ha dimensione 28x28 pixel, ed è rappresentata come un vettore di 784 elementi, dove ogni elemento corrisponde ad un pixel dell immagine e può assumere un valore nell intervallo [0, 255] (0 corrisponde al colore nero e 255 al bianco). Implementazione Per l implementazione dell algoritmo si è scelto di usare l ambiente Python, in quanto sono presenti tutti i tool di machine learning usati nel caso in esame. Data l imponenza del dataset, prima dell esecuzione dell algoritmo di quantizzazione vettoriale, è stata effettuata un Analisi delle Principali Componenti (PCA) per cercare di ridurre il numero delle features e quindi guadagnare in termini di tempo di calcolo. Delle 784 features, è stato scelto di mantenere le prime 430 principali componenti, in quanto queste spiegano più del 98% della varianza.
Il corpo principale dell algoritmo è articolato in un ciclo while. while True: print('assigning points to clusters') print('deleting empty clusters') print('computing new codewords') print('checking end condition') print('computing disturbed codewords') print('clearing clusters for next iteration') Inizialmente, I vettori vengono assegnati al cluster di appartenenza: per ogni vettore viene calcolata la distanza euclidea da tutti I centri di cluster e lo si assegna al cluster più vicino. Al termine dell assegnazione vengono eliminati eventuali cluster vuoti e si procede al calcolo dei nuovi centri di cluster come valor medio dei vettori contenuti. Una volta che i cluster sono stati formati, viene effettuata la verifica della condizione d uscita. Nel caso in esame, per ogni cluster è stato valutato l indice di eterogeneità di Gini calcolato nel seguente modo: Gini c = 1 p j c + dove p j c si intende la frequenza relativa della classe j nel cluster c. È stato poi definito un valore di soglia per questo indice e l algoritmo termina quando tutti i cluster hanno un valore di Gini minore di tale soglia., -./
Nel caso in cui la condizione d uscita non è verificata, l algoritmo prosegue con la prossima iterazione perturbando i centri di cluster e svuotando i cluster ottenuti nell iterazione precedente. La perturbazione è stata effettuata sommando e sottraendo ai centri di cluster una costante, che in questo caso è pari a 0.1. Negli esperimenti effettuati è emersa l incapacità dell algoritmo di quantizzazione a raggiungere la convergenza. Dopo alcune investigazioni, si è notato che alcuni elementi del dataset risultano essere troppo simili tra loro o fortemente disturbati. Questo ha portato alla presenza di molti cluster in cui non vi è un elemento che domina (in termini di occorrenze) nettamente sugli altri, o addirittura cluster in cui gli elementi si distribuiscono equamente (stesso numero di occorrenze). Per garantire la terminazione dell algoritmo, quindi, la soglia utilizzata è stata via via incrementata seguendo una precisa logica: se il numero di cluster che non soddisfano la condizione di uscita all iterazione i+1 è maggiore del numero di cluster che non soddisfano la condizione di uscita all iterazione i, allora la soglia viene incrementata di un certo valore fisso (0.15). Una possibile soluzione al problema della convergenza potrebbe essere di far continuare l algoritmo fino a che non riesca a dividere i casi sopra citati. Dall altro lato, però, dobbiamo ricordare che ad ogni iterazione il numero di centri di cluster raddoppia (alla 12 iterazione abbiamo 4096 clusters) e di conseguenza aumenta anche il tempo di elaborazione necessario per assegnare i vettori ai cluster di appartenenza. Ancora, non è detto che si riesca ad avere dei cluster puri, cioè composti da un solo elemento, o nel
caso in cui si riesca, probabilmente questi saranno composti da un numero relativamente basso di elementi. Alla luce del problema appena citato, ci si è chiesti se unire cluster vicini contenenti in maggioranza lo stesso elemento potesse aiutare a definire meglio i cluster. Una volta che l algoritmo di quantizzazione ha terminato, quindi, un apposita routine prova ad unire i cluster secondo la seguente logica: 1. Viene calcolata la matrice delle distanze: dato un cluster, viene calcolata la distanza euclidea tra il suo centro e il centro di tutti gli altri cluster. Quest operazione viene effettuata per tutti i cluster. 2. Si prendono i due cluster più vicini: questo corrisponde al valore più piccolo presente nella matrice delle distanze. 3. Per i due cluster selezionati si cerca l elemento con occorrenza maggiore. 4. Se l elemento trovato in entrambi i cluster è lo stesso si procede ad unire i cluster e il ciclo riprende dal punto 1, altrimenti si esce. Dai risultati è emerso che in alcuni casi vengono a crearsi dei cluster in cui un elemento domina fortemente sugli altri. Cluster 140: 5771 0: 5540(0.960) 8: 24(0.004) 7: 7(0.001) 2: 36(0.006) 3: 15(0.003) 6: 90(0.016) 9: 32(0.006) 5: 25(0.004) 4: 2(0.000) Cluster 135: 6696 2: 6326(0.945) 3: 153(0.023) 8: 63(0.009) 1: 53(0.008) 7: 33(0.005) 0: 24(0.004) 5: 10(0.001) 6: 9(0.001) 4: 15(0.002) 9: 10(0.001) Ciò non risolve però il problema dell eterogeneità dei cluster. Ancora, persiste la presenza di cluster in cui gli elementi si distribuiscono equamente.
Risultati sperimentali Di seguito vengono riportati i risultati ottenuti: Clustering (Quantizzazione Vettoriale) o Dimesione del Dataset: 70000 elementi o Numero di classi: 10 o Percentuale di distorsione: 0.1 o Criterio di valutazione usato nella condizione d uscita: Indice di Gini o Soglia iniziale usata nella condizione d uscita: 0.5 (equidistribuzione) o Iterazioni: 11 o Numero di cluster prima dell unione: 2011 o Numero di cluster dopo l unione: 141
Rete Neurale Multilivello (MLP) o Dimensione Training Set: 60000 o Dimensione Test Set: 10000 o Numero di strati hidden: 1 o Numero di nodi nello strato hidden: 141 o Numero massimo di iterazioni: 10 o Learning rate iniziale: 0.1 o Test set accuracy: 0.978200 Conclusioni Analizzando i grafici del paragrafo precedente, è chiaro che la presenza di caratteri simili tra loro e di caratteri disturbati impatta fortemente sulle prestazioni dell algoritmo di quantizzazione. La situazione non migliora di molto anche effettuando l unione dei cluster, in quanto è l output del quantizzatore a non essere performante. Dal primo grafico si evince una massiccia presenza di cluster di piccole dimensioni (cluster da 0 a circa 110). Proiettando sul secondo grafico capiamo, inoltre, che questi sono composti da elementi equamente distribuiti o non vi è alcun elemento che domina fortemente sugli altri (valore di Gini da 0.5 a 1).
Effettuando la stessa analisi, gli ultimi cluster (da 110 a 141) contengono un elevato numero di elementi e, dato il loro valore di Gini, sono composti in maggioranza da un solo elemento (valore di Gini minore di 0.30). Anche se l algoritmo di quantizzazione non ha soddisfatto le nostre aspettative, l output fornito ha portato ad ottenere buoni risultati in fase di addestramento della rete neurale. I 141 nodi dello strato hidden sono risultati sufficienti per ottenere un accuracy soddisfacente. Per concludere, utilizzare l algoritmo di quantizzazione vettoriale potrebbe essere una buona soluzione al problema della scelta del numero di nodi nello strato hidden; questa teoria andrebbe però confermata effettuando altri esperimenti, magari utilizzando altri data-set o effettuando un processo di pulizia del dato prima di procedere alla clusterizzazione.