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í z důvodu úspěchu v oblastech, jako je počítačové zpracování obrazu, zpracování přirozeného jazyka a scénáře, jako je hraní her, rozhodování a simulace.

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 určitý druh dat. V některýchpřípadechch platformě (XGBoost, LightGBM a CatBoost) se v některých případech zdá, že klasické techniky strojového učení mají pro tabulková data okraj. 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 konkrétním zdrojem dat a případ použití k určení, které techniky budou pro váš 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 článku o tom, 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 vzít jeden nebo více vstupů a v podstatě provede vážený součet jeho vstupů, použije posun (neboli "předsudky") a pak nelineární transformační funkci (označovanou jako "aktivace"). K popisu hranic rozhodování v klasifikaci, regresních funkcích a dalších strukturách, které jsou centrální pro úlohy strojového učení, se používají různé uspořádání těchto komponent.

Diagram představující jednu vrstvu v neurální síti

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í, což je bohatší sada uspořádání, která lze tyto operace nakonfigurovat a zlepšit výpočetní podporu těchto vylepšení. Obecně platí, že architektury neurálních sítí je možné seskupit do následujících kategorií:

  • Neurální síť pro předávání informačních kanálů
  • Konvoluční neurální síť
  • Rekurentní neurální síť
  • Generování nežádoucí sítě
  • Transformátory

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

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ázku
  • 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 tento proces zástupce pomocí předem natrénovaných modelů a technik přenosu znalostí, jako je přenos učení a vyladění.

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 využívají torchSharp a TensorFlow.NET.

Klasifikace obrázku

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

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

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

Pokud chcete začít trénovat vlastní modely klasifikace obrázků v ML.NET, podívejte se na model trénování klasifikačního modelu obrázků v Azure pomocí Tvůrce modelů.

Detekce objektů

ML.NET umožňuje trénovat vlastní modely rozpoznávání objektů v Model Builderu pomocí služby Azure Machine Učení. Vše, co potřebujete, je označená datová sada obsahující informace o ohraničujícího rámečku a kategorie objektů v ohraničujících polích patří.

Výsledkem trénovacího procesu je model ONNX, který se pak dá použít s ApplyOnnxModel transformací 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 detekce objektů pomocí ML.NET, podívejte se na kurz Rozpoznávání znaků zastavení v obrázcích pomocí 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 pomocí TextClassificationTrainer sady rozhraní API trénovat vlastní modely klasifikace textu. 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 s 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 používaný rozhraním API pro klasifikaci textu je implementace TOrchSharp pro 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 your 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 kurz Analýza mínění webových komentářů ve webové aplikaci pomocí ML.NET Modelu Builderu.

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 jemně dolaďovací techniky jako TextClassificationTrainerrozhraní API . 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 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");

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 rozhraní API využívají TensorFlow.NET a modul runtime ONNX.

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 mínění z filmů pomocí předem natrénovaného modelu TensorFlow v ML.NET kurzu.

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édnou si rozpoznávání objektů pomocí ONNX v ML.NET kurzu.