Ένας γρήγορος οδηγός για τη μεταφορά της εκμάθησης και τον τρόπο εφαρμογής του στο νευρωνικό σας δίκτυο

Παραδείγματα ταξινόμησης εικόνων και επεξεργασίας φυσικής γλώσσας

Επίσης διατίθεται στα ισπανικά | También disponible en español

Οι μεγάλες εξελίξεις που επιτεύχθηκαν πρόσφατα στον κόσμο της Deep Learning δεν μπορούσαν να εξηγηθούν χωρίς την ένωση αρκετών παραγόντων, όπως η εξέλιξη και ο εκδημοκρατισμός των εργαλείων επεξεργασίας, η εισαγωγή νέων πλατφορμών και πλαισίων ή η άφιξη πολλαπλών τεχνικών για τη βελτίωση των νευρικών κατάρτιση δικτύου. Αλλά όσον αφορά την αποτελεσματικότητα ή την ακρίβεια βρίσκουμε έναν βασικό παράγοντα που έχει φέρει επανάσταση στους τομείς των υπολογιστών Vision ή Natural Language Processing. Σε αυτό το άρθρο θα σας εξηγήσω τι είναι η εκμάθηση μεταφοράς και μερικές περιπτώσεις χρήσης.

Φωτογραφία από τον Doug Linstedt στο Unsplash

Σημείωση: Τα περισσότερα από αυτά που λέω εδώ έμαθα από το μάθημα Deep Learning for Coders που διδάσκεται από τον Jeremy Howard στο Πανεπιστήμιο του Σαν Φρανσίσκο.

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

Πρώτος μεγάλος δικαιούχος: Computer Vision

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

Το Brady Bunch, έκδοση γάτας

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

Αυτό παίρνουμε όταν υιοθετούμε μοντέλα που έχουν προηγουμένως εκπαιδευτεί πάνω στο τεράστιο σύνολο δεδομένων του ImageNet, το οποίο διαθέτει σήμερα περισσότερες από 14 εκατομμύρια εικόνες και σχεδόν 22.000 διαφορετικές ετικέτες. Ίσως η πιο γνωστή περίπτωση είναι η αρχιτεκτονική ResNet, που κέρδισε το διαγωνισμό αναγνώρισης εικόνων που πραγματοποίησε το ImageNet το 2015. Το γεγονός ότι χρησιμοποιούμε την ίδια αρχιτεκτονική με τις ίδιες παραμέτρους όπως το προ-εκπαιδευμένο μοντέλο θα δώσει στο δίκτυο μας τη δυνατότητα να αναγνωρίζει πολλά πράγματα από την αρχή, η οποία θα συνεπάγεται επίσης πολύ σύντομο χρόνο εκπαίδευσης. Αυτή η χρήση των δεδομένων του ImageNet ως σημείο εκκίνησης σήμαινε ένα τεράστιο άλμα στο πεδίο Computer Vision.

Ένα δείγμα δεδομένων του ImageNet

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

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

Παράδειγμα (Mathworks)

Ένα τέχνασμα που έμαθα από το μάθημα Fast.ai: όταν εφαρμόζουμε τα αποτελέσματα της μάθησης μεταφοράς, μπορούμε να βελτιώσουμε σημαντικά εάν αρχικά εκπαιδεύσουμε το μοντέλο μας με μειωμένες εκδόσεις των πρωτότυπων εικόνων και μετά το εκπαιδεύουμε με μεγαλύτερες εικόνες. Τα αποτελέσματα βελτιώνονται επειδή τα μάτια του δικτύου μας μοιάζουν με διαφορετικό σύνολο δεδομένων. Αυτή η τεχνική είναι γνωστή ως προοδευτική αλλαγή μεγέθους και λειτουργεί για ελάχιστο μέγεθος εικόνας 64x64 pixels.

Στρατηγική κατάρτισης για το νευρικό δίκτυο με εκμάθηση μεταφοράς

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

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

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

Μεταφορά μάθησης για επεξεργασία φυσικής γλώσσας

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

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

Το 2018 ο Jeremy Howard και ο Sebastian Ruder δημοσίευσαν ένα έγγραφο που εισήγαγε ULMFiT, μια γενική μέθοδο για τη μεταφορά της εκμάθησης μεταφοράς σε οποιοδήποτε πρόβλημα NLP, φέρνοντας στο πεδίο αυτό τις προηγουμένως επιτευχθείσες προόδους στην περιοχή Computer Vision. Η συνέπεια: τα καλύτερα αποτελέσματα μέχρι σήμερα (με βελτίωση της ακρίβειας 18-24%) σε αρκετά κλασσικά σύνολα δεδομένων, όπως αυτή που χρησιμοποιήθηκε για να ταξινομήσει τις κριτικές ταινιών IMDB σε θετικές και αρνητικές.

