Βέλτιστες πρακτικές βαθιάς εκμάθησης (1) - Αρχικοποίηση βάρους

Βασικά στοιχεία, παγίδες αρχικοποίησης βάρους & βέλτιστες πρακτικές

https://pixabay.com/photo-1600668/

Κίνητρο

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

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

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

Βασικά και σημειώσεις

Σκεφτείτε ένα νευρικό δίκτυο στρώματος L, το οποίο έχει κρυφά στρώματα L-1 και 1 στρώμα εξόδου. Οι παράμετροι (βάρη και τάσεις) του στρώματος l αντιπροσωπεύονται ως

Εκτός από τα βάρη και τις προκαταλήψεις, κατά τη διάρκεια της διαδικασίας κατάρτισης, υπολογίζονται οι ενδιάμεσες μεταβλητές

Η κατάρτιση ενός νευρικού δικτύου αποτελείται από 4 βήματα:

  1. Αρχικοποιήστε τα βάρη και τις προκαταλήψεις.
  2. Διαδοχή προς τα εμπρός: Χρησιμοποιώντας την είσοδο X, τα βάρη W και τις προκαταλήψεις b, για κάθε στρώση υπολογίζουμε Z και A. Στο τελικό στρώμα υπολογίζουμε το f (A ^ (L-1)) που θα μπορούσε να είναι μια sigmoid, softmax ή γραμμική συνάρτηση του A ^ (L-1) και αυτό δίνει την πρόβλεψη y_hat.
  3. Υπολογίστε τη λειτουργία απώλειας: Αυτή είναι μια συνάρτηση της πραγματικής ετικέτας y και της προβλεπόμενης ετικέτας y_hat. Καταγράφει πόσο μακριά είναι οι προβλέψεις μας από τον πραγματικό στόχο. Ο στόχος μας είναι να ελαχιστοποιήσουμε αυτή τη λειτουργία απώλειας.
  4. Αντιστροφή προς τα πίσω: Σε αυτό το βήμα, υπολογίζουμε τις μεταβολές της συνάρτησης απώλειας f (y, y_hat) σε σχέση με τα A, W, και b που ονομάζονται dA, dW και db. Χρησιμοποιώντας αυτές τις κλίσεις ενημερώνουμε τις τιμές των παραμέτρων από το τελευταίο επίπεδο στο πρώτο.
  5. Επαναλάβετε τα βήματα 2-4 για n επαναλήψεις / εποχές μέχρι να αισθανθούμε ότι έχουμε ελαχιστοποιήσει τη λειτουργία απώλειας, χωρίς να υπερκεραστούν τα δεδομένα της αμαξοστοιχίας (περισσότερα για αυτό αργότερα!)

Ακολουθεί μια γρήγορη ματιά στα βήματα 2, 3 και 4 για ένα δίκτυο με 2 στρώματα, δηλ. Ένα κρυφό στρώμα. (Σημειώστε ότι δεν έχω προσθέσει εδώ τους όρους μεροληψίας για λόγους απλότητας):

ΠροώθησηΑναδρομικός πολλαπλασιασμός

Αρχικοποίηση βαρών W

Ένα από τα σημεία εκκίνησης για να φροντίσετε κατά την οικοδόμηση του δικτύου σας είναι να προετοιμάσετε σωστά τον πίνακα βάρους σας. Ας εξετάσουμε δύο σενάρια που μπορούν να προκαλέσουν προβλήματα κατά την εκπαίδευση του μοντέλου:

1. Αρχικοποίηση όλων των βαρών στο 0

Ας το βάλουμε εκεί έξω - αυτό κάνει το μοντέλο σας ισοδύναμο με ένα γραμμικό μοντέλο. Όταν ρυθμίζετε το βάρος σε 0, το παράγωγο σε σχέση με τη λειτουργία απώλειας είναι το ίδιο για κάθε w στο W ^ l, έτσι όλα τα βάρη έχουν τις ίδιες τιμές στην επόμενη επανάληψη. Αυτό κάνει τις κρυφές μονάδες συμμετρικές και συνεχίζει για όλες τις επαναλήψεις n που εκτελείτε. Έτσι, η ρύθμιση των βαρών στο μηδέν καθιστά το δίκτυό σας όχι καλύτερο από ένα γραμμικό μοντέλο. Είναι σημαντικό να σημειωθεί ότι η ρύθμιση των τάσεων στο 0 δεν θα δημιουργήσει προβλήματα, καθώς τα μη μηδενικά βάρη φροντίζουν να σπάσουν την συμμετρία και ακόμα και αν η απόκλιση είναι 0, οι τιμές σε κάθε νευρώνα εξακολουθούν να είναι διαφορετικές.

