Udostępnij za pośrednictwem


Co to jest uczenie głębokie?

Uczenie głębokie to termin parasolowy dla technik uczenia maszynowego, które korzystają z "głębokich" sieci neuronowych. Obecnie uczenie głębokie jest jednym z najbardziej widocznych obszarów uczenia maszynowego ze względu na sukces w takich obszarach jak przetwarzanie obrazów, przetwarzanie języka naturalnego i — w przypadku zastosowania do uczenia wzmacniania — scenariusze, takie jak gra, podejmowanie decyzji i symulacja.

Kluczowym elementem sukcesu uczenia głębokiego była dostępność danych, obliczeń, struktur oprogramowania i środowisk uruchomieniowych, które ułatwiają tworzenie modeli sieci neuronowych i ich wykonywania na potrzeby wnioskowania. Przykłady takich struktur to TensorFlow, (Py)Torch i ONNX.

ML.NET zapewnia dostęp do niektórych z tych platform. W związku z tym ML.NET użytkownicy mogą korzystać z modeli uczenia głębokiego bez konieczności rozpoczynania od podstaw.

Uczenie głębokie a uczenie maszynowe

Uczenie głębokie opiera się na algorytmach sieci neuronowych. Jest to sprzeczne z tradycyjnymi lub klasycznymi technikami uczenia maszynowego, które używają szerszej gamy algorytmów, takich jak uogólnione modele liniowe, drzewa decyzyjne lub maszyny wektorów nośnych (SVM). Najbardziej bezpośrednim, praktycznym implikacją tej różnicy jest to, że metody uczenia głębokiego mogą być lepiej dostosowane do niektórych rodzajów danych. W niektórych przypadkach klasyczne techniki uczenia maszynowego, takie jak drzewa wzmocnione gradientem (XGBoost, LightGBM i CatBoost), wydają się mieć przewagę w przypadku danych tabelarycznych. W przypadku mniej ustrukturyzowanych danych, takich jak tekst i obrazy, sieci neuronowe zwykle działają lepiej. Najlepszym podejściem jest zawsze eksperymentowanie z własnym źródłem danych i własnym przypadkiem użycia, aby samodzielnie określić, które techniki najlepiej sprawdzają się dla twojego problemu.

W przypadku klasycznych zadań uczenia maszynowego ML.NET upraszcza ten proces eksperymentowania za pomocą zautomatyzowanego uczenia maszynowego (AutoML). Aby uzyskać więcej informacji na temat rozwiązania AutoML, zobacz Co to jest zautomatyzowane uczenie maszynowe (AutoML)?.

Architektury sieci neuronowych

Jedną z głównych cech różnicowych uczenia głębokiego jest użycie sztucznych algorytmów sieci neuronowych. Na wysokim poziomie można traktować sieci neuronowe jako konfigurację "jednostek przetwarzania", w których dane wyjściowe każdej jednostki stanowią dane wejściowe innego. Każda z tych jednostek może przyjąć jeden lub wiele danych wejściowych i zasadniczo wykonuje ważoną sumę swoich danych wejściowych, stosuje przesunięcie (lub "stronniczość"), po którym następuje funkcja przekształcania nieliniowego (nazywana "aktywacją"). Różne układy tych składników zostały użyte do opisania granic decyzji w klasyfikacji, funkcjach regresji i innych strukturach centralnych dla zadań uczenia maszynowego.

diagram reprezentujący pojedynczą warstwę w sieci neuronowej

W ostatniej dekadzie odnotowano wzrost przypadków, aplikacji i technik uczenia głębokiego. Ten wzrost jest częściowo napędzany przez rosnącą różnorodność operacji, które można włączyć do sieci neuronowych, bogatszy zestaw ustaleń, w których można skonfigurować te operacje, i ulepszoną obsługę obliczeniową dla tych ulepszeń. Ogólnie rzecz biorąc, architektury sieci neuronowych można pogrupować w następujące kategorie:

  • Sieć neuronowa przekazująca do przodu
  • Splotowa sieć neuronowa
  • Rekursowa sieć neuronowa
  • Sieć generująca niepożądane
  • Transformers

Aby uzyskać więcej informacji, zobacz przewodnik dotyczący sztucznych sieci neuronowych.

Do czego można używać uczenia głębokiego?

Architektury uczenia głębokiego wykazały dobrą wydajność w zadaniach obejmujących dane bez struktury, takie jak obrazy, dźwięk i tekst dowolny. W rezultacie uczenie głębokie zostało wykorzystane do rozwiązywania problemów, takich jak:

  • Klasyfikacja obrazów
  • Klasyfikacja audio
  • Tłumaczenie
  • Generowanie tekstu
  • Klasyfikacja tekstu

Uczenie głębokie w ML.NET

Trenowanie modelu uczenia głębokiego od podstaw wymaga ustawienia kilku parametrów, dużej ilości danych treningowych oznaczonych etykietami i ogromnej ilości zasobów obliczeniowych (setki godzin procesora GPU). ML.NET umożliwia skrótowanie tego procesu przy użyciu wstępnie wytrenowanych modeli i technik transferu wiedzy, takich jak uczenie transferowe i dostrajanie.

ML.NET umożliwia również importowanie modeli wytrenowanych w innych strukturach i korzystanie z nich w aplikacjach platformy .NET.

W zależności od scenariusza można użyć lokalnego procesora GPU, a także zasobów obliczeniowych procesora GPU platformy Azure do trenowania i używania modeli uczenia głębokiego.

Trenowanie modeli niestandardowych

ML.NET udostępnia interfejsy API do trenowania niestandardowych modeli uczenia głębokiego i używania ich do przewidywania wewnątrz aplikacji platformy .NET.

