共用方式為


什麼是深度學習?

深度學習是使用「深度」神經網路的機器學習技術的概括性詞彙。 現今,深度學習是機器學習最突出的領域之一,因為它在電腦視覺、自然語言處理等領域以及應用於增強式學習時 (像是遊戲、決策制定、模擬等方面) 都有成功的表現。

有適當的資料、計算、軟體架構和執行階段可協助建立神經網路模型及執行其推斷,是深度學習成功的關鍵要素。 舉例來說,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 中,您可以使用 API 的 ImageClassification 集合來定型自訂影像分類模型。

ML.NET 中的影像分類定型管線可能顯示如下:

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

若要開始在 ML.NET 中定型自訂影像分類模型,請參閱使用 Model Builder 在 Azure 中定型影像分類模型

物件偵測

ML.NET 可讓您使用 Azure Machine Learning 在 Model Builder 中定型自訂物件偵測模型。 您只需要加上標籤的資料集,其中包含週框方塊資訊,以及週框方塊中的物件所屬的類別。

定型程序的結果是 ONNX 模型,此模型後續可與 ApplyOnnxModel 轉換搭配使用,以進行預測。

目前不支援在本機使用 ML.NET 進行物件偵測。

若要使用 ML.NET 定型自訂物件偵測模型,請參閱使用 Model Builder 偵測影像中的停止標誌教學課程

文字分類

分類自由格式文字在許多程序中都是重要的環節,無論是客戶評論還是商業備忘錄。

在 ML.NET 中,您可以使用 API 的 TextClassificationTrainer 集合來定型自訂文字分類模型。 用來在 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 your model
var model = pipeline.Fit(trainingData);

// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");

若要開始使用 ML.NET 定型文字分類模型,請參閱使用 ML.NET Model Builder 在 Web 應用程式中分析網站留言的情感教學課程

句子相似度

語意搜尋之類的工作有賴於判斷兩個句子或文字段落之間有相似。

ML.NET 提供了 API 的 SentenceSimilarityTrainer 集合,使用與 TextClassificationTrainer 相同的基礎模型和微調技術。 但它不會產生類別作為輸出,而是會產生一個數值來代表兩個段落的相似程度。

ML.NET 中句子相似度的定型和推斷管線可能顯示如下:

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

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

取用預先定型的模型

ML.NET 提供的 API 可用來取用其他格式的模型 (例如 TensorFlow 和 ONNX),並使用模型在 .NET 應用程式內進行預測。

這些 API 由 TensorFlow.NETONNX 執行階段提供。

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

若要開始透過 ML.NET 使用預先定型的 TensorFlow 模型,請參閱在 ML.NET 中使用預先定型的 TensorFlow 模型進行電影評論情感分析教學課程

ONNX

Open Neural Network Exchange (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);

若要開始透過 ML.NET 使用預先定型的 ONNX 模型,請參閱在 ML.NET 中使用 ONNX 進行物件偵測教學課程 (部分機器翻譯)