Delen via


Wat is Deep Learning?

Deep Learning is een overkoepelende term voor machine learning-technieken die gebruikmaken van 'deep' neurale netwerken. Vandaag de dag is Deep Learning een van de meest zichtbare gebieden van machine learning vanwege het succes ervan op gebieden zoals computer vision, verwerking van natuurlijke taal en, wanneer deze worden toegepast op versterkingsleer, scenario's zoals spelen, besluitvorming en simulatie.

Een cruciaal element voor het succes van Deep Learning is de beschikbaarheid van gegevens, berekeningen, softwareframeworks en runtimes die het maken van neurale netwerkmodellen en hun uitvoering voor deductie mogelijk maken. Voorbeelden van dergelijke frameworks zijn TensorFlow, (Py)Torch en ONNX.

ML.NET biedt toegang tot een aantal van deze frameworks. Als gevolg hiervan kunnen ML.NET gebruikers profiteren van deep learning-modellen zonder helemaal opnieuw te hoeven beginnen.

Deep Learning versus machine learning

Deep Learning is afhankelijk van neurale netwerkalgoritmen. Dit is in tegenstelling tot traditionele of klassieke machine learning-technieken, die een breder scala aan algoritmen gebruiken, zoals gegeneraliseerde lineaire modellen, beslissingsstructuren of Support Vector Machines (SVM). De meest onmiddellijke praktische implicatie van dit verschil is dat deep learning-methoden beter geschikt zijn voor bepaalde soorten gegevens. In sommige gevallen lijken klassieke machine learning-technieken, zoals gradient-boosted bomen (XGBoost, LightGBM en CatBoost), een voordeel te hebben voor tabeldata. Voor minder gestructureerde gegevens, zoals tekst en afbeeldingen, presteren neurale netwerken meestal beter. De beste aanpak is altijd om te experimenteren met uw specifieke gegevensbron en use-case om te bepalen welke technieken het beste werken voor uw probleem.

Voor klassieke machine learning-taken vereenvoudigt ML.NET dit experimenteerproces via Geautomatiseerde Machine Learning (AutoML). Zie Wat is Geautomatiseerde Machine Learning (AutoML)?.

Neurale netwerkarchitecturen

Een van de belangrijkste differentiërende kenmerken van Deep Learning is het gebruik van kunstmatige neurale netwerkalgoritmen. Op hoog niveau kunt u neurale netwerken beschouwen als een configuratie van 'verwerkingseenheden', waarbij de uitvoer van elke eenheid de invoer van een andere vormt. Elk van deze eenheden kan één of meerdere ingangen nemen en voert in wezen een gewogen som van zijn invoer uit, past een offset (of 'bias') toe, gevolgd door een niet-lineaire transformatiefunctie ('activering'). Verschillende indelingen van deze onderdelen zijn gebruikt om beslissingsgrenzen in classificatie, regressiefuncties en andere structuren te beschrijven die centraal staan bij machine learning-taken.

diagram dat één laag in het neurale netwerk vertegenwoordigt

De afgelopen tien jaar is er een toename in gevallen, toepassingen en technieken van deep learning. Deze toename wordt deels aangestuurd door een toenemende verscheidenheid aan bewerkingen die kunnen worden opgenomen in neurale netwerken, een uitgebreidere set regelingen waarin deze bewerkingen kunnen worden geconfigureerd en verbeterde rekenkundige ondersteuning voor deze verbeteringen. Over het algemeen kunnen neurale netwerkarchitecturen worden gegroepeerd in de volgende categorieën:

  • Feed-forward neuraal netwerk
  • Convolutionele neurale netwerken
  • Terugkerend neuraal netwerk
  • Generatief vijandig netwerk
  • Transformers

Zie de handleiding kunstmatige neurale netwerkenvoor meer informatie.

Waarvoor kan ik Deep Learning gebruiken?

Deep Learning-architecturen hebben goede prestaties getoond in taken met ongestructureerde gegevens, zoals afbeeldingen, audio en vrije tekst. Als gevolg hiervan is deep learning gebruikt om problemen op te lossen, zoals:

  • Afbeeldingsclassificatie
  • Audioclassificatie
  • Vertaling
  • Tekstgeneratie
  • Tekstclassificatie

Diep leren in ML.NET

Voor het trainen van een volledig nieuw deep learning-model moeten verschillende parameters, een grote hoeveelheid gelabelde trainingsgegevens en een grote hoeveelheid rekenresources (honderden GPU-uren) worden ingesteld. Met ML.NET kunt u dit proces snel doorlopen door gebruik te maken van voorgetrainde modellen en technieken voor kennisoverdracht, zoals transfer learning en fijnafstemming.

ML.NET kunt u ook modellen importeren die zijn getraind in andere frameworks en deze gebruiken in uw .NET-toepassingen.

Afhankelijk van het scenario kunt u lokale GPU en Azure GPU-rekenresources gebruiken om deep learning-modellen te trainen en te gebruiken.

Aangepaste modellen trainen

ML.NET biedt API's om aangepaste Deep Learning-modellen te trainen en deze te gebruiken om voorspellingen te doen in uw .NET-toepassing.

Deze API's worden mogelijk gemaakt door TorchSharp- en TensorFlow.NET.

Afbeeldingsclassificatie

In ML.NET kunt u de ImageClassification set API's gebruiken om aangepaste afbeeldingsclassificatiemodellen te trainen.

