Δημιουργία πολυτροπικών μοντέλων: Χρησιμοποιώντας το πακέτο σε βάθος Pytorch

Κόμβος πηγής: 1181295

Δημιουργία πολυτροπικών μοντέλων: Χρησιμοποιώντας το πακέτο σε βάθος Pytorch

Αυτό το άρθρο σας βοηθά να ξεκινήσετε με το ανοιχτού κώδικα ευρύ πλαίσιο PyTorch που αναπτύχθηκε από τον Javier Rodriguez Zaurin.


By Ρατζίβ Σαχ, Επιστήμονας Δεδομένων στο Snorkel.ai


ευρεία αρχιτεκτονική
Εικόνα από τον συγγραφέα

 

Αντιμετωπίζετε μοντελοποίηση σε μεγαλύτερα σύνολα δεδομένων, πολυτροπικά δεδομένα ή εξελιγμένους στόχους όπως multiclass, multitarget ή multitask; Μια ευέλικτη αρθρωτή αρχιτεκτονική βαθιάς εκμάθησης μπορεί να είναι κατάλληλη για αυτά τα προβλήματα. Σε πλάτος Pytorch είναι ένα πακέτο βαθιάς μάθησης ανοιχτού κώδικα που έχει σχεδιαστεί για πολυτροπικά προβλήματα.

Το Widedeep αναπτύχθηκε από τον Javier Rodriguez Zaurin και είναι ένα δημοφιλές πακέτο PyTorch με περισσότερα από 600 αστέρια Github. Είναι κατασκευασμένο για να είναι εύκολο στη χρήση, περιέχει αρθρωτή αρχιτεκτονική και ενημερώνεται συνεχώς ώστε να περιέχει τα πιο πρόσφατα μοντέλα όπως SAINT, Perceiver και FastFormer. Βρήκα αυτό το πακέτο όταν έψαχνα για επεξήγηση για πολυτροπικές προσεγγίσεις βαθιάς μάθησης. Για να εξοικειωθούν περισσότεροι επιστήμονες δεδομένων με το widedeep, έγραψα αυτήν την ανάρτηση για να παρουσιάσω το πακέτο.

Θέλετε να μεταβείτε στον κώδικα; Πιάσε το συνοδευτικά τετράδια και αρχίστε να τα χρησιμοποιείτε!

Αυτό το άρθρο καλύπτει τα ακόλουθα θέματα:

  • Είναι το PyTorch WideDeep κατάλληλο για εσάς;
  • Προεπεξεργασία των δεδομένων σας
  • Καθορισμός μοντέλου
  • Ωρα ΠΡΟΠΟΝΗΣΗΣ
  • Εξηγώντας το μοντέλο σας
  • Λήψη προβλέψεων και αποθήκευση του μοντέλου σας

Είναι το Pytorch WideDeep κατάλληλο για εσάς;

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

Γενικά, δεν πρέπει να ξεκινήσετε το μόντελινγκ πηδώντας στη βαθιά μάθηση. Εάν μόλις ξεκινάτε, είναι προτιμότερο να χρησιμοποιείτε μια προσέγγιση όπως οι μηχανές με ενισχυμένη κλίση, οι οποίες συνήθως αποδίδουν καλύτερα σε δεδομένα πίνακα. Βλέπω Szilard για μια επισκόπηση προσεγγίσεων σε δεδομένα πίνακα ή Η ανάρτηση του Χαβιέ για σύγκριση του GBM έναντι της βαθιάς μάθησης χρησιμοποιώντας το widedeep. Παρόλα αυτά, οι ομάδες όπως Pinterest or Lyft προχωρούν σε μοντέλα βαθιάς μάθησης για ορισμένες εφαρμογές.

Η ανάρτηση εστιάζει στο widedeep που είναι το αγαπημένο μου πακέτο ανοιχτού κώδικα για τη δημιουργία πολυτροπικών πακέτων. Αλλά το οικοσύστημα PyTorch έχει πολλά άλλα υπέροχα πακέτα που θα συνιστούσα να συμπεριληφθούν γρήγοραpytorch-πίνακας, να pytorch-forecasting.

Προεπεξεργασία των δεδομένων σας

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

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

tab_preprocessor = TabPreprocessor(embed_cols=cat_embed_cols, continuous_cols=continuous_cols)X_tab = tab_preprocessor.fit_transform(df)

Καθορισμός μοντέλου

 
 
Το Widedeep παρέχει μεγάλη ευελιξία για τον καθορισμό ενός μοντέλου. Υπάρχουν τέσσερα κύρια στοιχεία που θέτουν σε κίνδυνο ένα μοντέλο Wide και Deep: wide, deeptabular, deeptext και deepimage.