Η επεξεργασία της φυσικής γλώσσας δεν είναι τόσο απλή

Τα βήματα που έγιναν για αυτό το παράδειγμα και άλλα παρόμοια προβλήματα θα ήταν τα εξής:

1. Επιλέξτε ένα προ-εκπαιδευμένο μοντέλο (ή δημιουργήστε και εκπαιδεύστε ένα νέο) σε μια πιο γενική εργασία κειμένου ως σημείο εκκίνησης. Στο NLP θα χρησιμοποιήσουμε αυτό που είναι γνωστό ως γλωσσικό μοντέλο, το οποίο προσπαθεί για παράδειγμα να προβλέψει την επόμενη λέξη σε μια πρόταση, όπως μπορούμε να δούμε στα πληκτρολόγια πρόβλεψης. Αυτό το έργο απαιτεί βαθιά γνώση της γλώσσας και του κόσμου γύρω μας. η εργασία με n-grams (λέξεις που συνήθως εμφανίζονται μαζί) όπως και πριν δεν αρκεί για να αποκτήσουν τις ικανότητες που απαιτούνται για να συνεχίσουν τις προτάσεις. Αλλά ... τι γίνεται αν εφαρμόζουμε Deep Learning χρησιμοποιώντας ένα ευρύτερο σύνολο δεδομένων όπως ένα μεγάλο σωρό άρθρων που λαμβάνονται από τη Wikipedia; Φαίνεται σαν μια καλή ιδέα! Η πρόβλεψη της επόμενης λέξης δεν θα είναι πολύ χρήσιμη για την τελική μας ταξινόμηση, αλλά επιτυγχάνοντας ότι θα αποκτήσουμε πολύτιμη γνώση της γλώσσας και της πραγματικότητας όπου εφαρμόζεται. Πολύ καλύτερα από την έναρξη με τυχαίες παραμέτρους, έτσι δεν είναι;

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

2. Περιορίστε το γλωσσικό μοντέλο εφαρμόζοντας τη Μεταβίβαση Μάθησης, για να δημιουργήσετε ένα νέο που είναι καλό στην πρόβλεψη της επόμενης λέξης αλλά μέσα στον συγκεκριμένο τομέα μας. σε αυτή την περίπτωση ταινίες σχόλια. Θα τροφοδοτήσουμε το δίχτυ με το σύνολο δεδομένων μας, το οποίο ονομάζεται επίσης κορμός στόχου, και θα εφαρμόσει τον διαχωρισμό (τμηματοποίηση του κειμένου σε ελάχιστες μονάδες ή μάρκες), την κανονικοποίηση και την αριθμητικοποίηση (προσέχοντας με ειδικές μάρκες). Συνιστάται να χρησιμοποιείτε όλα τα διαθέσιμα δεδομένα, συμπεριλαμβανομένων των δειγμάτων δοκιμής. δεδομένου ότι οι ετικέτες τους (οι οποίες θα χρησιμοποιηθούν για ταξινόμηση) δεν χρειάζονται για την πρόβλεψη της επόμενης λέξης. Θα συμμετάσχουμε σε όλα τα δείγματα και θα διαθέσουμε, για παράδειγμα, το 10% του συνόλου για να επικυρώσουμε το μοντέλο.

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

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

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

Η εικόνα μεταφέρθηκε από fast.ai

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

Το προκύπτον μοντέλο μετά από αυτό το σημείο θα είναι ήδη σε θέση να διακρίνει αν μια κριτική είναι θετική ή αρνητική :)

συμπέρασμα

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

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

  • Computer Vision: μοντέλα για PyTorch, Keras
  • Επεξεργασία φυσικής γλώσσας: Μετασχηματιστές ([*] BERT, GPT-2, ...), ULMFiT κ.λπ.
Ernie, Elmo και Bert

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

PS - Ρίξτε μια ματιά σε αυτά τα notebooks της Python για πλήρη παραδείγματα χρησιμοποιώντας fastai: Ταξινόμηση εικόνων + ταξινόμηση αναθεώρησης IMDB.

Ελπίζω να σου άρεσε! Εγγραφείτε στο #yottabytes για να μην χάσετε άρθρα σαν αυτό :)