Προγραμματισμός

Οι καλύτερες βιβλιοθήκες μηχανικής μάθησης και βαθιάς μάθησης

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

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

Ένα πλαίσιο βαθιάς μάθησης ή βαθύ νευρωνικό δίκτυο καλύπτει μια ποικιλία τοπολογιών νευρωνικών δικτύων με πολλά κρυφά στρώματα. Τα Keras, MXNet, PyTorch και TensorFlow είναι πλαίσια βαθιάς μάθησης. Το Scikit-learn και το Spark MLlib είναι πλαίσια μηχανικής μάθησης. (Κάντε κλικ σε οποιονδήποτε από τους προηγούμενους συνδέσμους για να διαβάσετε την ανεξάρτητη κριτική μου για το προϊόν.)

Σε γενικές γραμμές, οι υπολογισμοί σε βαθύ νευρωνικό δίκτυο εκτελούνται πολύ πιο γρήγορα σε GPU (συγκεκριμένα GPU γενικής χρήσης Nvidia CUDA), TPU ή FPGA, παρά σε CPU. Γενικά, οι απλούστερες μέθοδοι μηχανικής μάθησης δεν επωφελούνται από μια GPU.

Ενώ εσείς μπορώ εκπαιδεύστε βαθιά νευρωνικά δίκτυα σε μία ή περισσότερες CPU, η εκπαίδευση τείνει να είναι αργή και αργά δεν μιλώ για δευτερόλεπτα ή λεπτά. Όσο περισσότεροι νευρώνες και στρώματα πρέπει να εκπαιδευτούν, και όσο περισσότερα δεδομένα είναι διαθέσιμα για εκπαίδευση, τόσο περισσότερο χρειάζεται. Όταν η ομάδα του Google Brain εκπαίδεψε τα μοντέλα μετάφρασης γλωσσών για τη νέα έκδοση της Μετάφρασης Google το 2016, πραγματοποίησαν τις προπονήσεις τους για μια εβδομάδα κάθε φορά, σε πολλές GPU. Χωρίς GPU, κάθε μοντέλο πειράματος κατάρτισης θα διαρκούσε μήνες.

Από τότε, η Intel Math Kernel Library (MKL) κατέστησε δυνατή την προπόνηση μερικοί νευρωνικά δίκτυα σε CPU σε εύλογο χρονικό διάστημα. Εν τω μεταξύ, οι GPU, TPU και FPGA έχουν γίνει ακόμη πιο γρήγορα.

Η ταχύτητα εκπαίδευσης όλων των πακέτων βαθιάς μάθησης που τρέχουν στις ίδιες GPU είναι σχεδόν ίδια. Αυτό συμβαίνει επειδή οι εσωτερικοί βρόχοι εκπαίδευσης περνούν τον περισσότερο χρόνο τους στο πακέτο Nvidia CuDNN.

Εκτός από την ταχύτητα της εκπαίδευσης, κάθε μία από τις βιβλιοθήκες βαθιάς μάθησης έχει το δικό της σύνολο πλεονεκτημάτων και μειονεκτημάτων, και το ίδιο ισχύει και για το Scikit-learn και το Spark MLlib. Ας βουτήξουμε.

Κεράς

Το Keras είναι μια υψηλού επιπέδου προδιαγραφή και υλοποίηση για την κατασκευή μοντέλων νευρωνικών δικτύων που αποστέλλεται με υποστήριξη για τρία πλαίσια βαθιάς μάθησης back-end: TensorFlow, CNTK και Theano. Η Amazon εργάζεται επί του παρόντος για την ανάπτυξη ενός back-end MXNet για την Keras. Είναι επίσης δυνατό να χρησιμοποιήσετε το PlaidML (ένα ανεξάρτητο έργο) ως back-end για την Keras να εκμεταλλευτεί την υποστήριξη OpenCL της PlaidML για όλες τις GPU.

Το TensorFlow είναι το προεπιλεγμένο back-end για το Keras και αυτό που συνιστάται για πολλές περιπτώσεις χρήσης που περιλαμβάνουν επιτάχυνση GPU σε υλικό Nvidia μέσω CUDA και cuDNN, καθώς και για επιτάχυνση TPU στο Google Cloud. Το TensorFlow περιέχει επίσης ένα εσωτερικό tf.keras κλάση, ξεχωριστή από μια εξωτερική εγκατάσταση Keras.

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

