Νευρωνικά Δίκτυα #2 | Πώς γίνεται η εκπαίδευση

Στο προηγούμενο άρθρο είδαμε με ένα απλό παράδειγμα το πως λειτουργεί ένα νευρωνικό δίκτυο που ήδη έχει διαμορφωθεί και το πως παίρνει αποφάσεις. Υποθέσαμε ότι το δίκτυο είναι ήδη εκπαιδευμένο, οπότε σε αυτό το μέρος θα δούμε πως ακριβώς γίνεται αυτή η εκπαίδευση με ένα απλό παράδειγμα. Όπως είπαμε η εκπαίδευση ισοδυναμεί με τον καθορισμό κάποιων συναπτικών βαρών στο σύστημα τα οποία θα μας δίνουν την επιθυμητή έξοδο.

Ο αλγόριθμος εκπαίδευσης ονομάζεται backpropagation.

Η λογική του αλγόριθμου είναι απλή: Κάθε δεδομένο εκπαίδευσης που μπαίνει στο νευρωνικό δίκτυο (είτε αυτό είναι εικόνα είτε κείμενο κτλ) παράγει κάτι στις εξόδους του δικτύου. Επειδή για τα δεδομένα εκπαίδευσης γνωρίζουμε τι θα έπρεπε να παράγει στη πραγματικότητα, μετράμε τη διαφορά της εξόδου με τη πραγματική έξοδο που αναμέναμε. Βασιζόμενοι στο σφάλμα που βρήκαμε, αλλάζουμε λίγο τα συναπτικά βάρη έτσι ώστε πλέον να προσεγγίζουμε καλύτερα την έξοδο που ξέρουμε ότι πρέπει να πάρουμε. Η διαδικασία αυτή επαναλαμβάνεται πολλές φορές μέχρις ότου να έχουμε πολύ μικρό ή καθόλου σφάλμα.

Η διαδικασία θα γίνει εύκολα κατανοητή από το παρακάτω παράδειγμα::

Ας υποθέσουμε ότι έχουμε ένα δίκτυο που εκτελεί τη παρακάτω πράξη: Δέχεται σαν είσοδο 3 αριθμούς, προσθέτει τον πρώτο με τον δεύτερο και το άθροισμα αυτό το πολλαπλασιάζει με τον τρίτο.

Screenshot from 2017-03-10 22-41-44

Σκοπός μας εδώ είναι να μεγιστοποιήσουμε την f, δηλαδή να βρούμε τα συναπτικά βάρη τα οποία μεγαλώνουν το f. Επειδή η συγκεκριμένη συνάρτηση δεν έχει κάποιο ακρότατο θα πούμε ότι απλώς θέλουμε να μεγαλώσουμε την έξοδό της.

 

Γενικά τώρα, μπορούμε να δούμε ότι στο παραπάνω σχήμα υλοποιούνται δύο συναρτήσει οι οποίες παίρνουν δύο εισόδους. Είναι η συνάρτηση που επιστρέφει το άθροισμα δύο αριθμών και η συνάρτηση που επιστρέφει το γινόμενο δύο αριθμών. Γι αυτές τις συναρτήσεις υπολογίζουμε τις μερικές παραγώγους ως προς τις δύο μεταβλητές. Έχουμε δηλαδή ότι η μερική παράγωγος της συνάρτησης της πρόσθεσης ως προς το x είναι 1 (το x θεωρείται σταθερά και βρίσκουμε τη παράγωγο της άλλης μεταβλητής), στη συνάρτηση του πολλαπλασιασμού είναι y για τον ίδιο λόγο κτλ.

Screenshot from 2017-03-10 22-58-21

Ας βάλουμε τώρα κάποια είσοδο στο δίκτυο τους αριθμούς (x,y,z)=(-2,5,-4). Στην έξοδο της πρόσθεσης εμφανίζεται ο αριθμός -2+5=-3 ενώ στην έξοδο f ο αριθμός -4*3=-12.

 

Screenshot from 2017-03-10 22-42-00

 

Σκοπός μας, όπως είπαμε, είναι να αυξήσουμε τον αριθμό που βγαίνει στην έξοδο. Αυτό σημαίνει ότι στην έξοδο θέλουμε να δούμε μία διαφορά δηλαδή κλίση, δηλαδή παράγωγο ίση με 1. Αυτό προκύπτει ως εξής: Εφόσον θέλουμε να αυξήσουμε τον αριθμό που θέλουμε στην έσοδο μπορούμε να πούμε ότι ο επόμενος μεγαλύτερος (αν μιλάμε για ακεραίους) είναι ο -11. Αν πάρουμε τη διαφορά της επιθυμητής εξόδου (-11) με την έξοδο που παίρνουμε τώρα (-12) προκύπτει -11-(-12) = 1
Με τη μέθοδο backpropagation προσπαθούμε τώρα να μεταδώσουμε αυτή τη πληροφορία πίσω στο υπόλοιπο δίκτυο. Στη παρακάτω εικόνα με κόκκινο φαίνονται οι παράγωγοι σε κάθε σημείο.

 