2. Αρχικοποίηση των βαρών τυχαία

Η αρχικοποίηση των βαρών τυχαία, ακολουθώντας την τυποποιημένη κανονική κατανομή (np.random.randn (size_l, size_l-1) στην Python) ενώ εργάζεστε με ένα (βαθύ) δίκτυο, μπορεί δυνητικά να οδηγήσει σε 2 ζητήματα - διαλείποντες κλίσεις ή εκβαθύνσεις.

α) Διακυμάνσεις διαφυγής - Σε περίπτωση βαθιών δικτύων, για κάθε λειτουργία ενεργοποίησης, το abs (dW) θα γίνει μικρότερο και μικρότερο καθώς πηγαίνουμε προς τα πίσω με κάθε στρώμα κατά τη διάρκεια της πολλαπλασιασμού της πλάτης. Τα προηγούμενα στρώματα είναι τα πιο αργά για να εκπαιδεύσουν σε μια τέτοια περίπτωση.

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

Συγκεκριμένα, σε περίπτωση σιγμοειδούς (z) και tanh (z), αν τα βάρη σας είναι μεγάλα, τότε η κλίση θα είναι ελάχιστα μειωμένη, εμποδίζοντας έτσι το βάρος να αλλάξει την αξία τους. Αυτό συμβαίνει επειδή το abs (dw) θα αυξηθεί πολύ ελαφρώς ή πιθανώς να γίνει μικρότερο και μικρότερο κάθε επανάληψη. Με τις μεταβαλλόμενες κλίσεις RELU (z) δεν είναι γενικά πρόβλημα, καθώς η κλίση είναι 0 για αρνητικές (και μηδενικές) εισόδους και 1 για θετικές εισόδους.

β) Εκρηκτικές κλίσεις - Αυτό είναι ακριβώς το αντίθετο των διαβαθμίσεων που εξαφανίζονται. Σκεφτείτε ότι έχετε μη αρνητικά και μεγάλα βάρη και μικρές ενεργοποιήσεις Α (όπως συμβαίνει για το sigmoid (z)). Όταν αυτά τα βάρη πολλαπλασιάζονται κατά μήκος των στρωμάτων, προκαλούν μια μεγάλη αλλαγή στο κόστος. Έτσι, οι κλίσεις θα είναι επίσης μεγάλες. Αυτό σημαίνει ότι οι αλλαγές στο W, από W - ⍺ * dW, θα είναι σε τεράστια βήματα, η ροπή προς τα κάτω θα αυξηθεί.

Αυτό μπορεί να οδηγήσει σε ταλαντεύσεις γύρω από τα ελάχιστα ή ακόμα και υπερβαίνοντας το βέλτιστο ξανά και ξανά και το μοντέλο δεν θα μάθει ποτέ!

Ένας άλλος αντίκτυπος των διαβαθμίσεων έκρηξης είναι ότι τεράστιες τιμές των διαβαθμίσεων μπορεί να προκαλέσουν υπερχείλιση του αριθμού που οδηγεί σε λανθασμένους υπολογισμούς ή εισαγωγές NaN's. Αυτό μπορεί επίσης να οδηγήσει στην απώλεια λαμβάνοντας την τιμή NaN.

Βέλτιστες πρακτικές

1. Χρησιμοποιώντας τη RELU / διαρροή RELU ως λειτουργία ενεργοποίησης, καθώς είναι σχετικά ισχυρή στο πρόβλημα της διακύμανσης / έκρηξης (ειδικά για δίκτυα που δεν είναι πολύ βαθιά). Στην περίπτωση διαρροής RELU, δεν έχουν ποτέ κλίση 0. Έτσι δεν πεθαίνουν ποτέ και η εκπαίδευση συνεχίζεται.

