作者:杰少,公众号:炼丹笔记

Model Search

简介

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

  • 对于给定的问题,合适的神经网络是什么样子的?
  • 网络应该多深比较合适?
  • 该使用哪种类型的图层?
  • 是否LSTM已经够用了还是Transformer会更好?亦或是两者兼而有之?
  • ensembling或蒸馏可以提高性能吗?

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

近年来,AutoML算法的出现帮助了非常多的研究人员在不需要手动实验的情况下自动找到合适的神经网络。

例如神经结构搜索(NAS)这样的技术,使用强化学习(RL)、演化算法和组合搜索等算法,从给定的搜索空间构建神经网络。通过适当的设置,这些技术已经证明它们能够带来比手工设计的更好的结果。但通常情况下,这些算法的计算量很大,需要数千个模型进行训练才能收敛。此外,他们探索的搜索空间是特定领域的,并纳入了大量前人的知识,不能很好地进行跨领域的转移。例如,在图像分类中,传统的NAS搜索两个好的构建块(卷积块和下采样块),它按照传统的约定排列来创建完整的网络。

为了克服这些缺点并将AutoML解决方案的使用范围扩展到更广泛的研究社区,我们很高兴宣布Model Search的开源版本,这个平台可以帮助研究人员高效、自动地开发最佳的ML模型。Model Search并不专注于某个特定的领域,它是领域无关的、灵活的,并且能够找到最适合给定数据集和问题的适当体系结构,同时最小化编码时间、工作量和计算资源。它建立在Tensorflow之上,可以在单机上运行,也可以在分布式环境下运行。

1. 概览

Model Search系统由多个训练器、一个搜索算法、一个迁移学习算法和一个数据库组成。该系统以自适应但异步的方式对各种ML模型(不同的框架和训练技术)进行训练和实验评估。当每个trainer独立进行实验时,所有trainers都分享从他们的实验中获得的知识。在每个循环开始时,搜索算法查找所有已完成的试验,并使用beam search来决定下一步的试验内容。然后,它调用迄今为止发现的最佳体系结构之一的变异,并将生成的模型分配给trainer。

该系统从一组预定义的blocks构建神经网络模型,每个block表示一个已知的微结构,如LSTM、ResNet或Transformer层。通过使用预先存在的体系结构组件块,模型搜索能够跨域利用NAS研究中现有的最佳知识。这种方法也更有效,因为它探索的是结构,而不是其更基本和更详细的组件,因此减少了搜索空间的规模。

模型搜索框架是建立在Tensorflow之上的,所以block可以实现任何以张量作为输入的函数。例如,假设有人想引入一个新的搜索空间,该空间由一系列的微体系结构组成。该框架将采用新定义的块,并将其纳入搜索过程,以便算法可以从提供的组件构建最佳的神经网络。所提供的块甚至可以完全定义的神经网络,已经知道这些神经网络可以解决感兴趣的问题。在这种情况下,可以将Model Search配置为一个功能强大的ensembling机器。

在Model Search中实现的搜索算法具有自适应性、贪婪性和增量性,使其收敛速度快于RL算法。不过,它们模仿了RL算法的“explore & exploit”特性,将搜索结果分离出来(explore step),并通过整合发现的好的候选来提高准确性(exploit step)。核心的搜索算法在对体系结构或训练技术应用随机变化(例如,使体系结构更深入)之后自适应地修改前k个执行实验中的一个(其中k可由用户指定)。

为了进一步提高效率和准确性,可以在不同的内部实验之间进行迁移学习。Model Search有两种方式-通过知识提炼(knowledge distillation)或权重共享(weight sharing)。知识提炼可以通过添加一个损失项来提高候选项的准确度,该损失项与高性能模型的预测值相匹配,此外还有基本事实。另一方面,权重共享通过从先前训练的模型中复制合适的权重并随机初始化剩余的模型,从先前训练的候选模型中引导网络中的一些参数(应用变异后)。这使得训练更快,从而有机会发现更多(更好)的体系结构。

2. 实验结果

Model Search以最少的迭代改进了生产模型。在最近的一篇论文中,我们通过发现一个用于关键词识别和语言识别的模型,展示了Model Search在语音领域的能力。在不到200次的迭代中,所得到的模型比由专家设计的内部最先进的生产模型精度稍有提高,使用的可训练参数少了约130K(184K VS 315K)。

