Dela via


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 någon form av data. I vissa fall verkar klassiska maskininlärningstekniker som toningsförstärkta 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. 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 artikeln vad är Automated Machine Learning (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 i huvudsak utföra 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.

Diagram som representerar ett enda lager i neuralt nätverk

Under det senaste decenniet har antalet fall, tillämpningar 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:

  • Feed-forward Neural Network
  • Convolutional Neural Network
  • Återkommande neurala nätverk
  • Generativt adversariellt nätverk
  • Omvandlare

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 omfattar "ostrukturerade data" som 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 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 .NET-programmet.

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 Hjälp av 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änsningsrutan 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ärsmemo ä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 att använda 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ä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 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 den 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 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 .NET-programmet.

Dessa API:er drivs av TensorFlow.NET och ONNX Runtime.

TensorFlow

TensorFlow är ett ramverk för djupinlärning med ett rikt ekosystem och en mängd förtränade 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änade TensorFlow-modeller med ML.NET läser du attitydanalysen för filmrecensioner 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.

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ä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 att använda förtränad ONNX-modeller med ML.NET finns i objektidentifieringen med HJÄLP av ONNX i ML.NET självstudiekurs.