Εργασία με νευρωνικά δίκτυα: λίστα ελέγχου για εντοπισμό σφαλμάτων

Εργασία με νευρωνικά δίκτυα: λίστα ελέγχου για εντοπισμό σφαλμάτων

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

Αυτό το άρθρο αφορά έναν αλγόριθμο για τον εντοπισμό σφαλμάτων στα νευρωνικά σας δίκτυα.

Το Skillbox προτείνει: Πρακτικό μάθημα Προγραμματιστής Python από την αρχή.

Υπενθύμιση: για όλους τους αναγνώστες του "Habr" - έκπτωση 10 ρούβλια κατά την εγγραφή σε οποιοδήποτε μάθημα Skillbox χρησιμοποιώντας τον κωδικό προσφοράς "Habr".

Ο αλγόριθμος αποτελείται από πέντε στάδια:

  • εύκολη εκκίνηση?
  • επιβεβαίωση ζημιών·
  • Έλεγχος ενδιάμεσων αποτελεσμάτων και συνδέσεων.
  • διαγνωστικά παραμέτρων.
  • έλεγχος της εργασίας.

Εάν κάτι σας φαίνεται πιο ενδιαφέρον από τα υπόλοιπα, μπορείτε να μεταβείτε αμέσως σε αυτές τις ενότητες.

Εύκολη εκκίνηση

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

Μια απλή αρχή είναι να δημιουργήσετε ένα απλοποιημένο μοντέλο και να το εκπαιδεύσετε σε ένα σύνολο (σημείο) δεδομένων.

Αρχικά δημιουργούμε ένα απλοποιημένο μοντέλο

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

Εκπαιδεύουμε το μοντέλο σε ένα μόνο σύνολο (σημείο) δεδομένων

Ως γρήγορος έλεγχος λογικής για το έργο σας, μπορείτε να χρησιμοποιήσετε ένα ή δύο σημεία δεδομένων για εκπαίδευση για να επιβεβαιώσετε εάν το σύστημα λειτουργεί σωστά. Το νευρωνικό δίκτυο πρέπει να δείχνει 100% ακρίβεια στην εκπαίδευση και τις δοκιμές. Εάν δεν συμβαίνει αυτό, τότε είτε το μοντέλο είναι πολύ μικρό είτε έχετε ήδη ένα σφάλμα.

Ακόμα κι αν όλα είναι καλά, προετοιμάστε το μοντέλο για μία ή περισσότερες εποχές πριν προχωρήσετε.

Εκτίμηση απώλειας

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

Είναι σημαντικό να είστε προσεκτικοί στις αρχικές απώλειες. Ελέγξτε πόσο κοντά είναι το πραγματικό αποτέλεσμα στο αναμενόμενο αποτέλεσμα, εάν το μοντέλο ξεκίνησε με μια τυχαία εικασία. ΣΕ Το έργο του Andrey Karpathy προτείνει τα εξής:: «Βεβαιωθείτε ότι έχετε το αποτέλεσμα που περιμένετε όταν ξεκινάτε με έναν μικρό αριθμό παραμέτρων. Είναι καλύτερα να ελέγξετε αμέσως την απώλεια δεδομένων (με τον βαθμό τακτοποίησης μηδενικό). Για παράδειγμα, για το CIFAR-10 με ταξινομητή Softmax, αναμένουμε ότι η αρχική απώλεια θα είναι 2.302 επειδή η αναμενόμενη πιθανότητα διάχυσης είναι 0,1 για κάθε κατηγορία (αφού υπάρχουν 10 κλάσεις) και η απώλεια Softmax είναι η αρνητική πιθανότητα καταγραφής της σωστής κατηγορίας ως − ln (0.1) = 2.302."

Για το δυαδικό παράδειγμα, ένας παρόμοιος υπολογισμός γίνεται απλώς για κάθε μία από τις κλάσεις. Εδώ, για παράδειγμα, είναι τα δεδομένα: 20% 0 και 80% 1. Η αναμενόμενη αρχική απώλεια θα είναι έως –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Εάν το αποτέλεσμα είναι μεγαλύτερο από 1, μπορεί να υποδεικνύει ότι τα βάρη των νευρωνικών δικτύων δεν είναι σωστά ισορροπημένα ή ότι τα δεδομένα δεν έχουν κανονικοποιηθεί.

Έλεγχος ενδιάμεσων αποτελεσμάτων και συνδέσεων

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

  • Εσφαλμένες εκφράσεις για ενημερώσεις gradle.
  • δεν εφαρμόζονται ενημερώσεις βάρους.
  • εκρηκτικές κλίσεις.

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

Επιπλέον, είναι απαραίτητο να παρακολουθούνται οι τιμές των συναρτήσεων ενεργοποίησης, τα βάρη και οι ενημερώσεις καθενός από τα επίπεδα. Για παράδειγμα, το μέγεθος των ενημερώσεων παραμέτρων (βάρη και προκαταλήψεις) θα πρέπει να είναι 1-e3.

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