我们还应用Model Search来寻找一种适合于在被深度探索的CIFAR-10图像数据集上进行图像分类的体系结构。

使用一组已知的卷积blocks,包括卷积、resnet块(即两个卷积和一个skip连接)、NAS-A单元、全连接层等,我们观察到,在209次试验中(即仅探索209个模型),我们能够快速达到91.83的基准精度。相比之下,在5807次NasNet算法(RL)试验和1160次PNAS(RL+Progressive)试验中,先前表现最好的人达到了相同的threshold精度。

3. 小结

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

二、知识点补充&简单案例

关于序列搜索策略的决定取决于一个spectrum。如果我们只关心准确性,那么很明显枚举所有的情况(exhaustive search)是最佳的选择。但是如果我们更加关注计算成本的话,那么贪心搜索(greedy search)将会是一个不错的选择。而Beam Search就是二者中间,希望能在准确性和计算成本之间取得一个折中。

Beam search有一个超参数,叫做beam size k。在时间步骤1,我们选择最高条件概率的个token。它们中的每一个将分别是k个候选输出序列的第一个token。在随后的每个时间步上,基于上一时间步的候选输出序列,我们继续从k|y|中选择具有最高条件概率的候选输出序列。

下图是一个beam search size为2的案例。

  • A;
  • C;
  • A,B;
  • C,E;
  • A,B,D;
  • C,E,D;

最后,我们基于这六个序列(例如,包括“”和“”之后的丢弃部分)获得最终候选输出序列集。然后我们选择以下得分最高的序列作为输出序列:

2. 案例

直接运行作者开源的工具包会有较多的bug需要自己去调。

2.1 下载工具包

!git clone https://github.com/google/model_search.git
%cd ./model_search/
!ls

2.2 安装依赖文件

!pip install -r requirements.txt
!ls model_search # 如果没有protoc,先安装protoc
# !brew install protoc
!protoc --python_out=./ model_search/proto/phoenix_spec.proto
!protoc --python_out=./ model_search/proto/hparam.proto
!protoc --python_out=./ model_search/proto/distillation_spec.proto
!protoc --python_out=./ model_search/proto/ensembling_spec.proto
!protoc --python_out=./ model_search/proto/transfer_learning_spec.proto