Η Widedeep προσφέρει μοντέλα για καθένα από αυτά τα εξαρτήματα. Για παράδειγμα, για τη βαθιά εικόνα υπάρχουν διαθέσιμα προεκπαιδευμένα μοντέλα ResNet. Για το deeptabular υπάρχει ένα τεράστιο σύνολο διαθέσιμων επιλογών, όπως: TabMlp, TabResnet, TabNet, TabTransformer, SAINT, FTTransformer, TabPerceiver και TabFastFormer. Για να δείτε βαθύτερα, ρίξτε μια ματιά στα σημειωματάρια στα οποία επικεντρώνονται μοντέλα με βαθιές πίνακες ή η μοντέλα μετασχηματιστών.

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

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

tabfastformer = TabFastFormer( column_idx=tab_preprocessor.column_idx, continuous_cols=tab_preprocessor.continuous_cols, embed_input=tab_preprocessor.embeddings_input, n_blocks=2, n_heads=4)model = WideDeep(deeptabular=tabfastformer)

Ωρα ΠΡΟΠΟΝΗΣΗΣ

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

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

fasttab_model = Trainer(model, objective=”rmse”)fasttab_model.fit(X_tab=X_tab_train, target=y_train, n_epochs=50, batch_size=256, val_split=0.2)

Εξηγώντας το μοντέλο σας

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

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

from captum.attr import FeaturePermutationfeature_perm = FeaturePermutation(model.deeptabular.eval())
attr_fic = feature_perm.attribute(X_tab_test,target=0)
attr_fic

Αυτά τα αποτελέσματα μπορούν εύκολα να απεικονιστούν:



Εικόνα από τον συγγραφέα

 

Για να λάβετε επεξηγήσεις Shapley μέσω δειγματοληψίας χρησιμοποιώντας τη βιβλιοθήκη captum:

from captum.attr import ShapleyValueSamplingshapv = ShapleyValueSampling(model.deeptabular.eval())
shapv_attr_test = shapv.attribute(X_tab_test,target=0)
shapv_attr_test

Για να λάβετε επεξηγήσεις Shapley Integrated Gradient χρησιμοποιώντας τη βιβλιοθήκη shap:

import shapexplainer = shap.GradientExplainer(model.deeptabular.eval(), torch.Tensor(background))
shap_values_gradient = explainer.shap_values(X_tab_test)
shap_values_gradient

Η βιβλιοθήκη shap σάς επιτρέπει επίσης να απεικονίσετε μια μεμονωμένη εξήγηση:



Οι επεξηγήσεις Shap επικεντρώνονται στην επίδραση χαρακτηριστικών σε μεμονωμένες παρατηρήσεις (γνωστή ως τοπική εξήγηση). Μπορείτε επίσης να συνοψίσετε τις τιμές Shapley για να λάβετε επίσης τη σημασία της παγκόσμιας λειτουργίας.

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



Εικόνα από τον συγγραφέα

 

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

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

Λήψη προβλέψεων και αποθήκευση των μοντέλων σας

 
 
Το Widedeep ακολουθεί γενικές συμβάσεις για την εκτέλεση προβλέψεων και την αποθήκευση των μοντέλων σας. Ακολουθεί ένα γρήγορο απόσπασμα για τη λήψη πιθανοτήτων πρόβλεψης:

results = fasttab_model.predict_proba(X_tab=X_tab)
results

Μπορείτε να σειριοποιήσετε τόσο τον προεπεξεργαστή όσο και το μοντέλο χρησιμοποιώντας pickle.

import pickle#save preprocessing
with open('tab_preproc.pkl', 'wb') as wp:pickle.dump(tab_preprocessor, dp)#save the model and training history
fasttab_model.save(path ="",model_filename="model_saved.pt")

Περίληψη και επόμενα βήματα

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

Παρακαλώ ελέγξτε τα δύο συνοδευτικά τετράδια για να αρχίσετε να βουτάτε βαθύτερα σε αυτό που καλύφθηκε σε αυτήν την ανάρτηση. Μπορείτε να τα εκτελέσετε ακόμη και στο Google Colab στο πρόγραμμα περιήγησής σας, οπότε ξεκινήστε τώρα!

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

 
Bio: Ρατζίβ Σαχ είναι Επιστήμονας Δεδομένων στο Snorkel.ai. Προηγουμένως, ο Rajiv ήταν μέρος των ομάδων επιστήμης δεδομένων στα DataRobot, Caterpillar και State Farm. Του αρέσει η επιστήμη δεδομένων και αφιερώνει χρόνο καθοδηγώντας τους επιστήμονες δεδομένων, μιλώντας σε εκδηλώσεις και διασκεδάζοντας με αναρτήσεις ιστολογίου. Έχει Ph.D. από το Πανεπιστήμιο του Ιλινόις στην Urbana Champaign.

Πρωτότυπο. Αναδημοσιεύτηκε με άδεια.

Συγγενεύων:

Πηγή: https://www.kdnuggets.com/2021/10/building-multimodal-models-widedeep-pytorch-package.html

Σφραγίδα ώρας:

Περισσότερα από KDnuggets