Backpropagation Multilayer Feedforward Δίκτυα Κυριακίδης Ιωάννης 2013
Εισαγωγή Τα νευρωνικά δίκτυα Perceptron που εξετάσαμε μέχρι τώρα είχαν το μειονέκτημα ότι δεν μπορούσαν να αντιμετωπίσουν προβλήματα που απαιτούσαν µη γραμμικό διαχωρισμό των προτύπων που εισάγουμε. Τα δίκτυα Backpropagation λόγω των πολλών επιπέδων που διαθέτουν και κυρίως της µη γραμμικής συνάρτησης μεταφοράς που υλοποιούν οι νευρώνες τους έρχονται να αντιμετωπίσουν το πρόβλημα αυτό.
Δίκτυα Backpropagation Το πλήθος των προβλημάτων που μπορούν να αντιμετωπίσουν τα δίκτυα αυτά είναι ευρύ. Είναι κατάλληλα στο να συσχετίζουν τα διανύσματα εισόδου ενός νευρωνικού δικτύου µε τα διανύσματα εξόδου. Έτσι μπορούμε να τα χρησιμοποιήσουμε για παράδειγμα: Στη κατάταξη διανυσμάτων σε προκαθορισμένες κλάσεις Στη πρόβλεψη τιμών Στο συγκεκριμένο εργαστήριο θα κατασκευάσουμε ένα πολύ-επίπεδο δίκτυο και στην συνέχεια θα το εκπαιδεύσουμε προκειμένου να το χρησιμοποιήσουμε σε εφαρμογές αναγνώρισης προτύπων.
Βήματα Διαδικασίας Τα βήματα που θα ακολουθήσουμε είναι: Παρουσίαση των δεδομένων χρήσης Προ-επεξεργασία δεδομένων εκπαίδευσης. Κατασκευή του νευρωνικού δικτύου. Εκπαίδευση του δικτύου. Δοκιμή Βελτιστοποίηση του δικτύου.
Αρχιτεκτονική Δικτύου Σε ένα πολύ-επίπεδο δίκτυο το πρώτο επίπεδο που συναντούν τα δεδομένα εισαγωγής ονομάζεται επίπεδο εισόδου (input layer), το τελευταίο ονομάζεται επίπεδο εξόδου (output layer) και τα ενδιάμεσα ονομάζονται κρυφά επίπεδα (hidden layers). Τα multilayer feedforward backpropagation δίκτυα αποτελούνται από επίπεδα νευρώνων τα οποία συνδέονται μεταξύ τους νευρώνα προς νευρώνα.
Αρχιτεκτονική Δικτύου Από το παραπάνω παράδειγμα βλέπουμε ότι: Μεταξύ των επιπέδων δημιουργούνται δισδιάστατοι πίνακες βαρών. Το κάθε επίπεδο έχει έναν μονοδιάστατο πίνακα με με τα biases του κάθε νευρώνα.
Συναρτήσεις Μεταφοράς Λόγω του ότι επιθυμούμε το δίκτυο να μας επιλύσει μηγραμμικά προβλήματα, η συνάρτηση μεταφοράς που θα υλοποιεί ο κάθε νευρώνας θα πρέπει να είναι μηγραμμική. Σιγμοειδή συνάρτηση μεταφοράς: αποδώσει στην έξοδό της οποιοδήποτε αριθμό που βρίσκεται μεταξύ του 0 και του 1 Συνάρτηση μεταφοράς tan sigmoid: αποδώσει στην έξοδό της οποιοδήποτε αριθμό που βρίσκεται μεταξύ του -1 και του 1
Συναρτήσεις Μεταφοράς Όπως παρατηρούμε οι προηγούμενες συναρτήσεις μεταφοράς περιορίζουν το εύρος τιμών που έχουμε στην έξοδο του δικτύου. Αν σε μια εφαρμογή απαιτείται να έχουμε ως έξοδο από το νευρωνικό δίκτυο, τιμές που δεν είναι στο διάστημα 0 έως 1 ή -1 έως 1 Τότε μπορούμε εναλλακτικά στο τελευταίο επίπεδο του δικτύου να βάλουμε την γραμμική συνάρτηση μεταφοράς η οποία μπορεί να μας προσφέρει οποιαδήποτε τιμή εξόδου.
Συναρτήσεις Μεταφοράς Όπως παρατηρούμε οι προηγούμενες συναρτήσεις μεταφοράς περιορίζουν το εύρος τιμών που έχουμε στην έξοδο του δικτύου. Αν σε μια εφαρμογή απαιτείται να έχουμε ως έξοδο από το νευρωνικό δίκτυο, τιμές που δεν είναι στο διάστημα 0 έως 1 ή -1 έως 1 Τότε μπορούμε εναλλακτικά στο τελευταίο επίπεδο του δικτύου να βάλουμε την γραμμική συνάρτηση μεταφοράς η οποία μπορεί να μας προσφέρει οποιαδήποτε τιμή εξόδου.
Η συνάρτηση newff() Η συνάρτηση newff() δημιουργεί ένα feedforward δίκτυο απαιτώντας τέσσερις παραμέτρους για να καθορίσει την δομή του δικτύου. Η σύνταξη της συνάρτησης είναι: net = newff(f, A, B, C) Όπου: F = Είναι ένας πίνακας 2 στηλών. Σε κάθε γραμμή του πίνακα θα πρέπει να υπάρχει η ελάχιστη και η μέγιστη τιμή για κάθε χαρακτηριστική τιμή του διανύσματος εισόδου. A: Μονοδιάστατος πίνακας ο οποίος μας δίδει πληροφορία για τον αριθμό των νευρώνων που βρίσκονται στο κάθε επίπεδο του δικτύου. B: Μονοδιάστατος πίνακας χαρακτήρων που μας δίδει την πληροφορία για το ποια συνάρτηση μεταφοράς υλοποιούν τα επίπεδα του δικτύου. C: Τιμή η οποία υποδεικνύει την μεθοδολογία με την οποία γίνεται η εκπαίδευση του νευρωνικού δικτύου.
Παράδειγμα Έστω ότι έχουμε την συνάρτηση: net = newff([-1 2; 0 5], [3, 1], { logsig, purelin }, traingd ); Η συνάρτηση αυτή μας κατασκευάζει ένα δίκτυο το οποίο θα δέχεται διανύσματα εισόδου με δύο χαρακτηριστικές τιμές. Οι ελάχιστες και οι μέγιστες τιμές τους φαίνονται στον πίνακα του πρώτου ορίσματος της συνάρτησης. Επίσης όπως παρατηρούμε από το δεύτερο όρισμα της συνάρτησης κατασκευάζουμε ένα νευρωνικό με δύο επίπεδα το οποίο έχει στο επίπεδο εισόδου τρεις νευρώνες ενώ στο επίπεδο εξόδου έναν. Στο πρώτο επίπεδο οι νευρώνες υλοποιούν την σιγμοειδή συνάρτηση μεταφοράς ενώ στο τελευταίο επίπεδο υλοποιούν την γραμμική συνάρτηση μεταφοράς. Η μεθοδολογία εκπαίδευσης του δικτύου είναι η traingd (Gradient Descent)
Συναρτήσεις Εκπαίδευσης όπου εφαρμόζουν την τεχνική Backpropagation: Συνάρτηση trainlm trainbr trainbfg trainrp trainscg traincgb traincgf traincgp trainoss traingdx traingdm traingd Αλγόριθμος Levenberg-Marquardt Bayesian Regularization BFGS Quasi-Newton Resilient Backpropagation Scaled Conjugate Gradient Conjugate Gradient with Powell/Beale Restarts Fletcher-Powell Conjugate Gradient Polak-Ribiére Conjugate Gradient One Step Secant Variable Learning Rate Gradient Descent Gradient Descent with Momentum Gradient Descent
Εκπαίδευση του δικτύου Στο συγκεκριμένο εργαστήριο θα ασχοληθούμε µε την εκπαίδευση µε επίβλεψη (supervised learning). Η συνάρτηση που χρησιμοποιούμε για την εκπαίδευση του δικτύου είναι η train() και συντάσσεται ως εξής: net = train(net, X, T); όπου net είναι το αρχικοποιημένο δίκτυο, Χ είναι το διάνυσμα εισόδου, και Τ είναι το διάνυσμα του στόχου
Εκμάθηση Backpropagation Αν για παράδειγμα, έχουμε ένα νευρωνικό δίκτυο όπου στο τελευταίο επίπεδο έχει έναν νευρώνα και η πραγματική τιμή εξόδου είναι το α ενώ η επιθυμητή τιμή είναι το t προκύπτει σφάλμα εξόδου ίσο με: e = t-α Λόγω των πολλών τιμών που χρησιμοποιούμε για την εκπαίδευση του δικτύου, προκύπτουν και πολλές τιμές σφάλματος οι οποίες ορίζουν τελικά μια συνάρτηση με διακριτές τιμές. Η οπισθοδρομική διάδοση του σφάλματος (Backpropagation) ξεκινά από το τέλος του δικτύου και αναπροσαρμόζει τα βάρη και τα biases με μοναδικό στόχο την μείωση του σφάλματος.
Εκμάθηση Backpropagation Δηλαδή, αναπροσαρμόζει τα βάρη και τα biases προς την κατεύθυνση της αρνητικής παραγώγου της συνάρτησης του σφάλματος. Ο γενικός τύπος με τον οποίο γίνεται η αναπροσαρμογή είναι ο: x k+1 = x k lr * gk Όπου: x θα μπορούσε να είναι οποιαδήποτε τιμή βάρους ή bias x k είναι η αρχική του τιμή. x κ+1 είναι η τιμή μετά την προσαρμογή της εκπαίδευσης Η τιμή του gk αφορά την αντίστοιχη παράγωγο του σφάλματος ενώ ο συντελεστής lr (learning rate-συντελεστής εκμάθησης) καθορίζει το μέγεθος της επιρροής του gk στην αναπροσαρμογή.
Εκμάθηση Backpropagation Δηλαδή, αναπροσαρμόζει Μεγάλη τιμή τα του βάρη lr σημαίνει και τα biases και προς την κατεύθυνση της μεγάλη αρνητικής αναπροσαρμογή παραγώγου της στις συνάρτησης του σφάλματος. τιμές των βαρών και των biases Ο γενικός τύπος Είναι με τον μια οποίο παράμετρος γίνεται η οποία αναπροσαρμογή είναι ο: x k+1 = x k lr ρυθμίζεται * gk από εμάς ανάλογα με Όπου: τις ανάγκες της εκπαίδευσης. x θα μπορούσε να είναι οποιαδήποτε τιμή βάρους ή bias x k είναι η αρχική του τιμή. x κ+1 είναι η τιμή μετά την προσαρμογή της εκπαίδευσης Η τιμή του gk αφορά την αντίστοιχη παράγωγο του σφάλματος ενώ ο συντελεστής lr (learning rate-συντελεστής εκμάθησης) καθορίζει το μέγεθος της επιρροής του gk στην αναπροσαρμογή.
Παραμετροποίηση Εκπαίδευσης Ρυθμός Εκμάθησης (net.trainparam.lr) Το 0,05 είναι µια τυπική τιμή, εμείς για το δικό µας δίκτυο μπορούμε να επιλέξουμε µια διαφορετική τιμή. Πολλαπλά περάσματα (net.trainparam.epochs) Το batch training είναι µια μέθοδος εκπαίδευσης σύμφωνα µε την οποία η εκπαίδευση αρχίζει µε το που έχουν περάσει όλα τα διανύσματα εκπαίδευσης από το δίκτυο. Το σφάλμα του δικτύου μειώνεται αν τα διανύσματα περάσουν αρκετές φορές. Κάθε πέρασμα όλων των διανυσμάτων το ονομάζουμε epoch και για την εκπαίδευση του δικτύου, ανάλογα και µε το πρόβλημα απαιτούνται αρκετά (και διανύσματα και epochs).
Παραμετροποίηση Εκπαίδευσης Επιθυμητό Σφάλμα Εκπαίδευσης (net.trainparam.goal) Το 10-5 είναι μια τυπική τιμή που μπορούμε να διαλέξουμε. Η παράμετρος αυτή καθορίζει το όριο στο οποίο αν πέσει το σφάλμα θεωρούμε ότι το δίκτυο έχει εκπαιδευτεί και σταματάμε την διαδικασία της εκπαίδευσης. Η καλύτερη περίπτωση ασφαλώς είναι να ορίσουμε μηδενικό σφάλμα ως στόχο. Το πρόβλημα είναι ότι την τιμή αυτή δεν την καταφέρνει κανένα νευρωνικό δίκτυο για την συντριπτική πλειοψηφία των προβλημάτων που έχουμε να αντιμετωπίσουμε.
Απόδοση Εκπαίδευσης Ως απόδοση του δικτύου για ένα σύστημα αναγνώρισης προτύπων ορίζουμε το ποσοστό των σωστών αναγνωρίσεων σε άγνωστα πρότυπα. Δηλαδή, δοκιμάζουμε την ικανότητα του δικτύου να κατηγοριοποιεί διανύσματα τα οποία δεν έχουν χρησιμοποιηθεί για την εκπαίδευση του. Αυτή η ικανότητα ενός νευρωνικού δικτύου ονομάζεται Generalization. Εάν έχουμε ένα σετ δεδομένων για τα οποία γνωρίζουμε την κατηγορία τους, τότε χρησιμοποιούμε ένα ποσοστό 70 80% για την εκπαίδευση και το υπόλοιπο 30 20 % για τον έλεγχο της απόδοσης του δικτύου.
Δεδομένα Παραδείγματος Στο επόμενο παράδειγμα θα χρησιμοποιήσουμε το σετ δεδομένων (wine_dataset) του Matlab. Στο οποίο υπάρχουν 2 πίνακες: Ο πίνακα wineinputs, στον οποίο υπάρχουν: 178 κρασιά - πρότυπα εκπαίδευσης (στις στήλες) Με 13 χαρακτηριστικές τιμές (στις γραμμές) Ο πίνακα winetargets, στον οποίο υπάρχουν: 3 οινοποιοί (στήλες) για κάθε πρότυπο εκπαίδευσης. Στα δεδομένα υπάρχουν 59, 71 και 48 κρασιά για τον πρώτο, δεύτερο και τρίτο οινοποιό αντίστοιχα.
Χαρακτηριστικές Τιμές 1. Alcohol 2. Malic acid 3. Ash 4. Alcalinity of ash 5. Magnesium 6. Total phenols 7. Flavanoids 8. Nonflavanoid phenols 9. Proanthocyanins 10. Color intensity 11. Hue 12. OD280/OD315 of diluted wines 13. Proline
Εισαγωγή Δεδομένων Για να φορτώσουμε τα δεδομένα: load wine_dataset; P = wineinputs; T = winetargets;
Χωρίζουμε τα δεδομένα Για να χωρίσουμε τα δεδομένα σε 2 ομάδες. Όπου η πρώτη ομάδα θα χρησιμοποιηθεί στην εκπαίδευση του δικτύου (70%) και η δεύτερη ομάδα θα χρησιμοποιηθεί στον έλεγχο απόδοσης του δικτύου. TrainIndexes = [1:41, 60:(60+49), 131:(131+33)]; TestIndexes = [42:59, 110:130, 165:178]; Ptrain = P(:, TrainIndexes); Ttrain = T(:, TrainIndexes); Ptest = P(:, TestIndexes); Ttest = T(:, TestIndexes);
Προ-επεξεργασία (Preprocessing) Η εκπαίδευση ενός νευρωνικού δικτύου μπορεί να γίνει αποτελεσματικότερη εάν πραγματοποιήσουμε ορισμένα βήματα προ-επεξεργασίας (Preprocessing) στις εισόδους και τους στόχους των δεδομένων εκπαίδευσης του δικτύου. Είναι συχνά χρήσιμο πριν από την εκπαίδευση ενός Νευρωνικού δικτύου να αλλάξουμε την κλίμακα στις εισόδους και τους στόχους έτσι ώστε να εμπίπτουν πάντα σε μια καθορισμένη περιοχή τιμών.
Προ-επεξεργασία (Preprocessing) Η συνάρτηση premnmx μπορεί να χρησιμοποιηθεί για την αλλαγή της κλίμακας των εισόδων και των στόχων, έτσι ώστε να εμπίπτουν στο εύρος [-1, 1]. [Ptrain, minp, maxp, Ttrain, mint, maxt] = premnmx(ptrain,ttrain); Μια άλλη προσέγγιση για την κλιμάκωση της εισόδου και των στόχων του δικτύου είναι η ομαλοποίηση της μέσης τιμής και της τυπικής απόκλισης των δεδομένων εκπαίδευσης. [Ptrain, meanp, stdp, Ttrain, meant, stdt] = prestd(ptrain,ttrain);
Post-Processing Ανάλογα με την συνάρτηση προ-επεξεργασίας που θα χρησιμοποιήσουμε για να αλλάξουμε την κλίμακα των δεδομένων επεξεργασίας, θα πρέπει να χρησιμοποιήσουμε την αντίστοιχη για να επαναφέρουμε τα δεδομένα στην αρχική κλίμακα. Παρακάτω μπορούμε να δούμε τις αντίστοιχες συναρτήσεις επαναφοράς της κλίμακας. a = postmnmx(an, mint, maxt); %(για premnmx) a = poststd(an, meant, stdt); %(για prestd)
Αρχικοποίηση του Δικτύου net=newff(minmax(ptrain),[13,5,3],{'tansig','tansig','tan sig'},'trainlm'); net.trainparam.lr = 0.05; net.trainparam.epochs = 1000; net.trainparam.goal = 1e-5; net = init(net);
Εκπαίδευση Δικτύου %Pragmatopoioume tin ekpaideusi: net = train(net, Ptrain, Ttrain); %Pragmatopoioume tin proswmoiwsi me ta Test Dedomena an = sim(net, Ptest); %Epanaferoume twn apotelesmatwn stin arxiki klimaka twn dedomenwn a = postmnmx(an, mint, maxt);
Υπολογισμός Απόδοσης %Ypologizoume tin apodosi gia ka8e protypo anagnwrisis for i=1:3 figure(i) [m(i),b(i),r(i)] = postreg(a(i,:),ttest(i,:)); end To R, θα μας δώσει την γραμμικής παλινδρόμησης μεταξύ του στόχου και την εξόδου του δικτύου. Το R θα έχει τιμή 1 όταν θα έχουμε τέλεια συσχέτιση.
Έξοδος Παραδείγματος
Έξοδος Παραδείγματος
Απορίες - Ερωτήσεις ;
Ασκήσεις για το σπίτι Οι ασκήσεις είναι ατομικές!!! 1. Συμπιέστε όλα τα αρχεία σας σε ένα αρχείο με όνομα: lab05_ομx_yyyy (όπου X ο αριθμός ομάδας εργαστηρίου και YYYY το ΑΜ σας) 2. Υποβάλετε το αρχείο στην αντίστοιχη άσκηση στο eclass
Άσκηση Να πραγματοποιήσετε αναγνώριση προτύπων για το σετ δεδομένων fisheriris του Matlab, τροποποιώντας κατάλληλα τον κώδικας του παραδείγματος, ώστε: Το ποσοστό δεδομένων προς εκπαίδευση να είναι 80% Η μέση τιμή και η τυπική απόκλιση των δεδομένων εκπαίδευσης να έχουν ομαλοποιηθεί (Preprocessing). Η συνάρτηση μεταφοράς σε όλους τους νευρώνες να είναι η logsig και να χρησιμοποιηθεί ο αλγόριθμος εκμάθησης Gradient Descent. Να εκπαιδεύσετε το ΝΝ με δύο διαφορετικές αρχιτεκτονικές της επιλογής σας (να το τρέξετε δύο φορές), και να συγκρίνετε την απόδοση πρόβλεψης R.
Σημειώσεις για την Άσκηση Προσοχή: Ως αρχιτεκτονική εννοούμε τον αριθμό των επιπέδων και των νευρώνων σε κάθε επίπεδο. Προσοχή: Στον πίνακα meas τα λουλούδια- πρότυπα εκπαίδευσης είναι στις γραμμές. Προσοχή: Θα πρέπει να κωδικοποιήσετε τον πίνακα species με την ίδια λογική που είναι κωδικοποιημένος ο πίνακας winetargets. Ως παραδοτέο θεωρείτε ένα συμπιεσμένο αρχείο που να περιέχει: Ένα.m αρχείο με τον κώδικα σας Ένα.doc αρχείο με τα συμπεράσματα σύγκρισης της απόδοσης πρόβλεψης.