Te API są obsługiwane przez TorchSharp i TensorFlow.NET.

Klasyfikacja obrazów

W ML.NET można użyć kolekcji API ImageClassification do trenowania niestandardowych modeli klasyfikacji obrazów.

Przebieg treningu klasyfikacji obrazów w ML.NET może wyglądać następująco:

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

Aby rozpocząć trenowanie niestandardowych modeli klasyfikacji obrazów w ML.NET, zobacz Trenowanie modelu klasyfikacji obrazów na platformie Azure przy użyciu narzędzia Model Builder.

Wykrywanie obiektów

ML.NET umożliwia trenowanie niestandardowych modeli wykrywania obiektów w narzędziu Model Builder przy użyciu usługi Azure Machine Learning. Wszystko, czego potrzebujesz, to zestaw danych z etykietami zawierający informacje o ramkach ograniczających oraz kategorie, do których należą obiekty w tych ramkach.

Wynikiem procesu trenowania jest model ONNX, który następnie może być używany z transformacją ApplyOnnxModel do prognozowania.

Obecnie w ML.NET nie ma lokalnej obsługi wykrywania obiektów.

Aby wytrenować niestandardowe modele wykrywania obiektów za pomocą ML.NET, zapoznaj się z samouczkiem Wykrywanie znaków stop na obrazach za pomocą narzędzia Model Builder.

Klasyfikacja tekstu

Klasyfikowanie tekstu w dowolnej formie, niezależnie od tego, czy są to recenzje klientów, czy notatki biznesowe, jest ważną częścią wielu procesów.

W ML.NET można użyć zestawu TextClassificationTrainer interfejsów API do trenowania niestandardowych modeli klasyfikacji tekstu. Technika używana do trenowania niestandardowych modeli klasyfikacji tekstu w ML.NET jest znana jako dostrajanie. Dostrajanie umożliwia użycie wstępnie wytrenowanego modelu i ponowne trenowanie warstw specyficznych dla domeny lub problemu przy użyciu własnych danych. Daje to korzyści wynikające z tego, że model jest bardziej dostosowany do rozwiązania problemu bez konieczności uczenia całego modelu od podstaw. Wstępnie wytrenowany model używany przez interfejs API klasyfikacji tekstu jest implementacją TorchSharp NAS-BERT.

Potok trenowania klasyfikacji tekstu w ML.NET może wyglądać następująco:

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

Aby rozpocząć trenowanie modeli klasyfikacji tekstu za pomocą ML.NET, zobacz samouczek Analizowanie tonacji komentarzy witryny internetowej w aplikacji internetowej przy użyciu narzędzia ML.NET Model Builder.

Podobieństwo zdań

Zadania, takie jak wyszukiwanie semantyczne, polegają na określeniu, jak podobne dwa zdania lub fragmenty tekstu są ze sobą.

ML.NET udostępnia zestaw interfejsów API SentenceSimilarityTrainer, które używają tego samego podstawowego modelu i technik dostrajania co TextClassificationTrainer. Jednak zamiast produkować kategorię jako dane wyjściowe, generuje wartość liczbową reprezentującą, jak podobne są dwa fragmenty.

Potok trenowania i wnioskowania dla podobieństwa zdań w ML.NET może wyglądać następująco:

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

Aby rozpocząć pracę z podobieństwem zdań, zobacz przykłady w repozytorium dotnet/machinelearning-samples.

Korzystanie z wstępnie wytrenowanych modeli

ML.NET udostępnia interfejsy API do korzystania z modeli w innych formatach, takich jak TensorFlow i ONNX, i używania ich do przewidywania wewnątrz .NET aplikacji.

Te interfejsy API są obsługiwane przez TensorFlow.NET i środowisko uruchomieniowe ONNX.

TensorFlow

TensorFlow to framework uczenia głębokiego z bogatym ekosystemem i różnymi wstępnie wytrenowanymi modelami dostępnymi w TensorFlow Hub.

Dzięki ML.NET możesz użyć wstępnie wytrenowanych modeli TensorFlow i użyć ich do wnioskowania wewnątrz aplikacji platformy .NET.

Potok wnioskowania przy użyciu wstępnie wytrenowanego modelu TensorFlow może wyglądać następująco:

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

Aby rozpocząć korzystanie ze wstępnie wytrenowanych modeli TensorFlow przy użyciu ML.NET, zobacz samouczek Analiza tonacji recenzji filmów przy użyciu wstępnie wytrenowanego modelu TensorFlow w ML.NET.

ONNX

Open Neural Network Exchange (ONNX) to format open source zaprojektowany w celu umożliwienia współdziałania między platformami uczenia maszynowego i uczenia głębokiego. Oznacza to, że model można wytrenować w jednej z wielu popularnych struktur uczenia maszynowego, takich jak PyTorch, przekonwertować go na format ONNX i korzystać z modelu ONNX w innej strukturze, takiej jak ML.NET.

Repozytorium modeli ONNX hostuje kilka wstępnie wytrenowanych modeli ONNX, których można używać do wnioskowania w wielu różnych zadaniach.

Za pomocą ML.NET możesz użyć wstępnie wytrenowanych modeli ONNX i użyć ich do wnioskowania wewnątrz aplikacji platformy .NET.

Potok wnioskowania przy użyciu wstępnie wytrenowanego modelu ONNX może wyglądać następująco:

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

Aby rozpocząć korzystanie ze wstępnie wytrenowanych modeli ONNX przy użyciu ML.NET, zobacz samouczek dotyczący wykrywania obiektów w ML.NET przy użyciu ONNX.