2.3 数据读取

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.preprocessing import MinMaxScaler!lsLICENSE          WORKSPACE        [34mmodel_search[m[m
README.md        default.csv      requirements.txt## 该文件下载自:https://archive.ics.uci.edu/ml/machine-learning-databases/00350/default%20of%20credit%20card%20clients.xls
data=pd.read_excel('../default of credit card clients.xls',skiprows=1)
data=data.rename({'default payment next month':'default'}, axis=1)
data.head()

categorical=['SEX','EDUCATION','MARRIAGE']
numeric=['PAY_0','PAY_2','PAY_3','PAY_4','PAY_5','PAY_6']data_final=pd.get_dummies(data=data[categorical], columns=['SEX','EDUCATION','MARRIAGE'])
data_final.head()

data_default=pd.concat([data['default'], data_final, data[numeric]],  axis=1)
data_default.to_csv('default.csv',sep = ',', index = False, header = None)
data_default.head()

2.4 模型训练

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltfrom sklearn.preprocessing import MinMaxScalerimport model_search
from model_search import constants
from model_search import single_trainer
from model_search.data import csv_data %matplotlib inline trainer = single_trainer.SingleTrainer(data=csv_data.Provider(label_index=0, logits_dimension=2, record_defaults=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], filename="default.csv"),spec='./model_search/configs/dnn_config.pbtxt')!mkdir tmp
!mkdir ./tmp/run_exampleimport sys
from absl import app# Addresses `UnrecognizedFlagError: Unknown command line flag 'f'`
sys.argv = sys.argv[:1]# `app.run` calls `sys.exit`
try:app.run(lambda argv: None)
except:pass

建议用GPU训练,CPU可能会很慢。

trainer.try_models(number_models=5,train_steps=5,eval_steps=1,root_dir="./tmp/run_example",batch_size=512,experiment_name="example",experiment_owner="model_search_user")

参考文献

  • Introducing Model Search: An Open Source Platform for Finding Optimal ML Models:https://ai.googleblog.com/2021/02/introducing-model-search-open-source.html
  • Beam Search:https://d2l.ai/chapter_recurrent-modern/beam-search.html
  • https://github.com/srivatsan88/YouTubeLI/blob/master/Model_Architecture_Search.ipynb
  • https://www.youtube.com/watch?v=-7TZ-IKMJi8

Model Search:炼丹师最强危机,谷歌开源最强AutoML工具!相关推荐

  1. java实现镜像系统_谷歌开源Java镜像构建工具Jib

    容器的出现让Java开发人员比以往任何时候都更接近"编写一次,到处运行"的工作流程,但要对Java应用程序进行容器化并非易事:你必须编写Dockerfile,以root身份运行Do ...

  2. 谷歌开源NLP模型可视化工具LIT,模型训练不再「黑箱」

    视学算法报道 编辑:陈萍.魔王 转载自公众号:机器之心 深度学习模型的训练就像是「黑箱操作」,知道输入是什么.输出是什么,但中间过程就像个黑匣子,这使得研究人员可能花费大量时间找出模型运行不正常的原因 ...

  3. 谷歌正式开源Model Search!自动优化并识别AI模型,最佳模版唾手可得

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要8分钟 Follow小博主,每天更新前沿干货   Model Search:查找最佳机器学习模型的开源平台 2 月 19 日,谷歌 宣布 发布 ...

  4. 活久见!谷歌开源“大杀器”,CV、NLP都能用!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 萧箫 发自 凹非寺 来自 | 量子位 好消息,谷歌将AutoML算法 ...

  5. 学习谷歌开源工具Magenta

    学习谷歌开源工具Magenta Magenta介绍 Magenta下载 python安装 1)前置安装 2)下载python3 magenta环境安装 使用Magenta 编辑shell脚本 用自己的 ...

  6. 谷歌开源 TFGAN,让训练和评估 GAN 变得更加简单

    作者:思颖 概要:训练神经网络的时候,通常需要定义一个损失函数来告诉网络它离目标还有多远. 三年前,蒙特利尔大学 Ian Goodfellow 等学者提出「生成式对抗网络」(Generative Ad ...

  7. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search

    作者|魔王.杜伟 来源|机器之心 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 TensorFlow 构建,非常灵活,既可以找出最适合 ...

  8. 用AutoML找到更小、更快、更好的模型,谷歌开源Model Search

    本文转载自机器之心. 作者:Hanna Mazzawi等 编辑:魔王.杜伟 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 Tensor ...

  9. 性能超过人类炼丹师,AutoGluon 低调开源

    自动机器学习效果能有多好?比如让 MobileNet1.0 backbone 的 YOLO3 超过 ResNet-50 backbone 的 faster-rcnn 六个点?AutoGluon 的问世 ...

最新文章

  1. Linux 文件和目录的属性及权限
  2. Serverless 架构下的服务优雅下线实践
  3. 不起眼的夫妻店,为何会被阿里、京东、苏宁同时盯上?
  4. javaweb项目启动后自动查询数据库并刷新数值
  5. 互联网1分钟 | 0920
  6. windows环境里React-Native运行失败的原因之一,安卓模拟器未启动
  7. 再次分享一个多选文件上传方案
  8. oracle差异收集明细,Oracle收集表的数据与统计信息差异
  9. [开发笔记]-判断当前是否联网
  10. 程序员都会的 35 个 jQuery 小技巧
  11. Sky公司的爱丁堡数据中心的能源效率纳入欧盟能效标准
  12. python安装后没有命令_Python的下载安装
  13. [javascript]实现登陆界面拖动窗口
  14. 在Linux下安全删除eSATA设备
  15. 修改Ubuntu的键盘映射
  16. 达梦数据库实时主备环境的搭建(DM7)
  17. latex 表格居中
  18. 奇虎360笔试题 挑选镇长
  19. php 识别二维码内容
  20. Mesh减面算法详解

热门文章

  1. 网络基础知识----------iptables
  2. 【Python】Python基础
  3. Android 获取外网IP,实测有效
  4. oracle for dotnet
  5. 信息北航身份认证_信息北航丨北航第一服务平台,你值得关注!
  6. MYSQL数据库VALUES_MySQL数据库“十宗罪”(十大经典错误案例)
  7. SPSS 26安装教程
  8. SpringBoot(一)——快速入门
  9. python fonttool_Python wx.Font方法代码示例
  10. fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法