共用方式為


什麼是深度學習?

深度學習是機器學習技術使用「深度」神經網路的傘式詞彙。 現今,深度學習是機器學習最明顯的領域之一,因為它在計算機視覺、自然語言處理等領域取得成功,以及在套用至增強式學習時,例如遊戲遊戲、決策制定和模擬等案例。

深度學習成功的關鍵元素是數據、計算、軟體架構和運行時間的可用性,有助於建立類神經網路模型及其執行以進行推斷。 這類架構的範例包括 TensorFlow、(Py)Torch 和 ONNX。

ML.NET 提供這些架構的存取權。 因此,ML.NET 使用者可以利用深度學習模型,而不需要從頭開始。

深度學習與機器學習

深度學習依賴神經網路演算法。 這與傳統或傳統機器學習技術形成鮮明對比,其使用更廣泛的演算法,例如一般化線性模型、判定樹或支援向量機器(SVM)。 這種差異最直接、最實際的影響是深度學習方法更適合某些種類的數據。 在某些情況下,傳統機器學習技術,例如提升樹(XGBoost、LightGBM 和 CatBoost)似乎在表格型數據上具有優勢。 對於較不結構化的數據,例如文字和影像,類神經網路通常會執行得更好。 最佳方法一律會試驗您的特定數據源和使用案例,以判斷哪一種技術最適合您的問題。

針對傳統機器學習工作,ML.NET 透過自動化機器學習 (AutoML) 簡化此實驗程式。 如需 AutoML 的詳細資訊,請參閱 什麼是自動化機器學習 (AutoML)?

類神經網路架構

深度學習的主要區別特性之一是使用人工神經網路演算法。 概括而言,您可以將神經網路視為「處理單位」的組態,其中每個單位的輸出構成另一個單元的輸入。 每一個單位可以接受一或多個輸入,基本上執行輸入值的加權總和,並套用位移值(或「偏差」),然後進行一個非線性轉換函式(稱為「激活」)。 這些元件的不同排列方式可用來描述機器學習工作的核心分類、回歸函式和其他結構中的決策界限。

圖表,代表類神經網路中的單一層

過去十年,深度學習的案例、應用程式和技術有所增加。 這項增加部分是由作業的多樣性和數量的增加所驅動,這些作業可以併入類神經網路中、這些作業可以配置的更豐富的安排,以及針對這些改進提供的更優化的計算支援。 一般而言,類神經網路架構可以分組為下列類別:

  • 前饋類神經網路
  • 卷積神經網路
  • 遞迴神經網路
  • 生成對抗網路
  • 變形金剛

如需詳細資訊,請參閱 人工神經網路指南

我可以針對哪些專案使用深度學習?

深度學習架構在涉及非結構化數據的工作中表現良好,例如影像、音訊和自由格式文字。 因此,深度學習已用來解決問題,例如:

  • 影像分類
  • 音訊分類
  • 譯本
  • 文字產生
  • 文字分類

ML.NET 中的深度學習

從頭開始定型深度學習模型需要設定數個參數、大量的標記定型數據,以及大量的計算資源(數百個 GPU 時數)。 ML.NET 可讓您使用預訓練模型和知識轉移技術,例如遷移學習和微調,來簡化此過程。

ML.NET 也可讓您匯入在其他架構中定型的模型,並在 .NET 應用程式中取用模型。

視案例而定,您可以使用本機 GPU 和 Azure GPU 計算資源來定型和使用深度學習模型。

訓練自定義模型

ML.NET 提供 API 來定型自定義深度學習模型,並使用它們在您的 .NET 應用程式內進行預測。

這些 API 由 TorchSharpTensorFlow.NET提供。

影像分類

在 ML.NET 您可以使用 ImageClassification 一組 API 來定型自定義影像分類模型。

ML.NET 中的影像分類訓練流程可能如下所示:

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

若要開始在 ML.NET 中定型自定義影像分類模型,請參閱 使用模型產生器在 Azure 中訓練影像分類模型。

物件偵測

ML.NET 可讓您使用 Azure Machine Learning 在模型產生器中定型自定義物件偵測模型。 您只需要加上標籤的數據集,其中包含周框方塊資訊,以及周框方塊中物件所屬的類別。

訓練過程的結果是 ONNX 模型,然後可以使用 ApplyOnnxModel 轉換來進行預測。

目前,ML.NET 中沒有對象偵測的本機支援。

若要使用 ML.NET 定型自訂物件偵測模型,請參閱使用模型建構器偵測停止標誌的 教學課程

文字分類

分類自由格式文字,無論是客戶評論還是商務備忘錄,都是許多程式的重要部分。

在 ML.NET 中,您可以使用 TextClassificationTrainer 組 API 來定型自定義文字分類模型。 用來在 ML.NET 中定型自定義文字分類模型的技術稱為微調。 微調能使您採用預先訓練的模型,並使用您自己的數據對特定於您的領域或問題的層進行再訓練。 這可讓您擁有更量身打造的模型來解決您的問題,而不需要從頭開始訓練整個模型的程式。 文字分類 API 所使用的預先定型模型是 NAS-BERT的 TorchSharp 實作。

ML.NET 中的文字分類訓練流程看起來可能如下所示:

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

若要開始使用 ML.NET 訓練文本分類模型,請參閱 使用 ML.NET 模型產生器進行的 教學課程,以分析 Web 應用程式中網站評論的情感。

句子相似性

語意搜尋等工作會依賴判斷兩個句子或文字段落彼此的相似程度。

ML.NET 提供一組與 TextClassificationTrainer相同的基礎模型和微調技術的 SentenceSimilarityTrainer API。 不過,它不會產生類別做為輸出,而是會產生數值,代表兩個段落的相似性。

ML.NET 中句子相似性的定型和推斷管線看起來可能如下所示:

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

若要開始使用句子相似性,請參閱 dotnet/machinelearning-samples 存放庫中的範例

取用預先定型的模型

ML.NET 提供 API 來取用 TensorFlow 和 ONNX 等其他格式的模型,並使用它們在您的 .NET 應用程式中進行預測。

這些 API 由 TensorFlow.NETONNX Runtime提供。

TensorFlow

TensorFlow 是一種深度學習架構,具有豐富的生態系統,以及 TensorFlow 中樞 中提供的各種預先定型模型。

透過 ML.NET,您可以採用這些預先定型的 TensorFlow 模型,並使用它們在 .NET 應用程式內進行推論。

使用預先定型 TensorFlow 模型的推斷管線看起來可能如下所示:

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

若要開始使用預先訓練的 TensorFlow 模型搭配 ML.NET,請參閱 ML.NET 教學中使用預先訓練的 TensorFlow 模型來進行電影評論情感分析。

ONNX

開放式類神經網路交換(ONNX) 是一種開放原始碼格式,旨在啟用機器學習與深度學習架構之間的互操作性。 這表示您可以在 PyTorch 等眾多熱門機器學習架構之一中定型模型、將模型轉換成 ONNX 格式,並在 ML.NET 等不同架構中取用 ONNX 模型。

ONNX 模型存放庫 裝載數個預先定型的 ONNX 模型,可用來推斷各種工作。

透過 ML.NET,您可以採用這些預先定型的 ONNX 模型,並在 .NET 應用程式內使用它們來進行推論。

使用預先定型 ONNX 模型的推斷管線看起來可能如下所示:

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

若要開始使用預先定型的 ONNX 模型搭配 ML.NET,請參閱 ML.NET 教学课程中的 物件偵測。