推出 Model Search:寻找最佳 ML 模型的开源平台

文 / 研究工程师 Hanna Mazzawi 和研究员 Xavi Gonzalvo,Google Research

神经网络 (NN) 的成功通常取决于它对各种任务的泛化能力。然而,良好泛化的 NN 在设计上具有一定挑战,研究界目前对神经网络如何泛化的理解仍较为有限,如:

  • 对于给定的问题,合适的神经网络是什么样的?它应该有多深入?

  • 应该使用哪种类型的层?LSTM 足够吗?还是 Transformer 层更好?或者两者结合?

  • 集成 (Ensemble) 或蒸馏 (Distillation) 会提升性能吗?

当我们考虑到机器学习 (ML) 领域时,这些棘手的问题会变得更具挑战性,因为可能存在比其他领域更好的直觉和更深的理解。

近年出现的 AutoML 算法 [如 123] 可以帮助研究人员自动找到合适的神经网络,无需人工实验。神经架构搜索 (NAS) 结合强化学习 (RL)、进化算法和组合搜索等算法,从给定的搜索空间中构建神经网络。在适当的设置下,这些技术已经能够提供优于人工设计的同类模型的结果。但是,这些算法通常计算量很大,需要训练成千上万的模型才能收敛。此外,它们探索领域特定的搜索空间,结合了大量的先验人类知识,但无法很好迁移至其他领域。例如,在图像分类中,传统 NAS 搜索两个良好的构建块(卷积和下采样块),按照传统惯例进行排列以创建完整的网络。

为克服这些缺点,并将 AutoML 解决方案的使用范围扩展到更广泛的研究社区,我们很高兴推出 Model Search 平台的开源版本,帮助研究人员高效、自动地开发最佳 ML 模型。Model Search 不专注于特定领域,具有跨领域通用和灵活的特性,能够找到最适合给定数据集和问题的架构,同时最大程度地减少编码时间、工作量和计算资源。它基于 TensorFlow 构建,可在单机或分布式环境中运行。

  • Model Search
    http://github.com/google/model_search

概览

Model Search 系统由多个训练器、一个搜索算法、一个迁移学习算法和一个用于存储各种已评估模型的数据库组成。系统以自适应但异步的方式运行各种 ML 模型(不同架构和训练技术)的训练和评估实验。虽然各个训练器独立进行实验,但所有训练器都会共享从实验中获得的知识。每个周期开始时,搜索算法会查找所有已完成的试验,并使用波束搜索 (Beam Search) 决定下一步尝试。然后,它在已发现的最佳架构之一上调用突变,并将生成的模型分配回训练器。

△ Model Search 示意图:分布式搜索和集成:每个训练器独立运行,训练和评估一个给定的模型。结果与搜索算法共享并进行存储。随后,搜索算法在其中一个最佳架构上调用突变,接着将新模型送回训练器进行下一次迭代。S 是训练和验证样本的集合,A 是训练和搜索过程中使用的所有候选对象

系统使用一组预定义的构建块构建神经网络模型,每个构建块代表一个已知的微架构,如 LSTM、ResNet 或 Transformer 层。使用预先存在的架构组件块,Model Search 得以利用 NAS 跨领域研究的现有最佳知识。这种方法也更有效率,因为它探索的是结构,而不是更基本和更详细的组件,所以能够减小搜索空间的规模。

△ 运行良好的神经网络微架构块,如 ResNet Block

由于 Model Search 框架基于 TensorFlow 构建,因此构建块 (Block) 可以实现将张量作为输入的任意函数。例如,假设要引入一个以既定微架构构建的新搜索空间。该框架将把新定义的块纳入搜索过程,使算法可以从提供的组件中构建最佳的神经网络。提供的块甚至可以是已知对目标问题有效的完全定义的神经网络。在这种情况下,Model Search 可以被配置为仅充当强劲的集成机器。

  • TensorFlow
    https://tensorflow.google.cn/

Model Search 中实现的搜索算法是自适应、贪婪和增量的,使得它们比 RL 算法收敛得更快。不过,它们也确实模仿了 RL 算法的“探索和利用”性质,分离对良好候选对象的搜索(探索步骤)并集成发现的良好候选对象以提高准确率(利用步骤)。主搜索算法在对架构或训练技术进行随机更改(如使架构更深入)后,自适应地修改前 k 个表现最好的实验之一(其中 k 可由用户指定)。

△ 网络在多次实验中演变的示例:每种颜色代表不同类型的架构块。最终网络是由高性能候选网络的突变形成,在这种情况下增加了深度

为了进一步提高效率和准确率,可在各种内部实验之间转移学习。Model Search 采用两种方式做到这一点 - 知识蒸馏 (Knowledge Distillation) 和权重共享。知识蒸馏可以添加损失项提高候选对象的准确率,该损失项不仅与基本事实匹配,还与高性能模型的预测相匹配。另一方面,权重共享则复制先前训练的模型中的合适权重,并随机初始化剩余的参数,从先前训练过的候选对象中引导网络中的部分参数(应用突变后)。这样可以加快训练速度,有机会带来更多(和更好)的架构。

实验结果

Model Search 以最少的迭代改进了生产模型。在最近一篇论文中,我们通过发现一个用于语音唤醒 (Keyword Spotting) 和语言识别的模型,展示了 Model Search 在语音领域的能力。经过不到 200 次迭代,所得模型比专家设计的内部最先进生产模型在准确率上略有提高,而使用的可训练参数减少了约 130K(184K 个参数对比 315K 个参数)。

△ 在我们的系统中,相较于先前关键词发现的生产模型,给定迭代的模型准确率,在链接的论文中可以找到类似的语言识别图表

  • 最近一篇论文
    https://pdfs.semanticscholar.org/1bca/d4cdfbc01fbb60a815660d034e561843d67a.pdf

   

我们还应用 Model Search 在经过大量研究的 CIFAR-10 成像数据集上寻找适合图像分类的架构。使用一组已知的卷积块,包括卷积、resnet 块(即两个卷积和一个跳过连接)、NAS-A 单元、全连接层等,我们观察到,我们能够在 209 次试验(即只探索了 209 个模型)中迅速达到 91.83 的基准准确率。相比之下,之前表现最好的 NasNet 算法 (RL) 在 5807 次试验中达到了同样的阈值准确率,PNAS (RL + Progressive) 则是 1160 次。

  • NasNet 算法 (RL) 
    https://arxiv.org/pdf/1707.07012.pdf

  • PNAS (RL + Progressive)
    https://arxiv.org/pdf/1712.00559.pdf

结论

我们希望 Model Search 代码能够为研究人员提供一个灵活的、与领域无关的 ML 模型发现框架。基于给定领域的先前知识,我们相信,提供由标准构建块组成的搜索空间后,该框架将足以在经过良好研究的问题上构建具有最前沿性能的模型。

  • Model Search 代码
    http://github.com/google/model_search

致谢

特别感谢所有代码贡献者对开源和论文的贡献:Eugen Ehotaj、Scotty Yak、Malaika Handa、James Preiss、Pai Zhu、Aleks Kracun、Prashant Sridhar、Niranjan Subrahmanya、Ignacio Lopez Moreno、Hyun Jin Park 和 Patrick Violette。

更多 AI 相关阅读:

 点击屏末 | 阅读原文 | 开启 Model Search 之旅

已标记关键词 清除标记
相关推荐