Was ist Deep Learning?
Deep Learning ist ein Oberbegriff für Techniken des maschinellen Lernens, die „tiefe“ neuronale Netze verwenden. Deep Learning ist heute einer der sichtbarsten Bereiche des maschinellen Lernens, da es Erfolge auf Gebieten wie maschinellem Sehen, linguistische Datenverarbeitung und bei der Anwendung auf vertiefendes Lernen sowie in Szenarios wie Spielen, Entscheidungsfindung und Simulation vorweisen kann.
Ein entscheidendes Element für den Erfolg von Deep Learning ist die Verfügbarkeit von Daten, Compute, Softwareframeworks und Runtimes, die die Erstellung neuronaler Netzwerkmodelle und deren Ausführung zum Zweck des Rückschließens erleichtern. Beispiele für solche Frameworks sind TensorFlow, (Py)Torch und ONNX.
ML.NET bietet Zugriff auf einige dieser Frameworks. Daher können Benutzer von ML.NET Deep Learning-Modelle nutzen, ohne von Grund auf neu beginnen zu müssen.
Deep Learning im Vergleich zu maschinellem Lernen
Deep Learning basiert auf neuronalen Netzalgorithmen. Dies steht im Gegensatz zu herkömmlichen oder klassischen Techniken des maschinellen Lernens, die eine größere Vielfalt von Algorithmen wie generalisierte lineare Modelle, Entscheidungsstrukturen oder Support Vector Machines (SVM) verwenden. Die unmittelbarste, praktischste Auswirkung dieses Unterschieds besteht darin, dass Deep Learning-Methoden für bestimmte Daten besser geeignet sind. In einigen Fällen scheinen klassische Techniken des maschinellen Lernens wie Strukturen mit Gradientenverstärkung (XGBoost, LightGBM und CatBoost) einen Vorteil bei Tabellendaten zu haben. Bei weniger strukturierten Daten wie Text und Bildern sind neuronale Netze tendenziell besser. Der beste Ansatz besteht immer darin, mit Ihrer bestimmten Datenquelle und Ihrem Anwendungsfall zu experimentieren, um selbst zu bestimmen, welche Techniken für Ihr Problem am besten geeignet sind.
Für klassische Machine Learning-Aufgaben vereinfacht ML.NET diesen Experimentierprozess durch automatisiertes maschinelles Lernen (AutoML). Weitere Informationen zu AutoML finden Sie im Artikel Was ist automatisiertes maschinelles Lernen (AutoML)?.
Architekturen von neuronalen Netzwerken
Eines der wichtigsten Unterscheidungsmerkmale von Deep Learning ist die Verwendung künstlicher neuronaler Netzalgorithmen. Auf einer allgemeinen Ebene können Sie sich neuronale Netze als eine Konfiguration von „Verarbeitungseinheiten“ vorstellen, bei der die Ausgabe jeder Einheit die Eingabe einer anderen darstellt. Jede dieser Einheiten kann eine oder mehrere Eingaben annehmen und erstellt im Wesentlichen eine gewichtete Summe ihrer Eingaben, wendet einen Offset (oder „Trend“) und dann eine nichtlineare Transformationsfunktion (als „Aktivierung“ bezeichnet) an. Verschiedene Anordnungen dieser Komponenten wurden verwendet, um Entscheidungsgrenzen bei Klassifizierung, Regressionsfunktionen und anderen Strukturen zu beschreiben, die für Aufgaben des maschinellen Lernens entscheidend sind.
In den letzten zehn Jahren hat die Anzahl der Fälle, Anwendungen und Techniken von Deep Learning zugenommen. Dieser Anstieg wird teilweise durch eine zunehmende Vielfalt von Vorgängen verursacht, die in neuronale Netze integriert werden können, eine umfangreichere Reihe von Anordnungen, in denen diese Vorgänge konfiguriert werden können, und eine verbesserte Berechnungsunterstützung für diese Verbesserungen. Im Allgemeinen können Architekturen neuronaler Netzwerke in die folgenden Kategorien unterteilt werden:
- Vorwärts gerichtetes neuronales Netzwerk
- Faltungsbasiertes neuronales Netzwerk (Convolutional Neural Network)
- Rekurrentes neuronales Netzwerk
- Generatives opponierendes Netzwerk (Generative Adversarial Network)
- Transformatoren
Weitere Details finden Sie im Leitfaden zu künstlichen neuronalen Netzwerken.
Wofür kann ich Deep Learning verwenden?
Deep Learning-Architekturen haben eine gute Leistung bei Aufgaben mit „unstrukturierten Daten“ wie Bildern, Audio und Freiformtext gezeigt. Daher wurde Deep Learning verwendet, um Probleme wie die folgenden zu lösen:
- Bildklassifizierung
- Audioklassifizierung
- Sprachübersetzung
- Textgenerierung
- Textklassifizierung
Deep Learning in ML.NET
Das von Grund auf neue Trainieren eines Deep-Learning-Modells erfordert das Festlegen mehrerer Parameter, zahlreiche bezeichnete Trainingsdaten und eine große Menge an Computeressourcen (Hunderte von GPU-Stunden). ML.NET ermöglicht es Ihnen, diesen Prozess mithilfe von vortrainierten Modellen und Techniken zum Wissenstransfer wie Lerntransfer und Optimierung abzukürzen.
ML.NET ermöglicht Ihnen darüber hinaus das Importieren von Modellen, die in anderen Frameworks trainiert wurden, und ihre Nutzung in Ihren .NET-Anwendungen.
Je nach Szenario können Sie sowohl die lokale GPU als auch Azure GPU-Computeressourcen verwenden, um Deep Learning-Modelle zu trainieren und zu nutzen.
Trainieren benutzerdefinierter Modelle
ML.NET stellt APIs bereit, um benutzerdefinierte Deep Learning-Modelle zu trainieren und sie zu verwenden, um innerhalb Ihrer .NET-Anwendung Vorhersagen zu treffen.
Diese APIs werden von TorchSharp und TensorFlow.NET unterstützt.
Bildklassifizierung
In ML.NET können Sie den ImageClassification-Satz von APIs verwenden, um benutzerdefinierte Modelle für die Bildklassifizierung zu trainieren.
Eine Trainingspipeline für Bildklassifizierung in ML.NET kann wie folgt aussehen:
//Append ImageClassification trainer to your pipeline containing any preprocessing transforms
pipeline
.Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");
// Train your model
var model = pipeline.Fit(trainingData);
// Use your model for inferencing
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
Informationen zum Trainieren benutzerdefinierter Bildklassifizierungsmodelle in ML.NET finden Sie unter Trainieren eines Bildklassifizierungsmodells in Azure über Model Builder.
Objekterkennung
ML.NET ermöglicht Ihnen das Trainieren benutzerdefinierter Modelle zur Objekterkennung in Model Builder mithilfe von Azure Machine Learning. Sie benötigen lediglich ein bezeichnetes Dataset, das Informationen zu Begrenzungsrahmen und den Kategorien enthält, denen die Objekte in den Begrenzungsrahmen angehören.
Das Ergebnis des Trainingsprozesses ist ein ONNX-Modell, das dann mit der ApplyOnnxModel-Transformation für das Treffen von Vorhersagen verwendet werden kann.
Derzeit gibt es keine lokale Unterstützung für die Objekterkennung in ML.NET.
Informationen zum Trainieren benutzerdefinierter Objekterkennungsmodelle mit ML.NET finden Sie im Tutorial: Erkennen von Stoppschildern in Bildern mit Model Builder.
Textklassifizierung
Das Klassifizieren von Freiformtext, ob es sich nun um Kundenbewertungen oder Geschäftsnotizen handelt, ist ein wichtiger Bestandteil vieler Prozesse.
In ML.NET können Sie den TextClassificationTrainer-Satz von APIs verwenden, um benutzerdefinierte Modelle für die Textklassifizierung zu trainieren. Das Verfahren zum Trainieren benutzerdefinierter Textklassifizierungsmodelle in ML.NET wird als Optimierung bezeichnet. Dank Optimierung können Sie ein vortrainiertes Modell verwenden und die Schichten, die für Ihre Domäne oder Ihr Problem spezifisch sind, mithilfe Ihrer eigenen Daten erneut trainieren. Dies bietet Ihnen den Vorteil eines Modells, das besser auf die Lösung Ihres Problems zugeschnitten ist, ohne das gesamte Modell von Grund auf neu trainieren zu müssen. Das vortrainierte Modell, das von der Textklassifizierungs-API verwendet wird, ist eine TorchSharp-Implementierung von NAS-BERT.
Eine Trainingspipeline für Textklassifizierung in ML.NET kann wie folgt aussehen:
// Define training pipeline using TextClassification trainer
var pipeline =
mlContext.Transforms.Conversion.MapValueToKey("Label","Sentiment")
.Append(mlContext.MulticlassClassification.Trainers.TextClassification(sentence1ColumnName: "Text"))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
// Train your model
var model = pipeline.Fit(trainingData);
// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
Informationen zum Trainieren von Textklassifizierungsmodellen mit ML.NET finden Sie im Tutorial: Analysieren der Stimmung von Websitekommentaren in einer Webanwendung mit dem Model Builder von ML.NET Model.
Ähnlichkeit von Sätzen
Aufgaben wie die semantische Suche basieren auf der Bestimmung, wie ähnlich zwei Sätze oder Textpassagen einander sind.
ML.NET stellt den SentenceSimilarityTrainer-Satz von APIs zur Verfügung, die das gleiche zugrunde liegende Modell und die gleichen Optimierungstechniken wie der TextClassificationTrainer verwenden. Anstatt jedoch eine Kategorie als Ausgabe zu erzeugen, wird ein numerischer Wert erzeugt, der angibt, wie ähnlich zwei Passagen sind.
Eine Trainings- und Rückschlusspipeline für Satzähnlichkeit könnte in ML.NET wie folgt aussehen:
// Define your pipeline
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");
// Train your model
var model = pipeline.Fit(trainingData);
// Use the model to make predictions and extract their similarity values
var score = model.Transform(newData).GetColumn<float>("Score");
Informationen zu den ersten Schritten mit Satzähnlichkeit finden Sie in den Beispielen im dotnet/machinelearning-samples-Repository.
Nutzen von vortrainierten Modellen
ML.NET bietet APIs zum Nutzen von Modellen in anderen Formaten wie TensorFlow und ONNX und zu deren Verwendung zum Treffen von Vorhersagen in Ihrer .NET-Anwendung.
Diese APIs werden von TensorFlow.NET und der ONNX-Runtime unterstützt.
TensorFlow
TensorFlow ist ein Deep-Learning-Framework mit einem umfangreichen Ökosystem und einer Vielzahl von vortrainierten Modellen, die auf dem TensorFlow-Hub verfügbar sind.
Mit ML.NET können Sie diese vortrainierten TensorFlow-Modelle für das Rückschließen in Ihren .NET-Anwendungen verwenden.
Eine Rückschlusspipeline mit einem vortrainierten TensorFlow-Modell kann wie folgt aussehen:
// Load TensorFlow model
TensorFlowModel tensorFlowModel = mlContext.Model.LoadTensorFlowModel(_modelPath);
//Append ScoreTensorFlowModel transform to your pipeline containing any preprocessing transforms
pipeline.Append(tensorFlowModel.ScoreTensorFlowModel(outputColumnName: "Prediction/Softmax", inputColumnName:"Features"))
// Create ML.NET model from pipeline
ITransformer model = pipeline.Fit(dataView);
var predictions = model.Transform(dataView).GetColumn<float>("Prediction/Softmax");
Informationen zu den ersten Schritten bei der Verwendung von vortrainierten TensorFlow-Modellen mit ML.NET finden Sie im Tutorial: movie reviews sentiment analysis using a pre-trained TensorFlow model in ML.NET (Stimmungsanalyse von Filmbewertungen mithilfe eines vortrainierten TensorFlow-Modells in ML.NET).
ONNX
Open Neural Network Exchange (ONNX) ist ein Open-Source-Format, das dafür entwickelt wurde, die Interoperabilität zwischen Machine-Learning- und Deep-Learning-Frameworks zu ermöglichen. Das bedeutet, dass Sie ein Modell in einem der vielen gängigen Machine-Learning-Frameworks wie PyTorch trainieren, es in das ONNX-Format konvertieren und das ONNX-Modell in einem anderen Framework wie ML.NET verwenden können.
Im ONNX-Modellrepository sind mehrere vortrainierte ONNX-Modelle gehostet, die Sie für das Rückschließen bei einer Vielzahl von Aufgaben verwenden können.
Dank ML.NET können Sie diese vortrainierten ONNX-Modelle für das Rückschließen in Ihren .NET-Anwendungen verwenden.
Eine Rückschlusspipeline mit einem vortrainierten ONNX-Modell kann wie folgt aussehen:
// Append ApplyOnnxModel transform to pipeline containing any preprocessing transforms
pipeline.Append((modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput })
// Create ML.NET model from pipeline
var model = pipeline.Fit(data);
// Use the model to make predictions
var predictions = pipeline.Fit(data).GetColumn<float[]>(TinyYoloModelSettings.ModelOutput);
Informationen zu den ersten Schritten bei der Verwendung von vortrainierten ONNX-Modellen mit ML.NET finden Sie im Tutorial Objekterkennung mithilfe von ONNX in ML.NET.