Το Keras σάς επιτρέπει να πέσετε ακόμη πιο μακριά, στο επίπεδο κωδικοποίησης Python, με υποκατηγορία σκληρό. Μοντέλο, αλλά προτιμά το λειτουργικό API όταν είναι δυνατόν. Ο Keras έχει επίσης ένα scikit-μάθετε API, ώστε να μπορείτε να χρησιμοποιήσετε την αναζήτηση πλέγματος Scikit-learn για να πραγματοποιήσετε βελτιστοποίηση υπερπαραμέτρων σε μοντέλα Keras.

Κόστος: Δωρεάν ανοιχτού κώδικα.

Πλατφόρμα: Linux, MacOS, Windows ή Raspbian. TensorFlow, Theano ή CNTK back-end.

Διαβάστε την κριτική μου για το Keras.

MXNet

Το MXNet έχει εξελιχθεί και βελτιωθεί αρκετά από τη στιγμή που μετακόμισε κάτω από την ομπρέλα Apache Software Foundation στις αρχές του 2017. Ενώ έχουν γίνει εργασίες στο Keras με ένα back-end MXNet, μια διαφορετική διεπαφή υψηλού επιπέδου έχει γίνει πολύ πιο σημαντική: Gluon. Πριν από την ενσωμάτωση του Gluon, θα μπορούσατε είτε να γράψετε έναν εύκολο επιτακτικό κώδικα είτε έναν γρήγορο συμβολικό κώδικα στο MXNet, αλλά όχι και τα δύο ταυτόχρονα. Με το Gluon, μπορείτε να συνδυάσετε τα καλύτερα και των δύο κόσμων, με τρόπο που ανταγωνίζεται τόσο την Keras όσο και την PyTorch.

Τα πλεονεκτήματα που απαιτούνται για το Gluon περιλαμβάνουν:

  • Απλός, κατανοητός κώδικας: Το Gluon προσφέρει ένα πλήρες σύνολο δομικών μονάδων νευρωνικού δικτύου plug-and-play, συμπεριλαμβανομένων προκαθορισμένων επιπέδων, βελτιστοποιητών και αρχικοποιητών.
  • Ευέλικτη, επιτακτική δομή: Το Gluon δεν απαιτεί τον αυστηρό καθορισμό του μοντέλου νευρικού δικτύου, αλλά φέρνει πιο κοντά τον αλγόριθμο εκπαίδευσης και το μοντέλο για να παρέχει ευελιξία στη διαδικασία ανάπτυξης.
  • Δυναμικά γραφήματα: Το Gluon επιτρέπει στους προγραμματιστές να ορίζουν μοντέλα νευρωνικών δικτύων που είναι δυναμικά, που σημαίνει ότι μπορούν να κατασκευαστούν εν κινήσει, με οποιαδήποτε δομή και χρησιμοποιώντας οποιαδήποτε από τις εγγενείς ροές ελέγχου της Python.
  • Υψηλή απόδοση: Το Gluon παρέχει όλα τα παραπάνω οφέλη χωρίς να επηρεάζει την ταχύτητα προπόνησης που παρέχει ο υποκείμενος κινητήρας.

Αυτά τα τέσσερα πλεονεκτήματα, μαζί με μια τεράστια διευρυμένη συλλογή παραδειγμάτων μοντέλου, φέρνουν το Gluon / MXNet σε σχεδόν ισοδύναμο επίπεδο με τα Keras / TensorFlow και PyTorch για ευκολία ανάπτυξης και ταχύτητας εκπαίδευσης. Μπορείτε να δείτε παραδείγματα κώδικα για κάθε ένα από αυτά στην κύρια σελίδα Gluon και να επαναληφθούν στη σελίδα επισκόπησης για το API Gluon.

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

Το Gluon έχει μια καλή επιλογή επιπέδων για οικοδομικά μοντέλα, συμπεριλαμβανομένων των βασικών επιπέδων (Πυκνό, Διακοπή κ.λπ.), συνελικτικά στρώματα, στρώματα συγκέντρωσης και στρώματα ενεργοποίησης. Καθένα από αυτά είναι μια κλήση μίας γραμμής. Αυτά μπορούν να χρησιμοποιηθούν, μεταξύ άλλων θέσεων, μέσα σε κοντέινερ δικτύου όπως gluon.nn.Sequential ().

Κόστος: Δωρεάν ανοιχτού κώδικα.

Πλατφόρμα: Linux, MacOS, Windows, Docker, Raspbian και Nvidia Jetson. Python, R, Scala, Julia, Perl, C ++ και Clojure (πειραματικό). Το MXNet περιλαμβάνεται στο AWS Deep Learning AMI.

