ML.NET是一款面向.NET開發人員的開源,跨平臺機器學習框架,可以將自定義機器學習整合到.NET應用中。我們很開心地向您介紹我們在過去幾個月中所做的工作。
AutoML更新
自動化機器學習(AutoML)通過更容易地為您適合的場景和資料集找到最佳演算法,從而使該過程自動化。AutoML是支援模型生成器和ML.NET CLI訓練經驗的後端。去年,我們宣佈在我們的模型生成器和基於神經網路智慧 (NNI) 的 ML.NET CLI 工具以及 Microsoft Research 的快速輕量級 AutoML (FLAML) 技術中對 AutoML 實施進行了更新。與之前的解決方案相比,這些更新提供了一些好處和改進,包括:
- 探索的模型數量增加。
- 提高了超時錯誤率。
- 改進的效能指標(例如,準確性和r平方)。
直到最近,您還只能在我們的工具中利用這些AutoML改進。
我們很興奮地宣佈,我們已經將AutoML的NNI / FLAML實現整合到ML.NET框架中,這樣你就可以從程式碼優先的體驗中使用它們。
要開始使用AutoML API,請使用ML.NET daily feed安裝Microsoft.ML和Microsoft.ML.Auto NuGet包的微軟最新的預釋出版本。
實驗的API
實驗是訓練或試驗的集合。每次試驗都會產生關於自身的資訊,例如:
- 評估指標:用於評估模型的預測能力的指標。
流水線:用於訓練模型的演算法和超引數。
實驗API為AutoML提供了一組預設值,使您更容易將其新增到訓練管道中。// 配置AutoML管道 var experimentPipeline = dataPrepPipeline .Append(mlContext.Auto().Regression(labelColumnName: "fare_amount")); // 配置實驗 var experiment = mlContext.Auto().CreateExperiment() .SetPipeline(experimentPipeline) .SetTrainingTimeInSeconds(50) .SetDataset(trainTestSplit.TrainSet, validateTestSplit.TrainSet) .SetEvaluateMetric(RegressionMetric.RSquared, "fare_amount", "Score"); // 執行實驗 var result = await experiment.Run();
在這個程式碼片段中,dataprepipeline是一系列轉換,用於將資料轉換為適合訓練的格式。訓練迴歸模型的AutoML元件被附加到該管道上。同樣的概念也適用於其他受支援的場景,比如分類。
當您使用已定義的訓練管道建立實驗時,您可以自定義的設定包括訓練時間、訓練和驗證集以及優化的評估指標。
定義了管道和實驗之後,呼叫Run方法開始訓練。
▌搜尋空間和可清除估計器
如果需要對超引數搜尋空間有更多的控制,可以定義搜尋空間,並使用可清除的估計器將其新增到訓練管道中。
// 配置搜尋空間
var searchSpace = new SearchSpace<LgbmOption>();
// 初始化估計器管道
var sweepingEstimatorPipeline =
dataPrepPipeline
.Append(mlContext.Auto().CreateSweepableEstimator((context, param) =>
{
var option = new LightGbmRegressionTrainer.Options()
{
NumberOfLeaves = param.NumberOfLeaves,
NumberOfIterations = param.NumberOfTrees,
MinimumExampleCountPerLeaf = param.MinimumExampleCountPerLeaf,
LearningRate = param.LearningRate,
LabelColumnName = "fare_amount",
FeatureColumnName = "Features",
HandleMissingValue = true
};
return context.Regression.Trainers.LightGbm(option);
}, searchSpace));
搜尋空間定義了用於搜尋的超引數範圍。
可清理評估器使您能夠像使用其他評估器一樣使用ML.NET管道中的搜尋空間。
要建立和執行實驗,您需要使用CreateExperiment和run方法的相同過程。
模型生成器和ML.NET CLI更新
我們已經對模型生成器和ML.NET CLI做了幾個更新。其中我想強調的兩個是:
- 時間序列預測場景的模型生成器
- .NET CLI的新版本
▌時間序列預測場景(預覽)
時間序列預測是在與時間相關的觀測中確定模式,並對未來幾個時期作出預測的過程。現實世界的用例有:
- 預測產品需求
- 能源消費預測
在ML.NET中,選擇時間序列預測的訓練師並不太難,因為你只有一個選擇,ForecastBySsa。困難的部分在於找到引數,如分析的時間視窗和預測未來的距離。找到正確的引數是一個實驗過程,這是AutoML的一項出色工作。對我們的AutoML實現的更新使通過超引數進行智慧搜尋成為可能,從而簡化了訓練時間序列預測模型的過程。
作為這些努力的結果,我們很高興地與大家分享,您現在可以在模型生成器中訓練時間序列預測模型。
下載或更新到模型生成器的最新版本,開始訓練您的時間序列預測模型。
▌ML.NET CLI的新版本
ML.NET CLI是我們的跨平臺.NET全域性工具,它利用AutoML在執行Windows、MacOS和Linux的x64和ARM64裝置上訓練機器學習模型。幾個月前,我們釋出了ML.NET CLI的新版本,它帶來了:
- .NET 6 支援
- 支援 ARM64 架構
- 新場景
影像分類(針對 x64 架構)
建議
預測
安裝 ML.NET CLI 並從命令列開始訓練模型。
Notebooks的鍵盤快捷鍵
Interactive Notebooks廣泛應用於資料科學和機器學習。它們對於資料探索和準備、實驗、模型解釋和教育都很有用。
去年10月,我們釋出了基於.NET Interactive的Visual Studio Notebook Editor擴充套件。在過去的幾個月裡,我們一直在改進效能和穩定性。
在我們的最新版本中,我們通過啟用鍵盤快捷鍵讓您無需離開鍵盤就能更輕鬆地工作。如果你以前使用過notebooks,你應該對其中的許多快捷方式很熟悉。
執行/執行單元格,並將焦點向下移動
表中的鍵是大寫的,但大寫不是必需的。
安裝最新版本的Notebook編輯器,並開始在Visual Studio中建立Notebook。
ML.NET的下一個目標是什麼?
我們正積極朝著路線圖中所概述的領域努力。
▌深度學習
幾個月前,我們分享了深度學習的計劃。該計劃的很大一部分圍繞著改善ONNX的消費體驗,並通過TorchSharp(一個提供對驅動PyTorch的庫的訪問的.NET庫)實現新的場景。我們在實現這一計劃方面取得的一些進展包括:
為ONNX推斷啟用全域性GPU標誌。在此更新之前,當你想使用GPU對ONNX模型進行推斷時,ApplyOnnxModel轉換中的FallbackToCpu和GpuDeviceId標誌沒有被儲存為管道的一部分。因此,每次都必須安裝管道。我們已經使這些標誌可作為MLContext的一部分訪問,因此您可以將它們儲存為模型的一部分。
TorchSharp 面向 .NET 標準。TorchSharp最初的目標是.NET 5。作為我們將TorchSharp整合到ML.NET的工作的一部分,我們更新為TorchSharp面向.NET標準。
在接下來的幾周裡,我們很高興與大家分享我們在TorchSharp與ML.NET整合方面取得的進展。
.NET DataFrame
清晰且具有代表性的資料有助於提高模型的效能。因此,理解、清理和準備訓練資料的過程是機器學習工作流中的關鍵步驟。幾年前,我們在.NET中引入了DataFrame型別,作為Microsoft.Data.Analysis NuGet包的預覽。DataFrame仍處於預覽階段。我們理解使用工具來執行資料清理和處理任務是多麼重要,並且已經開始組織和優先考慮反饋,因此我們解決了現有的穩定性和開發人員經驗痛點。這些反饋被組織成GitHub問題的一部分。
我們建立這個跟蹤問題是為了跟蹤和組織反饋。如果您有任何想要與我們分享的反饋,請在描述中為個別問題投票或在跟蹤問題中直接評論。
MLOps
機器學習操作(MLOps)就像機器學習生命週期的DevOps。這包括模型部署和管理以及資料跟蹤,這有助於機器學習模型的產品化。我們一直在評估用ML.NET改善這種體驗的方法。
最近我們發表了一篇部落格文章,指導你完成設定Azure機器學習資料集、使用ML.NET CLI訓練ML.NET模型以及使用Azure Devops配置再訓練管道的過程。要了解更多細節,請參閱《在Azure ML中訓練ML.NET模型》一文。
入門和資源
在微軟文件中詳細瞭解 ML.NET、模型生成器和 ML.NET CLI。
如果您遇到任何問題,功能請求或反饋,請在GitHub上的ML.NET回購或ML.NET工具(Model Builder & ML.NET CLI)回購中提交問題。
長按識別二維碼
關注微軟中國MSDN
點選瞭解更多ML.NET資訊~