Δίκτυα Perceptron Κυριακίδης Ιωάννης 2013
Αρχιτεκτονική του δικτύου Το δίκτυο Perceptron είναι το πρώτο νευρωνικό δίκτυο το οποίο θα κατασκευάσουμε και στη συνέχεια θα εκπαιδεύσουμε προκειμένου να το χρησιμοποιήσουμε σε εφαρμογές αναγνώρισης προτύπων. Το χαρακτηριστικό του δικτύου αυτού είναι ότι αποτελείται από ένα μόνο επίπεδο (θεωρητικά με οποιοδήποτε αριθμό νευρώνων)
Αρχιτεκτονική του δικτύου Ο κάθε νευρώνας υλοποιεί την συνάρτηση μεταφοράς hard limit Μεταξύ του επιπέδου των νευρώνων και του διανύσματος εισόδου υπάρχει πλήρης σύνδεση με τα αντίστοιχα βάρη. Ο κάθε νευρώνας επίσης έχει και ως μοναδιαία είσοδο το bias με βάρος b.
Αρχιτεκτονική του δικτύου Ο κάθε νευρώνας υλοποιεί την συνάρτηση μεταφοράς hard limit Μεταξύ του επιπέδου των νευρώνων και του διανύσματος εισόδου υπάρχει πλήρης σύνδεση με τα αντίστοιχα βάρη. Ο κάθε νευρώνας επίσης έχει και ως μοναδιαία είσοδο το bias με βάρος b. Υπενθυμίζουμε ότι η συνάρτηση αυτή δίνει μηδενική έξοδο (0) σε αρνητική είσοδο και μοναδιαία έξοδο (1) σε μηδενική ή θετική είσοδο.
Είσοδος 2 Γραμμικά Διαχωρίσιμα Προβλήματα Λόγω του ότι το δίκτυο αποτελείται μονάχα από ένα επίπεδο, περιορίζει το εύρος των εφαρμογών του στην Αναγνώριση Προτύπων. Συγκεκριμένα το δίκτυο είναι ικανό στην αντιμετώπιση γραμμικά διαχωρίσιμων προβλημάτων. Πρακτικά, αυτό σημαίνει ότι αν τοποθετήσω όλες τις πιθανές εισόδους σε ένα χώρο (πχ. δισδιάστατο), να μπορώ να χωρίσω γραμμικά τις εισόδους στις ανάλογες εξόδους (πρότυπα). Είσοδος 1
Δίκτυα Perceptron Μας επιτρέπουν να προβλέψουμε αποτελέσματα για φαινόμενα τα οποία δεν ξέρουμε ακριβώς "πώς δουλεύουν" Αλλά βάση παρατήρησης έχουμε φτιάξει ένα αρκετά μεγάλο σύνολο δεδομένων (πρότυπα εκπαίδευσης), το οποίο μπορεί να εκπαιδεύσει ένα νευρωνικό δίκτυο στη συμπεριφορά του φαινομένου που θέλουμε να μελετήσουμε Έτσι ώστε το νευρωνικό δίκτυο, να μας απαντήσει (με σχετική ακρίβεια) την επιρροή που θα είχε το φαινόμενο σε μια είσοδο για την οποία δεν έχουμε παρατηρήσει ακόμα έξοδο από το φαινόμενο.
Η συνάρτηση newp() Για να δημιουργήσουμε την δομή για ένα δίκτυο perceptron θα χρησιμοποιήσουμε την συνάρτηση newp() του MATLAB. net = newp(f, S); Όπου: F = Είναι ένας πίνακας 2 στηλών. Σε κάθε γραμμή του πίνακα θα πρέπει να υπάρχει η ελάχιστη και η μέγιστη τιμή για κάθε χαρακτηριστική τιμή του διανύσματος εισόδου. S = Είναι ο αριθμός των νευρώνων στο επίπεδο εξόδου.
Η συνάρτηση newp() Για να δημιουργήσουμε την δομή για ένα δίκτυο perceptron θα χρησιμοποιήσουμε την συνάρτηση newp() του MATLAB. net = newp(f, S); Όπου: F = Είναι ένας πίνακας 2 στηλών. Σε κάθε γραμμή του πίνακα Σημειώνεται θα πρέπει ότι να δεν υπάρχει χρειάζεται η ελάχιστη να και η μέγιστη ορίσουμε τιμή για με κάποια κάθε χαρακτηριστική εντολή την συνάρτηση τιμή του μεταφοράς που υλοποιεί ο κάθε νευρώνας διανύσματος εισόδου. μιας και αυτή είναι εξ ορισμού η hard limit S = Είναι και ο την αριθμός ρυθμίζει των αυτόματα νευρώνων η συνάρτηση στο επίπεδο εξόδου. newp().
Παράδειγμα Έστω ότι θέλουμε να κατασκευάσουμε ένα δίκτυο perceptron το οποίο να αποτελείται από 2 εισόδους (χαρακτηριστικές τιμές), και θέλουμε να εκπαιδευτεί για να ταξινομεί 4 πρότυπα εκπαίδευσης σε δύο κατηγορίες. X = [ -0.5-0.5 +0.3-0.1; -0.5 +0.5-0.5 +1.0]; T = [1 1 0 0]; plotpv(x,t);
Αρχικοποίηση Δομής Η εντολή η οποία θα μας κατασκευάσει το δίκτυο αυτό είναι η: net = newp(minmax(x), 1); Πληροφορίες Αρχικοποίησης Δομής: Με τις παρακάτω εντολές μπορούμε να δούμε διάφορες πληροφορίες σχετικά με την αρχικοποίηση των βαρών αλλά και των biases. WeightsConfiguration = net.inputweights{1,1} BiasesConfiguration = net.biases{1}
Πληροφορίες Αρχικοποίησης Δομής WeightsConfiguration = Neural Network Weight delays: 0 initfcn: 'initzero' initsettings: (none) learn: true learnfcn: 'learnp' learnparam: (none) size: [1 2] weightfcn: 'dotprod' weightparam: (none) userdata: (your custom info) BiasesConfiguration = Neural Network Bias initfcn: 'initzero' learn: true learnfcn: 'learnp' learnparam: (none) size: 1 userdata: (your custom info)
Τροποποίηση Αρχικοποίησης Αν το επιθυμούμε μπορούμε να επέμβουμε στην ιδιότητα αρχικοποίησης των βαρών αλλά και των biases και να χρησιμοποιήσουμε ένα αλγόριθμο τυχαίας αρχικοποίησης πληκτρολογώντας τις παρακάτω εντολές: net.inputweights{1,1}.initfcn = 'rands'; net.biases{1}.initfcn = 'rands'; Επίσης μπορούμε να δούμε αλλά και να αλλάξουμε τις τιμές της αρχικοποίησης τόσο των βαρών όσο και των biases χρησιμοποιώντας τις παρακάτω ιδιότητες: net.iw{1,1} net.b{1}
Εκπαίδευση του δικτύου Με τον όρο εκπαίδευση του δικτύου για την αναγνώριση προτύπων αναφερόμαστε στην διαδικασία επαναπροσδιορισμού των βαρών και των biases προκειμένου το δίκτυο να είναι ικανό να αναγνωρίζει τα διανύσματα εισόδου σε σχέση με την κατηγορία στην οποία αυτά υπάγονται (έξοδος). Η συνάρτηση που χρησιμοποιούμε για την εκπαίδευση του δικτύου είναι η train() και συντάσσεται ως εξής: net = train(net, X, T); όπου net είναι το αρχικοποιημένο δίκτυο, Χ είναι το διάνυσμα εισόδου, και Τ είναι το διάνυσμα του στόχου.
Κατηγορίες Εκπαίδευσης Γενικά υπάρχουν δύο κατηγορίες εκπαίδευσης: Supervised (με επίβλεψη) Η εκπαίδευση με επίβλεψη προϋποθέτει ότι για να εκπαιδεύσουμε το δίκτυο χρησιμοποιούμε κάποια διανύσματα εισόδου για τα οποία γνωρίζουμε εκ των προτέρων σε ποια κατηγορία ανήκουν (έξοδος). Unsupervised (χωρίς επίβλεψη). Στην εκπαίδευση χωρίς επίβλεψη η πρότερη γνώση για την ταυτότητα των προτύπων δεν υπάρχει.
Κώδικας Παραδείγματος Υπάρχει στο eclass clc; clear all; close all; X = [ -0.5-0.5 +0.3-0.1; -0.5 +0.5-0.5 +1.0]; T = [1 1 0 0]; net=newp(minmax(x),1); net.inputweights{1,1}.initfcn='rands'; net.biases{1}.initfcn='rands'; net.trainparam.epochs=15; net.trainparam.goal=0.01; net=init(net); WeightsConfiguration=net.inputweights{1,1} BiasesConfiguration=net.biases{1} initialweights=net.iw{1,1} initialbiases=net.b{1} net=train(net,x,t); apotelesma=sim(net,x); aftertrainweights=net.iw{1,1} aftertrainbiases=net.b{1} plotpv(x,t); plotpc(net.iw{1},net.b{1});
Κώδικας Παραδείγματος Υπάρχει στο eclass clc; clear all; close all; X = [ -0.5-0.5 +0.3-0.1; -0.5 +0.5-0.5 +1.0]; T = [1 1 0 0]; net=newp(minmax(x),1); net.inputweights{1,1}.initfcn='rands'; net.biases{1}.initfcn='rands'; net.trainparam.epochs=15; net.trainparam.goal=0.01; net=init(net); WeightsConfiguration=net.inputweights{1,1} BiasesConfiguration=net.biases{1} initialweights=net.iw{1,1} initialbiases=net.b{1} net=train(net,x,t); apotelesma=sim(net,x); Κάθε πέρασμα όλων των διανυσμάτων aftertrainweights=net.iw{1,1} εισόδου μαζί με τα ζευγάρια aftertrainbiases=net.b{1} τους (στόχους) κατά την εκπαίδευση του δικτύου την ονομάζουμε ως πέρασμα ή epoch plotpv(x,t); plotpc(net.iw{1},net.b{1});
Διαδικασία εκμάθησης Παρατηρούμε ότι στο συγκεκριμένο παράδειγμα το δίκτυο εκπαιδεύτηκε στο τρίτο πέρασμα των διανυσμάτων, επομένως δεν υπήρχε λόγος να συνεχίσει τις επαναλήψεις του.
Αποτελέσματα Εκμάθησης
Απορίες - Ερωτήσεις ;
Ασκήσεις για το σπίτι Οι ασκήσεις είναι ατομικές!!! 1. Συμπιέστε όλα τα αρχεία m-file σε ένα αρχείο με όνομα: lab04_ομx_yyyy (όπου X ο αριθμός ομάδας εργαστηρίου και YYYY το ΑΜ σας) 2. Υποβάλετε το αρχείο στην αντίστοιχη άσκηση στο eclass
Δεν θα έχετε