Vad är djupinlärning?
Djupinlärning är en paraplyterm för maskininlärningstekniker som använder "djupa" neurala nätverk. Idag är djupinlärning ett av de mest synliga områdena inom maskininlärning på grund av dess framgång inom områden som visuellt innehåll, bearbetning av naturligt språk och – när det tillämpas på förstärkningsinlärning – scenarier som spel, beslutsfattande och simulering.
En viktig del i djupinlärningens framgång har varit tillgängligheten för data, beräkning, programvaruramverk och körningsmiljöer som underlättar skapandet av neurala nätverksmodeller och deras körning för slutsatsdragning. Exempel på sådana ramverk är TensorFlow, (Py)Torch och ONNX.
ML.NET ger åtkomst till vissa av dessa ramverk. Därför kan ML.NET användare dra nytta av djupinlärningsmodeller utan att behöva börja från början.
Djupinlärning kontra maskininlärning
Djupinlärning bygger på neurala nätverksalgoritmer. Detta står i kontrast till traditionella eller klassiska maskininlärningstekniker, som använder en bredare mängd olika algoritmer, till exempel generaliserade linjära modeller, beslutsträd eller SVM (Support Vector Machines). Den mest omedelbara, praktiska innebörden av den här skillnaden är att djupinlärningsmetoder kan vara bättre lämpade för vissa typer av data. I vissa fall verkar klassiska maskininlärningstekniker som gradientförstärkta träd (XGBoost, LightGBM och CatBoost) ha en fördel för tabelldata. För mindre strukturerade data som text och bilder tenderar neurala nätverk att prestera bättre. Det bästa sättet är alltid att experimentera med din specifika datakälla och användningsfall för att själv avgöra vilka tekniker som fungerar bäst för ditt problem.
För klassiska maskininlärningsuppgifter förenklar ML.NET den här experimenteringsprocessen via AutoML (Automated Machine Learning). Mer information om AutoML finns i Vad är Automatisk maskininlärning (AutoML)?.
Arkitekturer för neurala nätverk
En av de viktigaste särskiljande egenskaperna hos djupinlärning är användningen av artificiella neurala nätverksalgoritmer. På hög nivå kan du betrakta neurala nätverk som en konfiguration av "bearbetningsenheter" där utdata från varje enhet utgör indata från en annan. Var och en av dessa enheter kan ta en eller flera indata och utför i princip en viktad summa av sina indata, tillämpar en förskjutning (eller "bias") följt av en icke-linjär transformeringsfunktion (kallas "aktivering"). Olika arrangemang av dessa komponenter har använts för att beskriva beslutsgränser i klassificering, regressionsfunktioner och andra strukturer som är centrala för maskininlärningsuppgifter.
Under det senaste decenniet har antalet fall, program och tekniker för djupinlärning ökat. Den här ökningen drivs delvis av en ökande mängd åtgärder som kan införlivas i neurala nätverk, en rikare uppsättning arrangemang som dessa åtgärder kan konfigureras i och förbättrat beräkningsstöd för dessa förbättringar. I allmänhet kan neurala nätverksarkitekturer grupperas i följande kategorier:
- Framåtriktat neuralt nätverk
- Konvolutionellt neuralt nätverk
- Återkommande neurala nätverk
- Generativt adversarialt nätverk
- Transformatorer
För mer information, se guiden artificiella neurala nätverk.
Vad kan jag använda djupinlärning till?
Djupinlärningsarkitekturer har visat bra prestanda i uppgifter som involverar ostrukturerade data, till exempel bilder, ljud och text i fritt format. Därför har djupinlärning använts för att lösa problem som:
- Bildklassificering
- Ljudklassificering
- Översättning
- Textgenerering
- Textklassificering
Djupinlärning i ML.NET
Träning av en djupinlärningsmodell från grunden kräver att du anger flera parametrar, en stor mängd märkta träningsdata och en stor mängd beräkningsresurser (hundratals GPU-timmar). ML.NET gör att du kan förenkla den här processen genom att använda förtränade modeller och kunskapsöverföringstekniker, såsom överföringsinlärning och finjustering.
ML.NET kan du också importera modeller som tränats i andra ramverk och använda dem i dina .NET-program.
Beroende på scenariot kan du använda lokal GPU samt Azure GPU-beräkningsresurser för att träna och använda djupinlärningsmodeller.
Träna anpassade modeller
ML.NET tillhandahåller API:er för att träna anpassade djupinlärningsmodeller och använda dem för att göra förutsägelser i .NET-programmet.
Dessa API:er drivs av TorchSharp och TensorFlow.NET.
Bildklassificering
I ML.NET kan du använda ImageClassification uppsättning API:er för att träna anpassade bildklassificeringsmodeller.
En träningspipeline för bildklassificering i ML.NET kan se ut så här:
//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");
Information om hur du kommer igång med att träna anpassade bildklassificeringsmodeller i ML.NET finns i Träna en bildklassificeringsmodell i Azure med hjälp av Model Builder.
Objektigenkänning
ML.NET kan du träna anpassade objektidentifieringsmodeller i Model Builder med hjälp av Azure Machine Learning. Allt du behöver är en etiketterad datamängd som innehåller avgränsningsruteinformation och de kategorier som objekten i avgränsningsrutorna tillhör.
Resultatet av träningsprocessen är en ONNX-modell som sedan kan användas med ApplyOnnxModel transformering för att göra förutsägelser.
För närvarande finns det inget lokalt stöd för objektidentifiering i ML.NET.
Information om hur du tränar anpassade objektidentifieringsmodeller med ML.NET finns i självstudiekursen Identifiera stoppskyltar i bilder med Model Builder.
Textklassificering
Att klassificera text i fritt format, oavsett om det är kundrecensioner eller affärsmemo är en viktig del av många processer.
I ML.NET kan du använda TextClassificationTrainer uppsättning API:er för att träna anpassade textklassificeringsmodeller. Den teknik som används för att träna anpassade textklassificeringsmodeller i ML.NET kallas finjustering. Genom finjustering kan du ta en förtränad modell och anpassa lagren som är specifika för din domän eller ditt problem med hjälp av dina egna data. Detta ger dig fördelen med att ha en modell som är mer skräddarsydd för att lösa ditt problem utan att behöva gå igenom processen att träna hela modellen från grunden. Den förtränade modellen som används av API:et för textklassificering är en TorchSharp-implementering av NAS-BERT.
En pipeline för textklassificeringsträning i ML.NET kan se ut så här:
// 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");
Information om hur du kommer igång med att träna textklassificeringsmodeller med ML.NET finns i självstudiekursen Analysera attityd för webbplatskommentarer i ett webbprogram med hjälp av ML.NET Model Builder.
Meningslikhet
Uppgifter som semantisk sökning förlitar sig på bestämning av hur lika två meningar eller textavsnitt är för varandra.
ML.NET innehåller SentenceSimilarityTrainer uppsättning API:er som använder samma underliggande modell och finjusteringstekniker som TextClassificationTrainer. Men i stället för att skapa en kategori som utdata genererar den ett numeriskt värde som representerar hur lika två passager är.
En tränings- och slutsatsdragningspipeline för meningslikhet i ML.NET kan se ut så här:
// 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");
Information om hur du kommer igång med meningslikhet finns i exemplen i lagringsplatsen dotnet/machinelearning-samples.
Använd förtränade modeller
ML.NET tillhandahåller API:er för att använda modeller i andra format som TensorFlow och ONNX och använda dem för att göra förutsägelser i .NET-programmet.
Dessa API:er drivs av TensorFlow.NET och ONNX Runtime.
TensorFlow
TensorFlow är ett ramverk för djupinlärning med ett omfattande ekosystem och en mängd förtränat modeller som finns i TensorFlow Hub.
Med ML.NET kan du ta dessa förtränad TensorFlow-modeller och använda dem för slutsatsdragning i dina .NET-program.
En slutsatsdragningspipeline med en förtränad TensorFlow-modell kan se ut så här:
// 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");
Om du vill komma igång med att använda förträade TensorFlow-modeller med ML.NET kan du läsa om attitydanalysen Filmgranskningar med hjälp av en förtränad TensorFlow-modell i ML.NET självstudiekursen.
ONNX
Open Neural Network Exchange (ONNX) är ett format med öppen källkod som är utformat för att möjliggöra samverkan mellan ramverk för maskininlärning och djupinlärning. Det innebär att du kan träna en modell i ett av de många populära maskininlärningsramverken som PyTorch, konvertera den till ONNX-format och använda ONNX-modellen i ett annat ramverk som ML.NET.
Den ONNX-modelllagringsplatsen är värd för flera förtränad ONNX-modeller som du kan använda för slutsatsdragning i en mängd olika uppgifter.
Med ML.NET kan du ta dessa förtränade ONNX-modeller och använda dem för att dra slutsatser i dina .NET-program.
En slutsatsdragningspipeline med en förtränad ONNX-modell kan se ut så här:
// 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);
Information om hur du kommer igång med att använda förtränade ONNX-modeller med ML.NET finns i självstudien Objektidentifiering med hjälp av ONNX i ML.NET.