ML.NET Automated ML (AutoML) 及工具的更新内容介绍

393 阅读8分钟

ML.NET是一个面向.NET开发者的开源、跨平台的机器学习框架,能够将定制的机器学习整合到.NET应用程序中。

我们很高兴向大家介绍我们在过去几个月里的工作情况。

AutoML更新

训练机器学习模型是一项耗时且反复的工作。自动机器学习(AutoML)将这一过程自动化,使其更容易找到适合你的场景和数据集的最佳算法。AutoML是为Model Builder和ML.NET CLI中的训练体验提供动力的后端。去年,我们宣布了对Model Builder和ML.NET CLI工具中的AutoML实施的更新,该更新基于微软研究院的神经网络智能(NNI)快速轻量级AutoML(FLAML)技术。与以前的解决方案相比,这些更新提供了一些好处和改进,其中包括:

  • 增加探索的模型数量。
  • 改进了超时错误率。
  • 改进了性能指标(例如准确性和R-squared)。

直到最近,你只能在我们的工具中利用这些AutoML的改进。

我们很高兴地宣布,我们已经将AutoML的NNI/FLAML实现集成到ML.NET框架中,因此你可以从代码优先的经验中使用它们。

要想今天就开始使用AutoML API,请使用ML.NET的日常馈送安装最新的预发布版本的Microsoft.MLMicrosoft.ML.Auto NuGet软件包:

https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json

实验API

一个实验是一个训练运行或试验的集合。每个试验都会产生关于自身的信息,例如:

  • 评估指标。用于评估一个模型的预测能力的指标。
  • 管线。用于训练一个模型的算法和超参数。

实验API为你提供了一套AutoML的默认值,使你更简单地添加到你的训练管道中。

// Configure AutoML pipeline
var experimentPipeline =    
    dataPrepPipeline
        .Append(mlContext.Auto().Regression(labelColumnName: "fare_amount"));

// Configure experiment
var experiment = mlContext.Auto().CreateExperiment()
                   .SetPipeline(experimentPipeline)
                   .SetTrainingTimeInSeconds(50)
                   .SetDataset(trainTestSplit.TrainSet, validateTestSplit.TrainSet)
                   .SetEvaluateMetric(RegressionMetric.RSquared, "fare_amount", "Score");

// Run experiment
var result = await experiment.Run();

在这个代码片段中,dataPrepPipeline 是一系列的转换,将数据转换成正确的格式进行训练。训练回归模型的AutoML组件被添加到该管道中。同样的概念适用于其他支持的场景,如分类。

当你用你定义的训练管道创建一个实验时,你可以自定义的设置包括你训练多长时间、训练和验证集,以及你要优化的评估指标。

一旦你的管道和实验被定义,调用Run 方法来开始训练。

搜索空间和可扫除估计器

如果你需要对超参数搜索空间进行更多的控制,你可以定义你的搜索空间,并使用可扫除估计器将其添加到你的训练管道。

// Configure Search Space
var searchSpace = new SearchSpace<LgbmOption>();

// Initialize estimator pipeline 
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管道内使用搜索空间,就像你使用任何其他估计器一样。

为了创建和运行实验,你要经历使用CreateExperimentRun 方法的相同过程。

模型生成器和ML.NET CLI更新

我们对模型生成器和ML.NET CLI进行了一些更新。我想强调的是其中的两个:

  • Model Builder中的时间序列预测方案
  • 新版本的.NET CLI

时间序列预测方案(预览)

时间序列预测是在随时间变化的观察中识别模式,并对未来几个时期进行预测的过程。现实世界的用例有:

  • 预测产品需求
  • 预测能源消耗

在ML.NET中,选择时间序列预测的训练器并不难,因为你只有一个选择,ForecastBySsa。困难的部分来自于寻找参数,如分析的时间窗口和对未来的预测程度。寻找正确的参数是一个实验的过程,这使它成为AutoML的一项出色的工作。对我们的AutoML实现的更新使其有可能通过超参数器进行智能搜索,从而简化了时间序列预测模型的训练过程。

作为这些努力的结果,我们很高兴地分享,你现在可以在Model Builder中训练时间序列预测模型。

Model Builder evaluation screen for forecasting scenario

下载或更新到最新版本的Model Builder,开始训练你的时间序列预测模型。

新版本的ML.NET CLI