Διαβάστε την κριτική μου για το MXNet.

PyTorch

Το PyTorch βασίζεται στο παλιό φακό και το νέο πλαίσιο Caffe2. Όπως μπορείτε να μαντέψετε από το όνομα, το PyTorch χρησιμοποιεί το Python ως γλώσσα σεναρίου και χρησιμοποιεί ένα εξελιγμένο back-end Torch C / CUDA. Τα χαρακτηριστικά παραγωγής του Caffe2 ενσωματώνονται στο έργο PyTorch.

Το PyTorch τιμολογείται ως "Τεντωτές και δυναμικά νευρικά δίκτυα στην Python με ισχυρή επιτάχυνση GPU." Τι σημαίνει αυτό?

Το Tensors είναι ένα μαθηματικό κατασκεύασμα που χρησιμοποιείται σε μεγάλο βαθμό στη φυσική και τη μηχανική. Ένας τανυστής της δεύτερης τάξης είναι ένα ειδικό είδος μήτρας. Η λήψη του εσωτερικού προϊόντος ενός διανύσματος με τον τανυστή αποδίδει έναν άλλο φορέα με νέο μέγεθος και νέα κατεύθυνση. Το TensorFlow παίρνει το όνομά του από τον τρόπο που οι τανυστές (των συνάψεων βαρών) ρέουν γύρω από το μοντέλο του δικτύου. Το NumPy χρησιμοποιεί επίσης τανυστές, αλλά τους αποκαλεί ndarray.

Η επιτάχυνση της GPU είναι δεδομένη για τα περισσότερα σύγχρονα πλαίσια βαθύ νευρωνικών δικτύων. ΕΝΑ δυναμικός Το νευρωνικό δίκτυο είναι ένα που μπορεί να αλλάξει από επανάληψη σε επανάληψη, για παράδειγμα επιτρέποντας σε ένα μοντέλο PyTorch να προσθέτει και να αφαιρεί κρυμμένα στρώματα κατά τη διάρκεια της προπόνησης για να βελτιώσει την ακρίβεια και τη γενικότητά του. Το PyTorch αναδημιουργεί το γράφημα εν κινήσει σε κάθε βήμα επανάληψης. Αντίθετα, το TensorFlow δημιουργεί από προεπιλογή ένα γράφημα ροής δεδομένων, βελτιστοποιεί τον κώδικα γραφήματος για απόδοση και, στη συνέχεια, εκπαιδεύει το μοντέλο.

Ενώ η πρόθυμη λειτουργία εκτέλεσης είναι μια αρκετά νέα επιλογή στο TensorFlow, είναι ο μόνος τρόπος που εκτελείται το PyTorch: Οι κλήσεις API εκτελούνται όταν κληθούν, αντί να προστεθούν σε ένα γράφημα που θα εκτελεστεί αργότερα. Αυτό μπορεί να φαίνεται ότι θα ήταν λιγότερο υπολογιστικά αποτελεσματικό, αλλά το PyTorch σχεδιάστηκε για να λειτουργεί έτσι, και δεν είναι καθόλου αδιάφορο όσον αφορά την ταχύτητα προπόνησης ή πρόβλεψης.

Το PyTorch ενσωματώνει βιβλιοθήκες επιτάχυνσης όπως Intel MKL και Nvidia cuDNN και NCCL (Nvidia Collective Communications Library) για μεγιστοποίηση της ταχύτητας. Ο πυρήνας CPU και GPU Tensor και νευρωνικά δίκτυα - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) και THCUNN (Torch CUDA Neural Network) - γράφονται ως ανεξάρτητες βιβλιοθήκες με C99 API Ταυτόχρονα, το PyTorch δεν είναι Python δεσμευμένο σε ένα μονολιθικό πλαίσιο C ++ - η πρόθεση είναι να ενσωματωθεί βαθιά με το Python και να επιτρέψει τη χρήση άλλων βιβλιοθηκών Python.

Κόστος: Δωρεάν ανοιχτού κώδικα.

Πλατφόρμα: Linux, MacOS, Windows; CPU και Nvidia GPU.

Διαβάστε την κριτική μου για το PyTorch.

Scikit-μάθετε

Το πλαίσιο Scikit-learn Python διαθέτει μια ευρεία επιλογή ισχυρών αλγορίθμων μηχανικής μάθησης, αλλά χωρίς βαθιά μάθηση. Εάν είστε οπαδός της Python, το Scikit-learning μπορεί να είναι η καλύτερη επιλογή για εσάς ανάμεσα στις βιβλιοθήκες απλής μηχανικής μάθησης.

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

Από την άλλη πλευρά, το Scikit-learning δεν καλύπτει τη μάθηση σε βάθος ή τη μάθηση ενίσχυσης, δεν διαθέτει γραφικά μοντέλα και προβλέψεις ακολουθίας και δεν μπορεί πραγματικά να χρησιμοποιηθεί από άλλες γλώσσες εκτός από την Python. Δεν υποστηρίζει PyPy, το μεταγλωττιστή Python just-in-time ή GPU. Τούτου λεχθέντος, εκτός από τη μικρή εισβολή σε νευρωνικά δίκτυα, δεν έχει πραγματικά προβλήματα ταχύτητας. Χρησιμοποιεί το Cython (το μεταγλωττιστή Python to C) για λειτουργίες που πρέπει να είναι γρήγορες, όπως οι εσωτερικοί βρόχοι.

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

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

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

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

Κόστος: Δωρεάν ανοιχτού κώδικα.

Πλατφόρμα: Απαιτεί Python, NumPy, SciPy και Matplotlib. Διατίθενται εκδόσεις για MacOS, Linux και Windows.

Διαβάστε την κριτική μου για το Scikit-Learn.

Spark MLlib

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

Το Spark MLlib είναι γραμμένο στη Σκάλα και χρησιμοποιεί το γραμμικό πακέτο άλγεβρας Breeze. Το Breeze εξαρτάται από το netlib-java για βελτιστοποιημένη αριθμητική επεξεργασία, αν και στην κατανομή ανοιχτού κώδικα που σημαίνει βελτιστοποιημένη χρήση της CPU. Η Databricks προσφέρει εξατομικευμένες συστάδες Spark που χρησιμοποιούν GPU, οι οποίες ενδέχεται να σας βοηθήσουν να βελτιώσετε την ταχύτητα 10x για την κατάρτιση σύνθετων μοντέλων μηχανικής μάθησης με μεγάλα δεδομένα.

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

Το Spark MLlib διαθέτει πλήρη API για Scala και Java, ως επί το πλείστον πλήρη API για Python και περιγραμματικά μερικά API για R. Μπορείτε να πάρετε μια καλή αίσθηση για την κάλυψη μετρώντας τα δείγματα: 54 παραδείγματα εκμάθησης μηχανών Java και 60 Scala, 52 μηχανή Python μαθησιακά παραδείγματα και μόνο πέντε παραδείγματα R. Σύμφωνα με την εμπειρία μου, το Spark MLlib είναι πιο εύκολο να δουλέψετε με τη χρήση σημειωματάριων Jupyter, αλλά μπορείτε σίγουρα να το εκτελέσετε σε μια κονσόλα εάν δαμάσετε τα ριζικά μηνύματα κατάστασης Spark.

Το Spark MLlib παρέχει σχεδόν ό, τι θέλετε με τη βασική μηχανική εκμάθηση, την επιλογή χαρακτηριστικών, τους αγωγούς και την επιμονή. Κάνει μια πολύ καλή δουλειά με ταξινόμηση, παλινδρόμηση, ομαδοποίηση και φιλτράρισμα. Δεδομένου ότι αποτελεί μέρος του Spark, έχει μεγάλη πρόσβαση σε βάσεις δεδομένων, ροές και άλλες πηγές δεδομένων. Από την άλλη πλευρά, το Spark MLlib δεν είναι πραγματικά έτοιμο να μοντελοποιήσει και να εκπαιδεύσει βαθιά νευρωνικά δίκτυα με τον ίδιο τρόπο όπως τα TensorFlow, PyTorch, MXNet και Keras.

Κόστος: Δωρεάν ανοιχτού κώδικα.

Πλατφόρμα: Το Spark λειτουργεί τόσο σε συστήματα Windows όσο και σε Unix (π.χ. Linux, MacOS), με Java 7 ή μεταγενέστερη έκδοση, Python 2.6 / 3.4 ή μεταγενέστερη έκδοση και R 3.1 ή μεταγενέστερη έκδοση. Για το Scala API, το Spark 2.0.1 χρησιμοποιεί το Scala 2.11. Το Spark απαιτεί Hadoop / HDFS.

Διαβάστε την κριτική μου για το Spark MLlib.