2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 GitHub 上获得 3.8K 星,成为最热门的自动机器学习(AutoML)开源项目之一。
作为为研究人员和算法工程师量身定制的自动机器学习工具和框架,NNI 在过去一年中不断迭代更新,我们发布了稳定 API 的 1.0 版本,并且不断将最前沿的算法加入其中,加强对各种分布式训练环境的支持。
最新版本的 NNI 对机器学习生命周期的各个环节做了更加全面的支持,包括特征工程、神经网络架构搜索(NAS)、超参调优和模型压缩在内的步骤,你都能使用自动机器学习算法来完成。
无论你是刚刚入门机器学习的小白,还是身经百战的“调参大法师”,NNI 都能助你一臂之力。在这篇文章中,我们会全方位解读 NNI 最新版本中的各项功能,让大家了解这个简单易用的自动机器学习工具。
自动机器学习是近年来火热的应用和研究方向,各种自动机器学习工具也层出不穷,它们各有优点与局限性。有的聚焦于算法,但不支持分布式训练;有的功能强大,但没有易用的用户界面,学习成本较高;有的只支持特定领域,不提供通用功能;还有的只能在云端使用。
微软自动深度学习工具 NNI 具备以下优势:
• 支持多种框架:提供基于 Python 的 SDK,支持 PyTorch、TensorFlow、scikit-learn、LightGBM 等主流框架和库;
• 支持多种训练平台:除在本机直接运行外,还能通过 SSH 调度一组 GPU 服务器,或通过 FrameworkController、KubeFlow、OpenPAI 等在 Kubernetes 下调度大规模集群;
• 支持机器学习生命周期中的多环节:特征工程、神经网络架构搜索(NAS)、超参调优和模型压缩等;
• 提供易用的命令行工具和友好的 WEB 用户界面;
• 大量的示例能帮助你很快上手;
• 最后划重点,NNI的所有文档都有中文版!
完整中文文档请参考:https://aka.ms/nnizh
自动机器学习工具对比
机器学习和人工智能通过近些年的厚积薄发,已经形成不少经典的机器学习算法和深度学习网络,这些算法各有特点,在不同的数据集上所需要的超参也有所不同。而自动机器学习中的超参优化就是为了解决这个问题,通过启动多个实例来找到调优结果较好的组合。
NNI 的超参调优功能就是为这样的场景准备的。在超参搜索算法上,NNI 不仅提供了 TPE、SMAC、进化算法等优秀算法,还提供了遍历、批处理、随机、Hyperband 等十多种算法。另外,还支持自动终止低效实例,加速学习过程。
NNI 的安装基于 Python pip 命令,“pip install nni”即可一步完成。
NNI 的使用也非常简单:首先,定义好需要搜索的超参空间;然后,在需要调参的网络启动之前,通过 NNI 的接口读取参数并在训练中将精确度等指标传入 NNI;最后,配置好要使用的调参算法等,即可开始。
具体过程可参考入门教程:https://aka.ms/nnizq
你也可以在这里找到所有示例:https://aka.ms/nnize
一图了解 NNI 使用
NNI 的超参调优不仅能用于机器学习,对于各类系统、数据库的繁杂参数都可以根据实际场景进行有针对性的调优。使用过程和超参调优非常类似,通过 Python 为系统传入不同的参数配置,然后将确定的调优指标(如读写速度,磁盘空间大小等)回调给 NNI 即可。
更多信息请访问:https://aka.ms/nnizrd
NNI 在运行中,可随时通过界面了解进度
分析超参之间的关联关系,快速发现规律
特征工程是应用经典机器学习算法的前置步骤,通过特征工程,能让机器学习过程更快得到较好的结果。
前面介绍的 NNI 的超参调优功能,可直接应用于特征增强、自动特征选择等特征工程中的各个子领域。为使新手轻松上手,NNI 还内置了基于梯度和决策树的自动特征选择算法,同时还提供了扩展其它算法的接口。
NNI 团队还对自动特征工程的效果进行了对比,在流行的 colon-cancer、gisette、rcv1、neews20.binary、real-sim 等数据集上进行了测试。我们发现如果在成千上万个特征中仅选择前20个,决策树基本都能取得较好的结果,如果选出更多特征,会得到更好的效果。
更多信息请访问:https://aka.ms/nnizfe
神经网络搜索(Neural Architecture Search,简称 NAS)通过自动搜索网络结构来获得较好的性能,在今年涌现了大量研究成果。NAS 算法多种多样,实现也各不相同。
为了促进 NAS 的创新,我们对 NAS 算法抽象与实现进行了探索,让用户不仅能在自己的数据集上直接应用算法,还能很容易地横向比较不同 NAS 算法的效果。
NNI 中实现了 ENAS、DARTS、P-DARTS 算法,并提供了 one-shot 算法的接口。另外,还支持了网络模态(Network Morphism)这样的经典搜索方法。
算法介绍及用法:https://aka.ms/nnizn
随着深度学习的发展,模型也越来越大。虽然精确度有了很大的提升,但较大的模型尺寸不仅会影响推理速度,还对部署的硬件要求较高。因此,模型压缩也是一个热门话题。
主要的模型压缩算法可分为两类,一类是压缩网络结构的剪枝算法,另一类是减小模型精度的量化算法。NNI 目前提供了 AGP、L1Filter、Slim、Lottery Ticket、FPGM、QAT、DoReFa 等9种模型压缩算法。用户也可根据需要,通过 NNI 的模型压缩接口来实现自己的压缩算法。
相关算法介绍及用法:https://aka.ms/nnizc
随着人工智能的发展,理论和建模方法也始终在不断演进。立足于研究与应用的最前线,我们希望将最好用的工具提供给每一位研究员和算法工程师,加速人工智能领域的发展进步。
2020年,我们将加速创新,力图让 NNI 能够提供全生命周期的自动化框架、更丰富的算法、更高效的分布式调参效率,进一步提升 NNI 的易用性和用户体验。
作为一个开源项目,我们期待大家为 NNI 添加新算法、功能、示例,也希望大家为 NNI 提出建议、报告问题,让我们为大家提供更好的工具,如果您有任何反馈与建议,欢迎在 GitHub 社区中告知我们。
NNI 的 GitHub 社区:https://aka.ms/nniis