Sdílet prostřednictvím


Co je hluboké učení?

Hluboké učení je zastřešující termín pro techniky strojového učení, které využívají "hluboké" neurální sítě. Hluboké učení je dnes jednou z nejviditelnějších oblastí strojového učení díky svému úspěchu v oblastech, jako je počítačové zpracování obrazu, zpracování přirozeného jazyka, a ve scénářích, jako je hraní her, rozhodování a simulace, když je využíváno ve spojení s posilujícím učením.

Zásadním prvkem úspěchu hlubokého učení je dostupnost dat, výpočetních, softwarových architektur a modulů runtime, které usnadňují vytváření modelů neurálních sítí a jejich provádění pro odvozování. Mezi příklady takových architektur patří TensorFlow, (Py)Torch a ONNX.

ML.NET poskytuje přístup k některým z těchto architektur. V důsledku toho můžou uživatelé ML.NET využívat modely hlubokého učení, aniž by museli začít od nuly.

Hluboké učení vs. strojové učení

Hluboké učení spoléhá na neurální síťové algoritmy. To je na rozdíl od tradičních nebo klasických technik strojového učení, které používají širší škálu algoritmů, jako jsou generalizované lineární modely, rozhodovací stromy nebo metody SVM (Support Vector Machines). Nejobsáhlejším praktickým implikací tohoto rozdílu je, že metody hlubokého učení mohou být vhodnější pro některé druhy dat. V některých případech se zdá, že klasické techniky strojového učení, jako jsou například gradientně zesílené stromy (XGBoost, LightGBM a CatBoost), mají pro tabulková data výhodu. U méně strukturovaných dat, jako je text a obrázky, mají neurální sítě tendenci lépe fungovat. Nejlepší přístup je vždy experimentovat s vaší konkrétní datovou platformou a případem použití k určení, které techniky jsou pro váš konkrétní problém nejvhodnější.

U klasických úloh strojového učení ML.NET tento proces experimentování zjednodušuje prostřednictvím automatizovaného strojového učení (AutoML). Další informace o AutoML najdete v tématu Co je automatizované strojové učení (AutoML)?.

Architektury neurálních sítí

Jednou z hlavních charakteristik hlubokého učení je použití algoritmů umělé neurální sítě. Na vysoké úrovni si můžete představit neurální sítě jako konfiguraci "jednotek zpracování", kde výstup každé jednotky představuje vstup jiné. Každá z těchto jednotek může mít jeden či více vstupů a v podstatě provede vážený součet svých vstupů, použije odchylku (neboli "bias") a následuje nelineární transformační funkce (označovaná jako "aktivace"). K popisu hranic rozhodování v klasifikačních, regresních funkcích a dalších strukturách, které jsou centrální pro úlohy strojového učení, byly použity různé uspořádání těchto součástí.

diagram představující jednotlivou vrstvu neurální sítě

V minulém desetiletí došlo ke zvýšení počtu případů, aplikací a technik hlubokého učení. Toto zvýšení je částečně řízeno rostoucím množstvím operací, které je možné začlenit do neurálních sítí, rozsáhlejší sadou uspořádání, ve které lze tyto operace nakonfigurovat, a vylepšenou výpočetní podporou těchto vylepšení. Obecně platí, že architektury neurálních sítí je možné seskupit do následujících kategorií:

  • Dopředná neurální síť
  • Konvoluční neurální síť
  • Rekurentní neurální síť
  • Generativní adversariální síť
  • Transformátory

Další podrobnosti najdete v průvodci umělé neurální sítě.

K čemu můžu využít hluboké učení?

Architektury hlubokého učení ukázaly dobrý výkon při úlohách zahrnujících nestrukturovaná data, jako jsou obrázky, zvuk a volný text. V důsledku toho se hluboké učení použilo k řešení problémů, jako jsou:

  • Klasifikace obrázků
  • Klasifikace zvuku
  • Překlad
  • Generování textu
  • Klasifikace textu

Hluboké učení v ML.NET

Trénování modelu hlubokého učení od začátku vyžaduje nastavení několika parametrů, velké množství trénovacích dat s popiskem a obrovské množství výpočetních prostředků (stovky hodin GPU). ML.NET umožňuje zkrátit tento proces pomocí předem natrénovaných modelů a technik přenosu znalostí, jako je transfer learning a vyladění modelu.

ML.NET také umožňuje importovat modely natrénované v jiných architekturách a využívat je v rámci vašich aplikací .NET.

V závislosti na scénáři můžete k trénování a využívání modelů hlubokého učení použít místní GPU i výpočetní prostředky Azure GPU.

Trénování vlastních modelů

ML.NET poskytuje rozhraní API pro trénování vlastních modelů hlubokého učení a jejich použití k vytváření předpovědí v aplikaci .NET.

