Vad är djupinlärning?
Djupinlärning är en samlingsterm 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 används för förstärkt inlä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 jämfört med Machine Learning?
Djupinlärning är beroende av neurala nätverksalgoritmer. Detta skiljer sig från traditionella eller klassiska maskininlärningstekniker som använder ett bredare utbud av algoritmer, till exempel generaliserade linjära modeller, beslutsträd eller stödvektormaskiner (SVM). Den mest omedelbara och praktiska konsekvensen av den här skillnaden är att djupinlärningsmetoder kan vara bättre lämpade för någon typ av data. I vissa fall verkar klassiska maskininlärningstekniker som gradient-boostade träd (XGBoost, LightGBM och CatBoost) ha en gräns för tabelldata. För mindre strukturerade data som text och bilder tenderar neurala nätverk att prestera bättre. Den bästa metoden ä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 artikeln vad är Automatiserad maskininlärning (AutoML)?.
Neurala nätverksarkitekturer
En av de viktigaste differentieringsegenskaperna för 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 för varje enhet utgör indata för 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") och sedan 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 det skett en ökning av fall, tillämpningar och tekniker för djupinlärning. Den här ökningen drivs delvis av allt fler åtgärder som kan införlivas i neurala nätverk, en mer omfattande 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:
- Vidarebefordra neuralt nätverk
- Convolutional Neural Network
- Återkommande neuralt nätverk
- Generativt kontradiktoriskt nätverk
- Transformatorer
Mer information finns i guiden för 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 friformstext. 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 genväg till den här processen med hjälp av förtränad modeller och tekniker för kunskapsöverföring, till exempel ö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 ditt .NET-program.
Dessa API:er drivs av TorchSharp och TensorFlow.NET.
Bildklassificering
I ML.NET kan du använda ImageClassification uppsättningen 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 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");
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 Model Builder
Objektidentifiering
ML.NET kan du träna anpassade objektidentifieringsmodeller i Model Builder med hjälp av Azure Machine Learning. Allt du behöver är en märkt datamängd som innehåller information om avgränsningsrutor och de kategorier som objekten i avgränsningsrutorna tillhör.
Resultatet av träningsprocessen är en ONNX-modell som sedan kan användas med transformeringen ApplyOnnxModel 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älvstudien Identifiera stoppskyltar i bilder med Model Builder
Textklassificering
Att klassificera text i fritt format, oavsett om det är kundrecensioner eller affärsmemorior, är en viktig del av många processer.
I ML.NET kan du använda TextClassificationTrainer uppsättningen 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. Med finjustering kan du ta en förtränad modell och träna om de lager som är specifika för din domän eller problem med 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 med att träna hela modellen från grunden. Den förtränad modell 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 your model
var model = pipeline.Fit(trainingData);
// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
Om du vill komma igång med att träna textklassificeringsmodeller med ML.NET kan du läsa självstudien Analysera sentiment 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 tillhandahåller en 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 pipeline för träning och slutsatsdragning för meningslikhet i ML.NET kan se ut så här:
// 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");
Information om hur du kommer igång med meningslikhet finns i exemplen på lagringsplatsen dotnet/machinelearning-samples.
Använda förtränad 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 ditt .NET-program.
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änade modeller som är tillgängliga i Tensorflow Hub.
Med ML.NET kan du ta dessa förtränat 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änade TensorFlow-modeller med ML.NET kan du läsa självstudien om attitydanalys för filmrecensioner med hjälp av en förtränad TensorFlow-modell i självstudien om ML.NET
ONNX
Open Neural Network Exchange (ONNX) är ett format med öppen källkod som är utformat för att möjliggöra samverkan mellan ramverken 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.
ONNX-modelllagringsplatsen är värd för flera förtränade 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änad ONNX-modeller och använda dem för slutsatsdragning 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 förtränad ONNX-modeller med ML.NET finns i självstudien om objektidentifiering med HJÄLP av ONNX i ML.NET