ML.NET CLI是我们的跨平台.NET全球工具,它利用AutoML在运行Windows、MacOS和Linux的x64和ARM64设备上训练机器学习模型。几个月前,我们发布了ML.NET CLI的新版本,带来了:

  • 支持.NET 6
  • 对ARM64架构的支持
  • 新方案
    • 图像分类(针对x64架构)
    • 建议
    • 预测

安装ML.NET CLI并开始从命令行训练模型。

笔记本中的键盘快捷键

交互式笔记本在数据科学和机器学习中被广泛使用。它们对于数据探索和准备、实验、模型的可解释性和教育都是很好的。

去年10月,我们宣布为Visual Studio发布了由.NET互动支持的笔记本编辑器扩展。在过去的几个月里,我们一直在不断地进行性能和稳定性的改进。

在我们最新的版本中,我们通过启用键盘快捷键,使你更容易在不离开键盘的情况下提高工作效率。如果你以前使用过笔记本,这些快捷方式中的许多应该对你来说是熟悉的。

按键命令
K将焦点向上移动
J焦点下移
A在上面插入单元格
B在下面插入单元格
DD删除单元格
Ctrl +Z撤销
Ctrl +S保存
Ctrl +C复制单元格
Ctrl +X剪切单元格
Ctrl +V粘贴单元格
L切换行数
O切换输出
II取消单元格的执行
00重新启动内核
Ctrl + +Shift -分割单元
Ctrl+Enter执行/运行单元
Shift +Enter执行/运行单元格并向下移动焦点

表中的键都是大写的,但大写并不是必须的。

安装最新版本的笔记本编辑器并开始在Visual Studio中创建笔记本。

ML.NET的下一步是什么?

我们正在积极努力实现我们的路线图中所列出的领域。

深度学习

几个月前,我们分享了我们对深度学习的计划。该计划的很大一部分是围绕改善ONNX的消费体验,并通过TorchSharp(一个提供访问PyTorch库的.NET库)实现新的场景。我们在实现这一计划方面取得的一些进展包括:

  • 为ONNX推理启用了全局GPU标志。ApplyOnnxModel 在这次更新之前,当你想使用GPU对ONNX模型进行推理时,FallbackToCpuGpuDeviceId 变换中的标志没有被保存为流水线的一部分。因此,你必须每次都适应管线。我们将这些标志作为MLContext 的一部分进行访问,这样你就可以将它们保存为模型的一部分。
  • TorchSharp针对.NET标准。TorchSharp最初的目标是.NET 5。作为我们在ML.NET中实现TorchSharp集成的工作的一部分,我们已经更新了TorchSharp,使其针对.NET标准。

我们很高兴在未来几周与你分享我们将TorchSharp与ML.NET集成的进展。敬请关注博文。

.NET数据框架

干净和有代表性的数据有助于提高你的模型的性能。因此,理解、清理和准备训练数据的过程是机器学习工作流程中的一个关键步骤。几年前,我们在Microsoft.Data.AnalysisNuGet包中把DataFrame类型作为一个预览版引入到.NET。DataFrame仍然处于预览阶段。我们理解拥有执行数据清理和处理任务的工具对你来说有多重要,并且已经开始组织和优先处理反馈,因此我们解决了现有的稳定性和开发者体验的痛点。这些反馈正在被组织为GitHub问题的一部分。

我们已经创建了这个跟踪问题来跟踪和组织反馈。如果你有任何反馈想与我们分享,请为描述中的单个问题加注,或直接在跟踪问题中评论。

MLOps

机器学习运营(MLOps)就像机器学习生命周期中的DevOps。这包括像模型部署和管理以及数据跟踪,这有助于机器学习模型的生产。我们一直在评估如何改善ML.NET的这种体验。

最近,我们发表了一篇博文,指导你完成设置Azure机器学习数据集、使用ML.NET CLI训练ML.NET模型以及用Azure Devops配置再训练管道的过程。欲知详情,请查看《在Azure ML中训练一个ML.NET模型》一文。

开始和资源

Microsoft Docs中了解更多关于ML.NET、Model Builder和ML.NET CLI的信息。

如果你遇到任何问题、功能请求或反馈,请在GitHub上的ML.NET repoML.NET Tooling(Model Builder & ML.NET CLI) repo中提出问题。

加入ML.NET Community Discord#machine-learning channel on the .NET Development Discordaka.ms/dotnet-disc…

每隔周三太平洋时间上午10点,收听机器学习.NET社区的讲座。