2. Για βαθιά δίκτυα, μπορούμε να χρησιμοποιήσουμε ένα ευρετικό για να αρχικοποιήσουμε τα βάρη ανάλογα με τη μη γραμμική λειτουργία ενεργοποίησης. Εδώ, αντί να αντλούμε από κανονική κανονική κατανομή, αντλούμε W από κανονική κατανομή με διακύμανση k / n, όπου k εξαρτάται από τη λειτουργία ενεργοποίησης. Παρόλο που αυτά τα ευρετικά δεν επιλύουν πλήρως το ζήτημα των εκρηκτικών / διαφυγόντων κλίσεων, βοηθούν να το μετριάσουν σε μεγάλο βαθμό. Τα πιο συνηθισμένα είναι:

α) Για το RELU (z) - πολλαπλασιάζουμε τις τυχαία παραγόμενες τιμές του W με:

β) Για tanh (z) - Η ευρετική ονομάζεται αρχικοποίηση Xavier. Είναι παρόμοιο με το προηγούμενο, εκτός από το ότι το k είναι 1 αντί του 2.

Στο TensorFlow W = tf.get_variable ('W', [dims], αρχικοποιητής) όπου initializer = tf.contrib.layers.xavier_initializer ()

γ) Ένα άλλο ευρέως χρησιμοποιούμενο ευρετικό είναι:

Αυτά χρησιμεύουν ως καλές αφετηρίες για την αρχικοποίηση και μετριάζουν τις πιθανότητες έκρηξης ή εξαφάνισης των κλίσεων. Ορίζουν τα βάρη ούτε πολύ μεγαλύτερα από το 1, ούτε πολύ λιγότερο από 1. Έτσι, οι κλίσεις δεν εξαφανίζονται ή εκραγούν πολύ γρήγορα. Βοηθούν στην αποφυγή της αργής σύγκλισης, διασφαλίζοντας επίσης ότι δεν θα παραμείνουμε ταλαντούμενα από τα ελάχιστα. Υπάρχουν και άλλες παραλλαγές των παραπάνω, όπου ο κύριος στόχος είναι και πάλι η ελαχιστοποίηση της διακύμανσης των παραμέτρων.

3. Κοπή κλίσης - Αυτός είναι ένας άλλος τρόπος αντιμετώπισης του προβλήματος έκρηξης με κλίση. Ορίσαμε μια τιμή κατωφλίου και εάν μια επιλεγμένη συνάρτηση κλίσης είναι μεγαλύτερη από αυτό το όριο, την ορίζουμε σε άλλη τιμή. Για παράδειγμα, κανονικοποιήστε τις κλίσεις όταν το πρότυπο L2 υπερβαίνει ένα ορισμένο κατώφλι -W = W * κατώφλι / l2_norm (W) αν το κατώφλι l2_norm (W)>

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

συμπέρασμα

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

βιβλιογραφικές αναφορές

  1. διαδίκτυο-
  2. Νευρωνικά δίκτυα: εκπαίδευση με backpropagation - Jeremy Jordan
  3. Μια απαλή εισαγωγή στην έκρηξη βαθμίδων στα νευρωνικά δίκτυα από τον Jason Brownlee
  4. Εξαφανίζοντας πρόβλημα κλίσης
  5. https://www.quora.com/ Γιατί- είναι- είναι- αδύνατο- να έχει- εκραγεί- σταδιακά- σε -απασχόληση-Network-in-an-an-RNN

Σχετικά με μένα: Αποφοίτησε με την MS Data Science στη USF και έχει πτυχίο στην Πληροφορική, έχω 2 χρόνια εμπειρίας στην κατασκευή αλγορίθμων πρόβλεψης και συστάσεων και στην απόκτηση επιχειρησιακών γνώσεων για τους χρηματοοικονομικούς και τους ιδιώτες πελάτες. Είμαι ενθουσιασμένος για τις ευκαιρίες για την εφαρμογή της μηχανικής μάθησης και της γνώσης βαθιάς εκμάθησης σε πραγματικά προβλήματα.
Δείτε τα άλλα blog μου εδώ!
LinkedIn: https://www.linkedin.com/in/neerja-doshi/