Machine Learning Traccia dell’esercitazione di laboratorio sulle reti neurali [N.B. Si suppone di partire da un progetto con le modifiche e aggiunte richieste nelle esercitazioni precedenti correttamente completate] Bias Bias 1 1 Input Layer Hidden Layer Output Layer 1) ELEMENTI UTILI DEL PROGETTO PRLAB a. Esplorare il progetto PRLab all’interno dell’ambiente di sviluppo. Aprire la cartella “References” nell’albero del progetto dentro alla finestra “Soluzion Explorer” e fare doppio click sull’assembly “BioLab”: si aprirà la finestra “Object Browser” dove si possono vedere i namespace della Class Library e dell’assembly BioLab; Nella finestra “Object Browser”, trovare le classi Layer, InputLayer, HiddenLayer e OutputLayer leggendo la relativa definizione e i commenti per comprenderne la logica di funzionamento; Inoltre visualizzare per ognuna i seguenti membri: o Count : indica il numero di neuroni del layer o Values[] : contiene il pattern in input o Weights[,] : contiene tutti i pesi tra un layer e quello successivo o Net[i]: contiene la somma dei prodotti tra ciascun neurone di input ed il corrispettivo peso secondo la formula =∑ … ∙ + o Activation[i] : contiene l’output della funzione di attivazione f(neti) o Errors[i] : contiene l’errore δ del neurone i-esimo di un layer o Target[] : contiene la classe del pattern o Bias : valore del bias (fissato a 1) o BiasWeights[] : contiene i pesi tra il neurone bias e il layer successivo Aprire l’help della libreria BioLab (nella sottocartella Libraries della cartella PRLab) ed esaminare le informazioni relative alle classi indicate al punto precedente. 2) IMPLEMENTAZIONE DI UNA RETE NEURALE A TRE LIVELLI a) Prendere visione del metodo statico BackPropagation che permette di modificare i pesi delle connessioni in modo tale che si minimizzi una determinata funzione errore J(w). Completare il metodo ricordando che: l’errore viene calcolato come ( = ) ∙ (1 − )∙( − ) dove è l’attivazione del neurone k dell’output layer (calcolata e memorizzata durante forward propagation), e , il valore desiderato per l’output k. dato un neurone k dell’output layer con errore ed un neurone j dell’hidden layer con attivazione , il peso , viene aggiornato nel seguente modo , dove Biased = ∙ ∙ è il learning rate compreso nell’intervallo [0,1]. Si ricordi che se la rete è anche i pesi tra output e bias dell’hidden layer devono essere aggiornati. data l’attivazione di un neurone j dell’hidden layer collegato con c neuroni s dello stato output, l’errore viene calcolato con ( = + , ) ∙ 1− ∙∑ , L’aggiornamento precedente si applica anche ad un peso che collega un neurone j dell’hidden layer ad un neurone i dell’input layer. Si ricordi che se la rete è Biased anche i pesi tra hidden e bias dell’input layer devono essere aggiornati. b) Implementare i seguenti metodi della classe MyNeuralNetworkClassifierBuilder: Il metodo statico ActivationFunction per la funzione di attivazione. A tal fine utilizzeremo la sigmoide (nella semplice forma di logistic funciton) con valori in [0,1]: ( )= la cui derivata prima è ( )= ( )∙ 1− ( ) Il metodo statico ForwardPropagation che, dato un pattern in input con la corrispondente classe, memorizza il pattern nell’input layer e calcola per ogni neurone dell’hidden layer e dell’output layer la sua attivazione. Per ogni neurone “i” la somma pesata dovrà essere memorizzata nel corrispondente Net[i] mentre l’attivazione in Activation[i]. Si ricordi che se la rete è Biased anche questo neurone deve essere tenuto in considerazione nella somma pesata. c) Implementare i membri della classe MyNeuralNetworkClassifier: nel metodo Classify richiamare il metodo statico ForwardPropagation appena implementato. d) Fare alcune prove sia con dataset generati manualmente che con i due dataset scaricabili dal sito del corso. Verificare il funzionamento nel caso particolare di un solo cluster e all’aumentare del numero di cluster. A tal fine utilizzare la voce di menù “Esercitazioni ML→6 - Esercitazione Reti Neurali”. 3) ESPERIMENTO SU “LETTER IMAGE RECOGNITION DATA” a) Utilizzare la rete appena implementata per il riconoscento di caratteri utilizzando il materiale aggiuntivo disponibile per l’esercitazione. Prendere visione dei FeatureVectorSet di train e validaton contenuti nel file ZIP. Utilizzare il training set per l’addestramento della rete ed il validation set per la validazione degli iperparametri. Scegliere i parametri learning rate, numero di epoche e numero di neuroni dell’hidden layer che minimizzi l’errore sul validation set. b) Verificare l’accuratezza del modello sul test set che verrà rilasciato al termine del punto precedente.