Μπορείτε να χρησιμοποιήσετε τον έλεγχο διαβάθμισης για να εντοπίσετε αυτά τα σφάλματα προσεγγίζοντας τη διαβάθμιση χρησιμοποιώντας μια αριθμητική προσέγγιση. Εάν είναι κοντά στις υπολογιζόμενες κλίσεις, τότε η backpropagation εφαρμόστηκε σωστά. Για να δημιουργήσετε έναν έλεγχο διαβάθμισης, ελέγξτε αυτούς τους υπέροχους πόρους από το CS231 εδώ и εδώΚαθώς και μάθημα Andrew Nga σε αυτό το θέμα.

Φαϊζάν Σέιχ υποδεικνύει τρεις κύριες μεθόδους για την οπτικοποίηση ενός νευρωνικού δικτύου:

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

Υπάρχουν αρκετά χρήσιμα εργαλεία για την οπτικοποίηση των ενεργοποιήσεων και των συνδέσεων μεμονωμένων επιπέδων, π.χ. ConX и Ταμπλό.

Εργασία με νευρωνικά δίκτυα: λίστα ελέγχου για εντοπισμό σφαλμάτων

Διαγνωστικά παραμέτρων

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

Μέγεθος πακέτου (μέγεθος παρτίδας) - Εάν θέλετε το μέγεθος παρτίδας να είναι αρκετά μεγάλο για να λαμβάνετε ακριβείς εκτιμήσεις διαβάθμισης σφάλματος, αλλά αρκετά μικρό ώστε η στοχαστική κλίση (SGD) να ρυθμίζει το δίκτυό σας. Τα μικρά μεγέθη παρτίδων θα οδηγήσουν σε ταχεία σύγκλιση λόγω θορύβου κατά τη διάρκεια της εκπαιδευτικής διαδικασίας και στη συνέχεια σε δυσκολίες βελτιστοποίησης. Αυτό περιγράφεται με περισσότερες λεπτομέρειες εδώ.

Ποσοστό μάθησης - πολύ χαμηλό θα οδηγήσει σε αργή σύγκλιση ή σε κίνδυνο να κολλήσετε στα τοπικά ελάχιστα. Ταυτόχρονα, ένα υψηλό ποσοστό εκμάθησης θα προκαλέσει απόκλιση βελτιστοποίησης, επειδή κινδυνεύετε να πηδήξετε μέσα από το βαθύ αλλά στενό τμήμα της συνάρτησης απώλειας. Δοκιμάστε να χρησιμοποιήσετε τον προγραμματισμό ταχύτητας για να τον μειώσετε ενώ εκπαιδεύετε το νευρωνικό δίκτυο. Ενημερωμένο με το CS231n υπάρχει μια μεγάλη ενότητα αφιερωμένη σε αυτό το πρόβλημα.

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

Ομαλοποίηση παρτίδας - χρησιμοποιείται για την κανονικοποίηση των δεδομένων εισόδου κάθε επιπέδου, που μας επιτρέπει να λύσουμε το πρόβλημα της εσωτερικής μετατόπισης συμμεταβλητών. Εάν χρησιμοποιείτε το Dropout και το Batch Norma μαζί, δείτε αυτό το άρθρο.

Στοχαστική κλίση κάθοδος (SGD) — υπάρχουν διάφορες ποικιλίες SGD που χρησιμοποιούν ορμή, προσαρμοστικούς ρυθμούς μάθησης και τη μέθοδο Nesterov. Ωστόσο, κανένα από αυτά δεν έχει σαφές πλεονέκτημα τόσο όσον αφορά τη μαθησιακή αποτελεσματικότητα όσο και τη γενίκευση (λεπτομέρειες εδώ).

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

Για να αξιολογήσετε τα πάντα μόνοι σας, πρέπει να απενεργοποιήσετε την τακτοποίηση και να ελέγξετε μόνοι σας τη διαβάθμιση απώλειας δεδομένων.

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

Σημαντικό: Εάν χρησιμοποιείτε και την κανονικοποίηση εγκατάλειψης και παρτίδας, να είστε προσεκτικοί σχετικά με τη σειρά αυτών των λειτουργιών ή ακόμα και να τις χρησιμοποιείτε μαζί. Όλα αυτά ακόμη συζητούνται ενεργά και συμπληρώνονται. Ακολουθούν δύο σημαντικές συζητήσεις για αυτό το θέμα στο Stackoverflow и ArXiv.

Έλεγχος εργασίας

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

Ωστόσο, η μη αυτόματη τεκμηρίωση μπορεί να γίνει δύσκολη υπόθεση σε περίπτωση μεγάλου όγκου εργασίας. Εδώ έρχονται εργαλεία όπως το Comet.ml για να σας βοηθήσουν να καταγράφετε αυτόματα σύνολα δεδομένων, αλλαγές κώδικα, πειραματικό ιστορικό και μοντέλα παραγωγής, συμπεριλαμβανομένων βασικών πληροφοριών για το μοντέλο σας (υπερπαράμετροι, μετρήσεις απόδοσης μοντέλου και περιβαλλοντικές πληροφορίες).

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

Εργασία με νευρωνικά δίκτυα: λίστα ελέγχου για εντοπισμό σφαλμάτων

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

Το Skillbox προτείνει:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο