Die besten Bibliotheken für maschinelles Lernen und tiefes Lernen

Wenn Sie ein neues Projekt für maschinelles Lernen oder Deep Learning starten, sind Sie möglicherweise verwirrt darüber, welches Framework Sie auswählen sollen. Wie wir diskutieren werden, gibt es für beide Arten von Projekten mehrere gute Optionen.

Es gibt einen Unterschied zwischen einem Rahmen für maschinelles Lernen und einem Rahmen für tiefes Lernen. Im Wesentlichen umfasst ein Framework für maschinelles Lernen eine Vielzahl von Lernmethoden zur Klassifizierung, Regression, Clusterbildung, Erkennung von Anomalien und Datenaufbereitung und kann neuronale Netzwerkmethoden umfassen oder nicht.

Ein Deep Learning- oder Deep Neural Network Framework deckt eine Vielzahl von Topologien neuronaler Netzwerke mit vielen verborgenen Schichten ab. Keras, MXNet, PyTorch und TensorFlow sind Deep-Learning-Frameworks. Scikit-learn und Spark MLlib sind Frameworks für maschinelles Lernen. (Klicken Sie auf einen der vorherigen Links, um meine eigenständige Bewertung des Produkts zu lesen.)

Im Allgemeinen laufen tiefe neuronale Netzwerkberechnungen auf einer GPU (insbesondere einer Nvidia CUDA-Allzweck-GPU), einer TPU oder einem FPGA viel schneller als auf einer CPU. Im Allgemeinen profitieren einfachere Methoden des maschinellen Lernens nicht von einer GPU.

Während Sie können tiefe neuronale Netze auf einer oder mehreren CPUs trainieren, neigt die Ausbildung , langsam zu sein, und durch langsame spreche ich nicht über Sekunden oder Minuten. Je mehr Neuronen und Schichten trainiert werden müssen und je mehr Daten für das Training verfügbar sind, desto länger dauert es. Als das Google Brain-Team 2016 seine Sprachübersetzungsmodelle für die neue Version von Google Translate trainierte, führten sie ihre Schulungen jeweils eine Woche lang auf mehreren GPUs durch. Ohne GPUs hätte jedes Modell-Trainingsexperiment Monate gedauert.

Seitdem hat die Intel Math Kernel Library (MKL) es ermöglicht, einige neuronale Netze auf CPUs in angemessener Zeit zu trainieren . Inzwischen sind GPUs, TPUs und FPGAs noch schneller geworden.

Die Trainingsgeschwindigkeit aller Deep-Learning-Pakete, die auf denselben GPUs ausgeführt werden, ist nahezu identisch. Das liegt daran, dass die inneren Trainingsschleifen die meiste Zeit im Nvidia CuDNN-Paket verbringen.

Abgesehen von der Trainingsgeschwindigkeit hat jede der Deep-Learning-Bibliotheken ihre eigenen Vor- und Nachteile, und das gilt auch für Scikit-learn und Spark MLlib. Lass uns eintauchen.

Keras

Keras ist eine High-Level-Front-End-Spezifikation und -Implementierung zum Erstellen neuronaler Netzwerkmodelle, die mit Unterstützung für drei Back-End-Deep-Learning-Frameworks geliefert wird: TensorFlow, CNTK und Theano. Amazon arbeitet derzeit an der Entwicklung eines MXNet-Backends für Keras. Es ist auch möglich, PlaidML (ein unabhängiges Projekt) als Back-End für Keras zu verwenden, um die OpenCL-Unterstützung von PlaidML für alle GPUs zu nutzen.

TensorFlow ist das Standard-Back-End für Keras und das für viele Anwendungsfälle empfohlene GPU-Beschleunigung auf Nvidia-Hardware über CUDA und cuDNN sowie für die TPU-Beschleunigung in Google Cloud. TensorFlow enthält auch eine interne tf.kerasKlasse, die von einer externen Keras-Installation getrennt ist.

Keras verfügt über eine Umgebung auf hoher Ebene, die das Hinzufügen einer Ebene zu einem neuronalen Netzwerk so einfach wie eine Codezeile in seinem sequentiellen Modell macht und jeweils nur einen Funktionsaufruf zum Kompilieren und Trainieren eines Modells erfordert. Mit Keras können Sie mit dem Modell oder der funktionalen API auf einer niedrigeren Ebene arbeiten, wenn Sie möchten.

Mit Keras können Sie durch Unterklassen noch weiter auf die Python-Codierungsebene herunterfallen keras.Model, bevorzugen jedoch nach Möglichkeit die funktionale API. Keras verfügt auch über eine scikit-learnAPI, sodass Sie die Scikit-Learn-Rastersuche verwenden können, um eine Hyperparameteroptimierung in Keras-Modellen durchzuführen. 

Kosten: Kostenloses Open Source. 

Plattform: Linux, MacOS, Windows oder Raspbian; TensorFlow-, Theano- oder CNTK-Backend. 

Lesen Sie meine Bewertung von Keras. 

MXNet

MXNet hat sich seit dem Wechsel unter dem Dach der Apache Software Foundation Anfang 2017 erheblich weiterentwickelt und verbessert. Während an Keras mit einem MXNet-Backend gearbeitet wurde, ist eine andere Benutzeroberfläche auf hoher Ebene viel wichtiger geworden: Gluon. Vor der Integration von Gluon konnten Sie entweder einfachen imperativen Code oder schnellen symbolischen Code in MXNet schreiben, aber nicht beide gleichzeitig. Mit Gluon können Sie das Beste aus beiden Welten auf eine Weise kombinieren, die sowohl mit Keras als auch mit PyTorch konkurriert.

Die für Gluon beanspruchten Vorteile umfassen:

  • Einfacher, leicht verständlicher Code: Gluon bietet einen vollständigen Satz von Plug-and-Play-Bausteinen für neuronale Netzwerke, einschließlich vordefinierter Ebenen, Optimierer und Initialisierer.
  • Flexible, zwingende Struktur: Gluon erfordert keine starre Definition des neuronalen Netzwerkmodells, sondern bringt den Trainingsalgorithmus und das Modell näher zusammen, um Flexibilität im Entwicklungsprozess zu gewährleisten.
  • Dynamische Diagramme: Mit Gluon können Entwickler dynamische neuronale Netzwerkmodelle definieren, dh sie können im laufenden Betrieb mit jeder Struktur und unter Verwendung eines beliebigen nativen Steuerungsflusses von Python erstellt werden.
  • Hohe Leistung: Gluon bietet alle oben genannten Vorteile, ohne die Trainingsgeschwindigkeit des zugrunde liegenden Motors zu beeinträchtigen.

Diese vier Vorteile zusammen mit einer erheblich erweiterten Sammlung von Modellbeispielen bringen Gluon / MXNet in eine grobe Parität mit Keras / TensorFlow und PyTorch, um die Entwicklung und die Trainingsgeschwindigkeit zu vereinfachen. Sie können Codebeispiele für diese auf der Hauptseite von Gluon sehen und auf der Übersichtsseite für die Gluon-API wiederholen.

Die Gluon-API enthält Funktionen für neuronale Netzwerkschichten, wiederkehrende neuronale Netzwerke, Verlustfunktionen, Datensatzmethoden und Visionsdatensätze, einen Modellzoo und eine Reihe von experimentellen experimentellen neuronalen Netzwerkmethoden. Sie können frei kombinieren Gluon mit Standard MxNet und NumPy Module, zum Beispiel module,autograd und ndarraywie auch mit Python Steuerung fließt.

Gluon bietet eine gute Auswahl an Ebenen zum Erstellen von Modellen, einschließlich Basisebenen (dicht, Dropout usw.), Faltungsebenen, Poolebenen und Aktivierungsschichten. Jedes davon ist ein einzeiliger Anruf. Diese können unter anderem innerhalb von Netzwerkcontainern wie z gluon.nn.Sequential().

Kosten: Kostenloses Open Source. 

Plattform: Linux, MacOS, Windows, Docker, Raspbian und Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ und Clojure (experimentell). MXNet ist im AWS Deep Learning AMI enthalten.

Lesen Sie meine Bewertung zu MXNet. 

PyTorch

PyTorch baut auf der alten Fackel und dem neuen Caffe2-Framework auf. Wie Sie dem Namen entnehmen können, verwendet PyTorch Python als Skriptsprache und ein weiterentwickeltes Torch C / CUDA-Backend. Die Produktionsfunktionen von Caffe2 werden in das PyTorch-Projekt integriert.

PyTorch wird als "Tensoren und dynamische neuronale Netze in Python mit starker GPU-Beschleunigung" bezeichnet. Was bedeutet das?

Tensoren sind ein mathematisches Konstrukt, das in der Physik und Technik häufig verwendet wird. Ein Tensor von Rang zwei ist eine spezielle Art von Matrix; Wenn man das innere Produkt eines Vektors mit dem Tensor nimmt, erhält man einen anderen Vektor mit einer neuen Größe und einer neuen Richtung. TensorFlow hat seinen Namen von der Art und Weise, wie Tensoren (von Synapsengewichten) um sein Netzwerkmodell fließen. NumPy verwendet auch Tensoren, nennt sie aber eine ndarray.

Die GPU-Beschleunigung ist für die meisten modernen Deep-Neural-Network-Frameworks eine Selbstverständlichkeit. Ein dynamisches neuronales Netzwerk kann sich von Iteration zu Iteration ändern. So kann beispielsweise ein PyTorch-Modell während des Trainings verborgene Ebenen hinzufügen und entfernen, um seine Genauigkeit und Allgemeinheit zu verbessern. PyTorch erstellt das Diagramm bei jedem Iterationsschritt im laufenden Betrieb neu. Im Gegensatz dazu erstellt TensorFlow standardmäßig ein einzelnes Datenflussdiagramm, optimiert den Diagrammcode für die Leistung und trainiert dann das Modell.

Während der eifrige Ausführungsmodus in TensorFlow eine relativ neue Option ist, wird PyTorch nur so ausgeführt: API-Aufrufe werden beim Aufrufen ausgeführt, anstatt einem Diagramm hinzugefügt zu werden, das später ausgeführt werden soll. Das mag so aussehen, als wäre es weniger rechnerisch effizient, aber PyTorch wurde so entwickelt, dass es so funktioniert, und es ist kein Problem, wenn es um Training oder Vorhersagegeschwindigkeit geht.

PyTorch integriert Beschleunigungsbibliotheken wie Intel MKL und Nvidia cuDNN sowie NCCL (Nvidia Collective Communications Library), um die Geschwindigkeit zu maximieren. Die Backends des Kern-CPU- und GPU-Tensors und des neuronalen Netzwerks - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) und THCUNN (Torch CUDA Neural Network) - werden als unabhängige Bibliotheken mit einer C99-API geschrieben. Gleichzeitig ist PyTorch keine Python-Bindung in ein monolithisches C ++ - Framework. Es soll tief in Python integriert werden und die Verwendung anderer Python-Bibliotheken ermöglichen.

Kosten: Kostenloses Open Source. 

Plattform: Linux, MacOS, Windows; CPUs und Nvidia-GPUs. 

Lesen Sie meine Rezension zu PyTorch. 

Scikit-lernen

Das Scikit-Learn-Python-Framework bietet eine große Auswahl an robusten Algorithmen für maschinelles Lernen, jedoch kein Deep Learning. Wenn Sie ein Python-Fan sind, ist Scikit-learn möglicherweise die beste Option für Sie unter den einfachen Bibliotheken für maschinelles Lernen.

Scikit-learn ist eine robuste und bewährte Bibliothek für maschinelles Lernen für Python mit einer großen Auswahl an etablierten Algorithmen und integrierten Grafiken. Es ist relativ einfach zu installieren, zu erlernen und zu verwenden und enthält gute Beispiele und Tutorials.

Auf der anderen Seite deckt Scikit-learn kein tiefes Lernen oder Verstärkungslernen ab, es fehlen grafische Modelle und Sequenzvorhersagen und es kann nicht wirklich aus anderen Sprachen als Python verwendet werden. PyPy, der Python-Just-in-Time-Compiler oder GPUs werden nicht unterstützt. Abgesehen von seinem kleinen Vorstoß in neuronale Netze hat es jedoch keine wirklichen Geschwindigkeitsprobleme. Es verwendet Cython (den Python-zu-C-Compiler) für Funktionen, die schnell sein müssen, wie z. B. innere Schleifen.

Scikit-learn bietet eine gute Auswahl an Algorithmen für Klassifizierung, Regression, Clustering, Dimensionsreduktion, Modellauswahl und Vorverarbeitung. Es verfügt über eine gute Dokumentation und Beispiele für all diese Aufgaben, es fehlt jedoch jede Art von geführtem Workflow zur Ausführung dieser Aufgaben.

Scikit-learn erhält Bestnoten für eine einfache Entwicklung, vor allem, weil die Algorithmen alle wie dokumentiert funktionieren, die APIs konsistent und gut gestaltet sind und es nur wenige „Impedanzfehlanpassungen“ zwischen Datenstrukturen gibt. Es ist eine Freude, mit einer Bibliothek zusammenzuarbeiten, deren Funktionen gründlich ausgearbeitet und deren Fehler gründlich beseitigt wurden.

Auf der anderen Seite deckt die Bibliothek kein vertieftes Lernen oder verstärkendes Lernen ab, wodurch die aktuellen schwierigen, aber wichtigen Probleme wie die genaue Bildklassifizierung und die zuverlässige Analyse und Übersetzung von Sprachen in Echtzeit weggelassen werden. Wenn Sie an tiefem Lernen interessiert sind, sollten Sie sich natürlich anderswo umsehen.

Dennoch gibt es viele Probleme - angefangen beim Aufbau einer Vorhersagefunktion, die verschiedene Beobachtungen verknüpft, über das Klassifizieren von Beobachtungen bis hin zum Erlernen der Struktur eines unbeschrifteten Datensatzes -, die sich für einfaches altes maschinelles Lernen eignen, ohne Dutzende von Neuronenschichten zu benötigen, und für diese Bereiche Scikit-Lernen ist in der Tat sehr gut.

Kosten: Kostenloses Open Source. 

Plattform: Benötigt Python, NumPy, SciPy und Matplotlib. Releases sind für MacOS, Linux und Windows verfügbar.

Lesen Sie meine Rezension zu Scikit-learn. 

Spark MLlib

Spark MLlib, die Open-Source-Bibliothek für maschinelles Lernen für Apache Spark, bietet gängige Algorithmen für maschinelles Lernen wie Klassifizierung, Regression, Clustering und kollaborative Filterung (jedoch keine tiefen neuronalen Netze). Es enthält auch Tools zum Extrahieren, Transformieren, Reduzieren der Dimensionalität und Auswählen von Features. Werkzeuge zum Aufbau, zur Bewertung und zur Optimierung von Pipelines für maschinelles Lernen; und Dienstprogramme zum Speichern und Laden von Algorithmen, Modellen und Pipelines, zur Datenverarbeitung sowie zur Erstellung linearer Algebra und Statistiken.

Spark MLlib ist in Scala geschrieben und verwendet das lineare Algebra-Paket Breeze. Breeze ist für eine optimierte numerische Verarbeitung auf netlib-java angewiesen, obwohl dies in der Open Source-Distribution eine optimierte Nutzung der CPU bedeutet. Databricks bietet angepasste Spark-Cluster mit GPUs an, mit denen Sie möglicherweise eine weitere 10-fache Geschwindigkeitsverbesserung erzielen können, wenn Sie komplexe Modelle für maschinelles Lernen mit Big Data trainieren.

Spark MLlib implementiert eine Vielzahl gängiger Algorithmen und Modelle für die Klassifizierung und Regression, bis ein Anfänger verwirrt wird. Ein Experte wird jedoch wahrscheinlich eine gute Modellauswahl für die zu analysierenden Daten finden. Zu dieser Vielzahl von Modellen fügt Spark 2.x das wichtige Merkmal der Hyperparameter-Optimierung hinzu, das auch als Modellauswahl bezeichnet wird. Durch die Optimierung von Hyperparametern kann der Analyst ein Parameterraster, einen Schätzer und einen Bewerter einrichten und die Kreuzvalidierungsmethode (zeitaufwändig, aber genau) oder die Zugvalidierungs-Aufteilungsmethode (schneller, aber weniger genau) das beste Modell für die Methode finden Daten.

Spark MLlib verfügt über vollständige APIs für Scala und Java, meist vollständige APIs für Python und skizzenhafte Teil-APIs für R. Sie können ein gutes Gefühl für die Abdeckung erhalten, indem Sie die Beispiele zählen: 54 Java- und 60 Scala-Beispiele für maschinelles Lernen, 52 Python-Maschinen Lernbeispiele und nur fünf R-Beispiele. Nach meiner Erfahrung ist es am einfachsten, mit Spark MLlib mit Jupyter-Notebooks zu arbeiten, aber Sie können es sicherlich in einer Konsole ausführen, wenn Sie die ausführlichen Spark-Statusmeldungen zähmen.

Spark MLlib bietet so ziemlich alles, was Sie sich für grundlegendes maschinelles Lernen, Funktionsauswahl, Pipelines und Persistenz wünschen. Es macht einen ziemlich guten Job mit Klassifizierung, Regression, Clustering und Filterung. Da es Teil von Spark ist, hat es einen hervorragenden Zugriff auf Datenbanken, Streams und andere Datenquellen. Andererseits ist Spark MLlib nicht wirklich darauf ausgelegt, tiefe neuronale Netze auf die gleiche Weise wie TensorFlow, PyTorch, MXNet und Keras zu modellieren und zu trainieren.

Kosten: Kostenloses Open Source.

Plattform: Spark läuft sowohl auf Windows- als auch auf Unix-ähnlichen Systemen (z. B. Linux, MacOS) mit Java 7 oder höher, Python 2.6 / 3.4 oder höher und R 3.1 oder höher. Für die Scala-API verwendet Spark 2.0.1 Scala 2.11. Spark erfordert Hadoop / HDFS.

Lesen Sie meine Rezension zu Spark MLlib.