Screenshot from 2017-03-10 22-42-28

 

Χρησιμοποιώντας τους υπολογισμούς που κάναμε νωρίτερα για τις τιμές των μερικών παράγωγων στην έξοδο των πυλών και των εισόδων προκύπτει ότι η μερική παράγωγος της f ως προς q (δηλαδή στο σημείο q) είναι z, δηλαδή -4. Αυτό συμβαίνει επειδή η f είναι  f(x,y)=qz. Άρα η παράγωγος της f ως προς (with respect of) q είναι z. Αντίστοιχα η παράγωγος ως προς την άλλη είσοδο είναι q. Έτσι προκύπτουν οι κόκκινες τιμές στη παραπάνω εικόνα.

 

Για να υπολογίσουμε τώρα τις παραγώγους στα x,y χρησιμοποιούμε τον chain rule ο οποίος φαίνεται στη παρακάτω εικόνα.

Για την είσοδο x έχουμε ότι η μερική παράγωγος της f εκεί ισούται με τη μερική παράγωγο  στο q που είναι -4 επί τη μερική παράγωγο του q ως προς το x. Η q είναι η συνάρτηση q(x,y)=x+y άρα η μερική παράγωγος εκεί είναι 1. Οπότε -4*1=-4. Με την ίδια λογική υπολογίζεται και η παράγωγος στο y.

Screenshot from 2017-03-10 22-42-57

Έχοντας λοιπόν όλες αυτές τις κόκκινες τιμές που προέκυψαν από το backpropagate μπορούμε να καταλήξουμε σε μερικά συμπεράσματα. Αρχικά, οι τιμές αυτές αντιπροσωπεύουν κλίσεις, δηλαδή μεταβολές. Στην ουσία δηλαδή μας δείχνουν πόσο και προς τα ποια κατεύθυνση πρέπει να  μειώσουμε το κάθε βάρος. Συγκεκριμένα εδώ, για να πάρουμε την έξοδο που θέλουμε πρέπει να μειώσουμε το q, το x και το y και να αυξήσουμε το z.

 

Με τη διαδικασία αυτή πετύχαμε να κάνουμε optimize και να υπολογίζουμε παραγώγους σε πολύ απλές συναρτήσεις, όπως αυτές της πρόσθεσης και του πολλαπλασιασμού.

 

Στη πράξη τώρα ένας νευρώνας ενός νευρωνικού δικτύου είναι στη πραγματικότητα ένα δίκτυο παρόμοιο με αυτό που μελετήσαμε. Συγκεκριμένα  μπορεί να αναπαρασταθεί ως το δίκτυο που φαίνεται στη παρακάτω εικόνα. Σαν είσοδο σε κάθε νευρώνα υπάρχουν οι τιμές των νευρώνων του προηγούμενου επιπέδου πολλαπλασιασμένες επί τα αντίστοιχα συναπτικά βάρη. Όλα αυτά προστίθενται μεταξύ τους μαζί με τη τιμή του bias. Τέλος τιμή αυτή περνάει από μία σιγμοειδή συνάρτηση.

Screenshot from 2017-03-10 22-43-21

Ένας νευρώνας λοιπόν χρειάζεται να αντιμετωπίσει παραγώγους της συνάρτηση του πολλαπλασιασμού, της πρόσθεσης και της σιγμοειδούς συνάρτησης (η οποία προκύπτει ότι είναι ίση με: (1-σ(χ))*σ(χ), όπου σ(χ) ή σιγμοειδής).

Κάθε νευρώνας είναι ένας τοπικός εργάτης στη κυνήγι για την f που θέλουμε. Η f που θέλουμε μπορεί να είναι απείρως περίπλοκη σε πραγματικά προβλήματα. Με το νευρωνικό δίκτυο στην ουσία σπάμε το πρόβλημα σε πολλά trivial προβλήματα πετυχαίνοντας έτσι θεαματικά αποτελέσματα.

 

Για το τέλος σας αφήνουμε μία πολύ καλή ομιλία από τον Jeremy Howard στην οποία θα δείτε μεταξύ άλλων διάφορες εντυπωσιακές εφαρμογές.

Show Your Love

 

 

 

Facebook Profile photo

Studying in Computer Engineering & Informatics Department. Member of the fedora community. Interested in mobile apps and machine learning.

Leave a Reply

Your email address will not be published. Required fields are marked *