Tato rozhraní API pohánějí TorchSharp a TensorFlow.NET.

Klasifikace obrázků

V ML.NET můžete k trénování vlastních modelů klasifikace obrázků použít ImageClassification sadu rozhraní API.

Tréninková linka pro klasifikaci obrázků v ML.NET má podobu:

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

Pokud chcete začít trénovat vlastní modely klasifikace obrázků v ML.NET, přečtěte si téma Trénování modelu klasifikace obrázků v Azure pomocí nástroje Model Builder.

Rozpoznávání objektů

ML.NET umožňuje trénovat vlastní modely rozpoznávání objektů v Model Builderu pomocí služby Azure Machine Learning. Potřebujete jen označenou datovou sadu obsahující informace o ohraničovacím rámečku a kategorie, ke kterým objekty v těchto rámečcích patří.

Výsledkem trénovacího procesu je model ONNX, který se pak dá použít s transformací ApplyOnnxModel k vytváření předpovědí.

V tuto chvíli neexistuje žádná místní podpora detekce objektů v ML.NET.

Pokud chcete vytrénovat vlastní modely rozpoznávání objektů pomocí ML.NET, přečtěte si téma Rozpoznávání znaků zastavení pomocí kurzu Tvůrce modelů.

Klasifikace textu

Klasifikace volného textu, ať už jde o recenze zákazníků nebo obchodní poznámky, je důležitou součástí mnoha procesů.

V ML.NET můžete k trénování vlastních modelů klasifikace textu použít TextClassificationTrainer sadu rozhraní API. Technika použitá k trénování vlastních modelů klasifikace textu v ML.NET se označuje jako jemné ladění. Vyladění umožňuje použít předem natrénovaný model a přetrénovat vrstvy specifické pro vaši doménu nebo problém použitím vlastních dat. To vám dává výhodu, že máte model, který je šitější na míru řešení vašeho problému, aniž byste museli procházet procesem trénování celého modelu od nuly. Předtrénovaný model, který používá rozhraní API pro klasifikaci textu, je implementace TorchSharp NAS-BERT.

Trénovací kanál klasifikace textu v ML.NET může vypadat takto:

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

Pokud chcete začít trénovat modely klasifikace textu pomocí ML.NET, podívejte se na Analýzu sentimentu webových komentářů ve webové aplikaci pomocí nástroje Model Builder ML.NET v kurzu.

Podobnost vět

Úkoly, jako je sémantické vyhledávání, závisí na určení toho, jak jsou podobné dvě věty nebo pasáže textu navzájem.

ML.NET poskytuje SentenceSimilarityTrainer sadu rozhraní API, která používají stejný základní model a techniky jemného ladění jako TextClassificationTrainer. Místo vytvoření kategorie jako výstupu ale vznikne číselná hodnota představující, jak jsou podobné dva úseky.

Kanál trénování a odvozování pro podobnost vět ve ML.NET může vypadat takto:

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

Pokud chcete začít s podobností vět, podívejte se na ukázky v úložišti dotnet/machinelearning-samples.

Využívání předem natrénovaných modelů

ML.NET poskytuje rozhraní API pro využívání modelů v jiných formátech, jako jsou TensorFlow a ONNX, a používá je k vytváření předpovědí v aplikaci .NET.

Tato API využívají TensorFlow.NET a ONNX Runtime.

TensorFlow

TensorFlow je architektura hlubokého učení s bohatým ekosystémem a celou řadou předem natrénovaných modelů dostupných v TensorFlow Hubu .

S ML.NET můžete vzít tyto předem natrénované modely TensorFlow a použít je k odvozování v aplikacích .NET.

Kanál odvozování pomocí předem natrénovaného modelu TensorFlow může vypadat takto:

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

Pokud chcete začít využívat předem natrénované modely TensorFlow s ML.NET, podívejte se na analýzu sentimentu filmových recenzí pomocí předem vytvořeného modelu TensorFlow v ML.NET návodu.

ONNX

Open Neural Network Exchange (ONNX) je opensourcový formát navržený tak, aby umožňoval interoperabilitu mezi architekturami strojového učení a hlubokého učení. To znamená, že model můžete trénovat v jedné z mnoha oblíbených architektur strojového učení, jako je PyTorch, převést ho na formát ONNX a využívat model ONNX v jiné rozhraní, jako je ML.NET.

Úložiště modelů ONNX hostuje několik předem natrénovaných modelů ONNX, které můžete použít k odvozování v nejrůznějších úlohách.

S ML.NET můžete vzít tyto předem natrénované modely ONNX a použít je k odvozování v aplikacích .NET.

Kanál odvozování pomocí předem natrénovaného modelu ONNX může vypadat takto:

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

Pokud chcete začít využívat předem natrénované modely ONNX s ML.NET, prohlédněte si kurz rozpoznávání objektů pomocí ONNX v ML.NET.