Νευρωνικά Δίκτυα 2007-08 Εργαστήριο Εικόνας, Βίντεο και Πολυμέσων Νίκος Σίμου – Βαγγέλης Σπύρου 03.12.2007
Μέρος 1ο Εισαγωγή στη MATLAB
Πίνακες και MATLAB MATLAB = MATrix LABoratory Αποτελεί ισχυρό υπολογιστικό περιβάλλον και ταυτόχρονα γλώσσα προγραμματισμού που χειρίζεται με ευκολία πίνακες και πολύπλοκες πράξεις Βασική Δομική Μονάδα: Πίνακες (1-Δ, 2-Δ, 3-Δ,...) Κάθε μεταβλητή στη MATLAB αποθηκεύεται σαν ένας πίνακας 1x1 Η MATLAB είναι case-sensitive, άρα a≠A Το στοιχείο στη γραμμή i και στη στήλη j του πίνακα Α συμβολίζεται με Α(i,j)
Πίνακες και MATLAB Δημιουργία Πινάκων: Ορισμός όλων των στοιχείων του πίνακα: Αναλυτικά: Α=[1 2 3 4] , Β=[1 2;3 4] Περιγραφικά: C=[1:10] , D = [1:5:100] Φόρτωμα πίνακα από αρχείο: load myMatrix.mat Δημιουργία πίνακα χρησιμοποιώντας μια από τις έτοιμες συναρτήσεις της MATLAB: E=zeros(3,4) , F=ones(5,6), G=eye(10) H=rand(5,2) Δημιουργία πίνακα με χρήση δικής μας συνάρτησης: I=myFunction(E,F)
Χρήσιμες πράξεις μεταξύ πινάκων έστω: τότε:
Χρήσιμες Πράξεις μεταξύ Πινάκων Πράξεις με συναρτήσεις: A=[1 2 3] Λογικές πράξεις: A = [1 2 1], B= [0 3 1] Πράξεις Μέγιστου/Ελάχιστου:
Αλληλουχία Πινάκων έστω: A = [1 2 3 4] τότε: B =[A A]
Έλεγχος Ροής if statement else statement end if statement elseif statement elseif … else statement end while statement end for statement end switch switch_expression case case_expression(s) statement(s) … otherwise end break Όχι σε άσκοπη χρήση for loops!!!
M-Files Δύο τρόποι για τη δημιουργία m-files: File→New→M-File edit file1.m [σε command line] Ένα M-File μπορεί να είναι: Μια συνάρτηση (function) function C = myFunction(A,B) C = A + 2*B; Μια ακολουθία εντολών (script) A, B C = A + 2*B
Σχεδίαση Γραφικής Παράστασης με τη χρήση της συνάρτησης plot H plot(x,y) δέχεται ως είσοδο δύο διανύσματα και εμφανίζει μια γραφική παράσταση του y σε συνάρτηση του x Παράδειγμα θέλουμε να σχεδιάσουμε το sin(x) για τιμές του x από 0 εώς 2π: t = 0:pi/100:2*pi; y = sin(t); plot(t,y)
Μέρος 2ο Multilayer Perceptrons
Πολυεπίπεδα Perceptrons (1) Γενικά: Ένα από τα πιο συνηθισμένα Νευρωνικά Δίκτυα Δίκτυο πρόσθιας τροφοδότησης (feed forward) Γενίκευση του μονοστρωματικού perceptron Eπιβλεπόμενη(supervised) μάθηση Αρχιτεκτονική: 1 επίπεδο εισόδου 1 ή περισσότερα κρυμμένα επίπεδα 1 επίπεδο εξόδου Εκπαίδευση με τον αλγόριθμο ανάστροφης διάδοσης σφάλματος (Back Propagation)
Πολυεπίπεδα Perceptrons (2) Κάθε κρυμμένος νευρώνας περιέχει μια ΜΗ-ΓΡΑΜΜΙΚΗ συνάρτηση ενεργοποίησης (activation function) Η συνάρτηση αυτή είναι ΔΙΑΦΟΡΙΣΙΜΗ Τα κρυμμένα επίπεδα προσδίδουν στο δίκτυο την δυνατότητα να «μάθει» πολύπλοκα πρότυπα Δεν έπιτρέπονται συνδέσεις μεταξύ επιπέδων που δεν ανήκουν σε διαδοχικά επίπεδα Δεν επιτρέπονται συνδέσεις μεταξύ νευρώνων του ίδιου επιπέδου
Παράδειγμα v10 w10 w11 v11 Y1 X1 v21 w21 v12 w12 Y2 X2 v22 w22 w20 v20
Παράδειγμα v10=1 w10=1 w11=1 v11=-1 v21=0 Y1 X1 w21=-1 v12=0 w12=0 Y2 15
Παράδειγμα Είσοδος: Επιθυμητή Έξοδος: w11=1 v11=-1 v21=0 Y1 X1=0 Είσοδος: Επιθυμητή Έξοδος: 16
Παράδειγμα u1 = 1 u2 = 2 Πέρασμα κατά την ΕΥΘΕΙΑ φορα Υπολογίζουμε τις ενεργοποιήσεις 1ου επιπέδου u1 = 1 w11=1 v11=-1 v21=0 Y1 X1=0 w21=-1 v12=0 w12=0 Y2 X2=1 v22=1 w22=1 u2 = 2 17
Παράδειγμα Υπολογίζουμε τις εξόδους του πρώτου επιπέδου, περνώντας τις ενεργοποιήσεις που υπολογίσαμε προηγουμένως στη συνάρτηση ενεργοποίησης: z1 = 1 w11=1 v11=-1 v21=0 Y1 X1=0 w21=-1 v12=0 w12=0 Y2 X2=1 v22=1 w22=1 z2 = 2 18
Παράδειγμα z1 = 1 z2 = 2 Υπολογίζουμε τις εξόδους του 2ου layer: w11=1 v11=-1 v21=0 Y1=2 X1=0 w21=-1 v12=0 w12=0 Y2=2 X2=1 v22=1 w22=1 z2 = 2 19
Παράδειγμα Πέρασμα κατά την ΑΝΤΙΘΕΤΗ ΦΟΡΑ w11=1 v11=-1 v21=0 D1= -1 X1=0 w21=-1 v12=0 w12=0 D2= -2 X2=1 v22=1 w22=1 20
Παράδειγμα D1 z1 =-1 D1 z2 =-2 D2 z1 =-2 D2 z2 =-4 w11=1 v11=-1 v21=0 Υπολογίζουμε τις αλλαγές στα βάρη για το 2ο επίπεδο, με βάση τον κανόνα: D1 z1 =-1 w11=1 v11=-1 v21=0 X1=0 w21=-1 D1 z2 =-2 D2 z1 =-2 v12=0 w12=0 X2=1 D2 z2 =-4 v22=1 w22=1 21
Παράδειγμα w11= 0.9 v11=-1 v21=0 X1=0 w21= -1.2 v12=0 w12= -0.2 X2=1 Οι αλλαγές στα βάρη είναι: π.χ.: 22
Παράδειγμα D1 w11= -1 v11=-1 v21=0 D1= -1 X1=0 D2 w21= 2 v12=0 Υπολογίζουμε τα : 23
Παράδειγμα d1= 1 v11=-1 v21=0 D1= -1 X1=0 v12=0 D2= -2 X2=1 v22=1 Τα διαδίδονται προς την αντίθετη κατεύθυνση: 24
Και πολλαπλασιάζοντας με τις εισόδους: Παράδειγμα d1 x1 = 0 v11=-1 d1 x2 = 1 v21=0 D1= -1 X1=0 v12=0 d2 x1 = 0 D2= -2 X2=1 v22=1 d2 x2 = -2 Και πολλαπλασιάζοντας με τις εισόδους: 25
Παράδειγμα v11= -1 w11= 0.9 X1=0 w21= -1.2 v21= 0 v12= 0.1 w12= -0.2 Τέλος, αλλάζουμε τα βάρη.Παρατηρήστε ότι βάρη που πολλαπλασιάστηκαν με το 0 ΔΕΝ ΑΛΛΑΞΑΝ γιατί δεν επηρεάζουν το σφάλμα. Τα biases ΑΛΛΑΞΑΝ (δεν φαίνονται) 26
Παράδειγμα z1 = 1.2 v11= -1 w11= 0.9 X1=0 w21= -1.2 v21= 0 v12= 0.1 Επαναλαμβάνουμε την διαδικασία χρησιμοποιώντας το ίδιο πρότυπο 27
Παράδειγμα z1 = 1.2 v11= -1 w11= 0.9 y1 = 1.66 X1=0 w21= -1.2 v21= 0 Τώρα, οι έξοδοι βρίσκονται πιο κοντά στις επιθυμητές: 28
Τρόπος Εργασίας Επιλογή της αρχιτεκτονικής του δικτύου (κρυμμένα επίπεδα, αριθμός νευρώνων, συνάρτηση μάθησης, συνάρτηση ενεργοποίησης) Αρχικοποίηση του δικτύου (βάρη, παράμετροι) Έλεγχος και προεπεξεργασία δεδομένων Παρουσίαση του συνόλου δεδομένων Εκπαίδευση του δικτύου Επαναλήψεις εώς κάποιο καθορισμένο σημείο με βάση προκαθορισμένα κριτήρια Παρουσίαση του συνόλου ελέγχου Αξιολόγηση Αποτελεσμάτων και αν χρειαστεί, αλλαγή παραμέτρων και/ή αρχιτεκτονικής και εκ νέου εκπαίδευση του δικτύου
Παράδειγμα MATLAB %φτιάχνω το νευρωνικό δίκτυο net=newff([0 1;0 1],[3 1],{'tansig‘ 'tansig‘}, 'trainlm’ ,’learngdm’,’mse’); %ορίζω τις παραμέτρους του net.trainParam.goal = 0; net.trainParam.epochs = 300; net.trainParam.lr = 0.01; %αρχικοποίηση του δικτύου net = init(net); %εκπαίδευση του δικτύου [net,tr]=train(net,traindata,traintargets); %έλεγχος του δικτύου test = sim (net,testdata);