Een trainingspijplijn voor afbeeldingsclassificatie in ML.NET kan er als volgt uitzien:

//Append ImageClassification trainer to the pipeline containing any preprocessing transforms.
pipeline
    .Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");

// Train the model.
var model = pipeline.Fit(trainingData);

// Use the model for inferencing.
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");

Zie Een afbeeldingsclassificatiemodel trainen in Azure met behulp van Model Builderom aangepaste afbeeldingsclassificatiemodellen in ML.NET te trainen.

Objectdetectie

Met ML.NET kunt u aangepaste objectdetectiemodellen trainen in Model Builder met behulp van Azure Machine Learning. U hebt alleen een gelabelde dataset nodig die informatie over begrenzingsvakken bevat en de categorieën waartoe de objecten in de begrenzingsvakken behoren.

Het resultaat van het trainingsproces is een ONNX-model dat vervolgens kan worden gebruikt met de ApplyOnnxModel transformatie om voorspellingen te doen.

Op dit moment is er geen lokale ondersteuning voor objectdetectie in ML.NET.

Als u aangepaste objectdetectiemodellen wilt trainen met ML.NET, raadpleegt u Stopbord in afbeeldingen detecteren met de zelfstudie van Model Builder.

Tekstclassificatie

Het classificeren van vrije tekst, of dat nu klantbeoordelingen of zakelijke memo's zijn, is een belangrijk onderdeel van veel processen.

In ML.NET kunt u de TextClassificationTrainer set API's gebruiken om aangepaste modellen voor tekstclassificatie te trainen. De techniek die wordt gebruikt voor het trainen van aangepaste modellen voor tekstclassificatie in ML.NET wordt ook wel verfijning genoemd. Met het afstemmen kunt u een vooraf getraind model gebruiken en de lagen die specifiek zijn voor uw domein of probleem opnieuw trainen met behulp van uw eigen gegevens. Dit geeft u het voordeel dat u een model hebt dat meer is afgestemd op het oplossen van uw probleem zonder dat u het hele model helemaal opnieuw hoeft te trainen. Het vooraf getrainde model dat wordt gebruikt door de Text Classification-API is een TorchSharp-implementatie van NAS-BERT.

Een trainingspijplijn voor tekstclassificatie in ML.NET kan er als volgt uitzien:

// 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 the model
var model = pipeline.Fit(trainingData);

// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");

Zie de handleiding Sentiment van websiteopmerkingen in een webtoepassing analyseren met ML.NET Model Builder om te beginnen met het trainen van modellen voor tekstclassificatie met ML.NET.

Gelijkenis van zin

Taken zoals semantisch zoeken zijn afhankelijk van het bepalen hoe vergelijkbaar twee zinnen of tekstfragmenten met elkaar zijn.

ML.NET biedt de SentenceSimilarityTrainer set API's die gebruikmaken van hetzelfde onderliggende model en afstemmingstechnieken als de TextClassificationTrainer. In plaats van een categorie als uitvoer te produceren, produceert het echter een numerieke waarde die aangeeft hoe vergelijkbaar twee passages zijn.

Een trainings- en deductiepijplijn voor overeenkomsten in zinnen in ML.NET kan er als volgt uitzien:

// Define the pipeline.
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");

// Train the 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");

Om aan de slag te gaan met zinovereenkomsten, zie de voorbeelden in de opslagplaats dotnet/machinelearning-samples.

Vooraf getrainde modellen gebruiken

ML.NET biedt API's om modellen te gebruiken in andere indelingen, zoals TensorFlow en ONNX, en deze te gebruiken om voorspellingen te doen in uw .NET-toepassing.

Deze API's worden mogelijk gemaakt door TensorFlow.NET en de ONNX Runtime-.

TensorFlow

TensorFlow is een deep learning-framework met een uitgebreid ecosysteem en een verscheidenheid aan vooraf getrainde modellen die beschikbaar zijn in de TensorFlow Hub.

Met ML.NET kunt u deze vooraf getrainde TensorFlow-modellen gebruiken en gebruiken voor deductie in uw .NET-toepassingen.

Een deductiepijplijn met behulp van een vooraf getraind TensorFlow-model kan er als volgt uitzien:

// 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");

Als u vooraf getrainde TensorFlow-modellen met ML.NET wilt gaan gebruiken, raadpleegt u de sentimentanalyse van filmrecensies met een vooraf getraind TensorFlow-model in de ML.NET handleiding.

ONNX

De Open Neural Network Exchange (ONNX) is een opensource-indeling die is ontworpen om interoperabiliteit mogelijk te maken tussen frameworks voor machine learning en deep learning. Dit betekent dat u een model kunt trainen in een van de vele populaire machine learning-frameworks zoals PyTorch, het kunt converteren naar ONNX-indeling en het ONNX-model in een ander framework kunt gebruiken, zoals ML.NET.

De ONNX-modelopslagplaats host verschillende vooraf getrainde ONNX-modellen die u kunt gebruiken voor deductie in een groot aantal taken.

Met ML.NET kunt u deze getrainde ONNX-modellen gebruiken voor inferentie in uw .NET-toepassingen.

Een deductiepijplijn met behulp van een vooraf getraind ONNX-model kan er als volgt uitzien:

// 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);

Om vooraf getrainde ONNX-modellen te gebruiken met ML.NET, raadpleegt u de handleiding Objectdetectie met behulp van ONNX in ML.NET.