在人工智能领域,算法工程师在训练神经网络模型的过程中,完成网络构建和准备好训练数据后,往往需要对模型进行各种参数优化,以获得更好的模型效果。但调参其实并不简单,背后往往是通宵达旦的参数调试与效果验证,并需要做大量的实验,不仅耗时还耗费大量算力。
这个时候,往往想尝试自动超参搜索的算法工程师,大多会开始担心算力要求所带来的额外训练成本。
莫慌!百度全功能 AI 开发平台 BML 带着免费算力额度与自动超参搜索能力来了!
全功能 AI 开发平台 BML(Baidu Machine Learning) ,是为企业和个人开发者提供机器学习和深度学习的一站式 AI 开发服务,并提供高性价比的算力资源,助力企业快速构建高精度 AI 应用。BML 提供了从数据采集、数据清洗、数据标注、智能标注与多人标注、模型训练生产到模型管理、云端及离线推理服务管理等 AI 开发过程的全生命周期管理功能。
BML 内置百度超大规模预训练模型,只需少量数据即可获得高精度模型效果。目前,BML 已经支持脚本调参、Notebook 与自定义作业这三种开发建模方式,灵活匹配企业开发者的开发习惯。
在目前的脚本调参使用流程中,BML 已经预设了模型超参数,但由于用户数据集内容丰富多样,预设的超参数很难在所有的数据集上得到很好的训练效果。用户可以自行调整超参数,但是手动调参十分耗费人力。为了减轻用户在调参上的精力投入, BML 的研发大佬们日夜奋战,为用户上线了自动超参搜索的功能,帮助用户自动搜索效果较优的超参组合,省去调参的烦恼。
话不多说,进入本次正题,百度 BML 的自动超参搜索技术有哪些亮点?
BML 提供的搜索算法有:
随机搜索:顾名思义是在参数变量的变化区间中随机采样参数组合成候选集,应用候选集进行训练和效果对比。随机搜索是普适的效率较高的搜索方法,通常作为基线标准,适用于对效率要求较高的情况,但不能保证一定能搜索到最佳的超参。
贝叶斯搜索:在搜索空间中随机选取初始超参数点,然后根据已有超参对应的指标结果拟合概率模型,通过概率模型推测最佳超参点,接着再试验得到这些超参点的结果。如此反复优化,再有限试验次数中搜索出合适的超参数。基于模型的序贯优化方法(SMBO, Sequential Model-Based Optimization)是贝叶斯搜索的一种范式,包括两个部分: 代理模型(surrogate model)和 采集函数(acquisition function)。根据代理模型和采集函数的不同,贝叶斯搜索方法也有许多实现形式,其中 TPE(Tree-structured Parzen Estimator)是一种全局探索能力较佳的方法,采用核密度估计方法(KDE, Kernel Density Estimation)生成代理模型,采用 EI(Expected Improvement)作为其采集函数生成新采样点。
进化算法:进化算法是一种基于种群概念的超参搜索策略,把超参配置视为一个种群,并行优化多个种群并在种群内部进行优胜劣汰的筛选,最终输出最佳模型。这个过程(如下图所示)是从遗传算法获得的灵感,种群的初始化采用随机的方式生成,个体的优胜劣汰具体指利用(exploit)和探索(explore)两个步骤,不仅可能会从表现较好的个体中复制参数,它还能通过随机扰动修正当前的值而探索新的超参数组合。
图片来源:https://arxiv.org/pdf/1711.09846v1.pdf
百度创新提出了随机微分方程无梯度优化算法 PSHE2,采用哈密尔顿动力系统搜索参数空间中“势能”最低的点以替代随机扰动,加速迭代收敛。超参搜索过程中想要求得最优解就是要找到更新超参数组合的方法,即如何更新超参数,才能让算法更快更好地收敛到最优解。PSHE2 算法根据超参数本身历史的最优,在一定随机扰动的情况下决定下一步的更新方向。过程如图所示。
图片来源:
https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.5/docs/tutorial/autofinetune.md
上表归纳了一下这些搜索方法的优缺点。总之,网格搜索和随机搜索实现上比较简单,不利用先验知识选择下一组超参数,其中随机搜索效率相对较高。贝叶斯搜索和进化算法需要用前一轮的信息进行迭代搜索,搜索效率明显提升。
BML 自动超参搜索功能基于百度自研自动超参搜索服务,服务运行过程如下图所示,依靠百度智能云 CCE 算力,支持多自动搜索任务并发。为了提供一个“好用”的自动超参搜索服务,架构实现时在并发搜索效率提升和系统容错方面着重进行了考虑。
一次超参搜索任务包含以下流程:
业务平台把超参搜索任务的用户配置信息提交到超参搜索服务,会创建一次搜索实验(Experiment),并记录到 db 中。
搜索服务把任务提交到 Experiment controller, 由 controller 初始化创建 Trial 管理模块,并负责 Experiment 生命周期的管理。
Trial 是具体的训练试验,一个 Experiment 会产生多个 Trial 来探索不同超参数组合的最终效果。Tuner 是超参生成的模块,会根据选择的超参搜索算法,推荐下一个 Trial 所使用的超参值。在 Trial 管理模块中,Exp Manager 会负责生成若干 Trial, 向 Tuner 请求具体的试验超参数,并向 Trial Scheduler 发送 Trial 任务信息。
Trial Scheduler 会与底层资源交互实际启动 Trial。Trial Scheduler 会管理所有 Trial 的生命周期。
每个 Trial 运行完成后,会向 Exp Manager 汇报指标等信息,用于汇报给 tuner 并记录到 db。
BML 自动超参搜索主要有以下特性:
简单易用:相比于同类产品的复杂配置,BML 在为用户提供必须的开放配置项的前提下,尽可能减少超参配置的繁琐程度,凡是可以自动化的工作均不对用户可见。
模型丰富:与脚本调参上提供的丰富的模型打通,可以直接配置化完成相应任务的搜索,甚至不用写代码!
容错机制:自动超参搜索任务具有模型训练次数多、任务整体运行时间长的特点,受显存资源限制,有些搜索出的超参数无法成功运行。兼顾搜索效果和可用产出,增设模型训练失败次数阈值,把 Experiment 和 Trial 这样多任务的复杂状态管理分拆到各层模块中,尽可能为用户提供搜索出的可用结果。
支持早停与采样:搜索框架内部支持自动早停,当达到设定的预期结果时即可自动停止;同时也支持在界面上手动提前停止,减少用户的等待时间,避免不必要的算力消耗。支持用户选择大数据集时自动进行采样,减少超参搜索训练耗时,以尽快搜索出合适的超参为上。
高效分布式智能搜索:深度学习模型的训练时间往往较长,对于大规模数据集或者复杂模型的搜索任务,单机串行的搜索方式几乎不可用。我们注意到有的搜索算法中每次试验是可以独立进行训练的(如网格搜索、随机搜索),可以直接对所有试验并行化;有的搜索算法虽然本质基于迭代,但每个迭代中的试验运行仍然是相互独立的,因此我们可以在迭代内部进行并行化搜索。BML 内部实现了智能调度系统,根据不同的算法类型,采用不同的并发策略,可以大幅度降低整体搜索时间。
上手实操:自动超参搜索使用攻略
1. 首先登录链接创建一个脚本调参项目,如果已经有项目了,直接用就可以!目前支持超参搜索的项目类型有图像分类(单标签和多标签)及物体检测,创建对应类型的项目就可以了
链接:
https://ai.baidu.com/bml/app/project/script/list
2. 在项目里新建任务,配置好任务的网络、数据、脚本之后,就可以看到“配置超参数”的选项了。这里如果已经有超参搜索的结果,可以直接勾选“已有超参搜索结果”来使用,如果第一次使用还没有,就直接选择“自动超参搜索”。
3. 目前 BML 支持了三种超参搜索算法,如图,分别是贝叶斯搜索、随机搜索和进化算法,可以根据自己需要选择一种来搜索。具体配置项说明可以参考技术文档。
3.1 贝叶斯搜索的参数说明
【初始点数量】代表贝叶斯搜索中,初始化时参数点的数量,该算法基于这些参数信息推测最优点 ,填写范围1-20。
【最大并发量】贝叶斯搜索中,同时进行试验的数量,并发量越大,搜索效率越高,填写范围1-20。不过这个并发量也会受限于页面最下方选择的 GPU 数量,实际并发量是二者的较小值。
【超参范围设置】可以是默认配置,也可以手动配置。默认的话百度的工程师们已经帮我们对不同网络、GPU 卡型设置了一个基本靠谱的搜索范围,直接用就可以。当然也可以手动配置,可以自定义各个超参的范围,可以看到物体检测支持以下这些超参自定义搜索范围:
【最大搜索次数】是指最多组合出多少组超参并跑试验,当然有可能会因为提前达到目标而停止,节约费用。
【数据采样比例】使用超参搜索时,会对原始数据集进行采样后再训练,加快搜索速度。当数据集并不大时,不推荐采样哟,可能会影响最终效果,只有大数据量时才有使用采样的必要。
【最高 mAP/最高精确率】是指大家期望模型效果可以达到的 mAP(物体检测)或准确率(图像分类)的值,当试验中达到这个值了搜索就会停止,避免后续浪费搜索时间。
3.2 随机搜索参数说明
随机搜索最简单啦,就不需要再额外配置算法相关的参数了,其它公用的选项和贝叶斯搜索的含义是一样的,参考贝叶斯搜索即可。
3.3 进化算法参数说明
进化算法是一种效果较好的算法,应用此算法时也需要进行较多的选项设置:
【迭代轮数】进化算法运行中迭代的轮数,范围5-50。
【扰动间隔】进化算法每隔几个 epoch 就会进行随机扰动,利用随机因素防止算法结果收敛于局部最优解。
【扰动比例】类似于染色体交叉的形式,迭代中一个种群内最好与最坏的个体依据扰动比例进行交叉。
【随机初始化概率】在扰动中,有一定概率对个体的超参数进行初始化。
【种群个体数量】一个个体代表一种超参数设置,一个种群中包含多个个体。
其它选项和贝叶斯搜索的含义一致,也不重复了。进化算法的配置需要对算法的原理有一定的了解,如果对算法不明白的,就直接用百度给的默认值吧!
4. 超参的选项设置完成了,最后选择 GPU 卡类型和数量,以及最大搜索时间,就可以提交任务啦!这里默认的搜索时间是24小时,毕竟超参搜索会运行多次试验,时间会比较长,需要耐心等待,当然如果选的 GPU 卡数越多,并发试验数就越高,从提交任务到搜索完成的耗时就会变少,这是显而易见的.
5. 任务提交之后,过一会当任务进入“超参搜索中”的状态时,就可以看到各个试验的进度了,包括各个试验的状态、日志和准确率(mAP)。
6. 超参搜索训练完成后,效果最优的5次试验可以看到详细的评估结果,也能用于后续的效果校验和发布。当然,如果在超参搜索时对数据进行了采样,这时候可以重新发起一次训练任务,用这次搜索出来效果满意的超参数进行全量数据训练,从而获得完整数据的模型效果。
我们对比了图像分类、物体检测、实例分割等任务在使用普通脚本调参和超参搜索的效果情况,以下是5个不同数据集在 BML 平台上分别使用默认脚本调参参数、超参搜索使用进化算法、超参搜索使用贝叶斯搜索算法的效果对比。图中左边纵轴为模型的准确率,右边纵轴为超参搜索算法在效果上提升的比例。可以看到在不同数据集上使用超参搜索后效果均有提升,在默认参数精度已经超过85%的情况下,使用超参搜索仍能提升约5%,在默认参数效果较差的情况下,超参搜索的提升效果更为明显,可高达22%。
在常规操作下,可用的深度学习自动超参搜索由于需要集群计算资源,往往被认为只有大公司才能配置,普通开发者难以上手尝试。通过使用百度全功能 AI 开发平台 BML,预算有限也有机会用上自动超参搜索,开发效率瞬间搭上火箭速度,摆脱人力“炼丹”的束缚。BML 现在还为新用户提供100小时免费 P4 显卡算力!羊毛在向你招手,快快点击【阅读原文】进入官网 BML 页面薅一把吧!
如果你发现某个网址别人上得了,但是您上不了。您可以试试添加使用下面这些DNS地址,或直接询问本地ISP服务提供商:北京:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195上海:202.96.199.132 202.96.199.133 202.96.209.5 202.96.2
Java Springboot自定义微信公众号菜单面向百度编程,代码拿来即用自定义菜单类型(实体类)ButtonClickButtonViewButtonMenuAccessToken自定义菜单工具类WeiXinUtilMemuUtil创建自定义菜单MenuCreat面向百度编程,代码拿来即用自己做自定义微信公众号菜单是遇到了一些坑,现在已经把坑填平,拿来即用。自定义菜单类型(实体类)Bu..._sprinbgoot 扫码跳转菜单
1、官方文档:https://www.elastic.co/guide/en/x-pack/current/index.html2、Install X-Pack into Elasticsearchbin/elasticsearch-plugin install x-pack3、Start Elasticsearchbin/elasticsearch4、Install X-Pack into_kibana manage permission
图书简介《MySQL数据库原理及应用》从教学实际出发,系统地介绍了MySQL数据库的有关原理和基本操作,主要内容包括数据库技术概述、MySQL概述、数据库基本操作、数据表、索引、结构化查询语言SQL、视图、触发器、存储过程和存储函数、访问控制与安全管理、备份与恢复、PHP与MySQL数据库编程。《MySQL数据库原理及应用》的内容基于Sailing数据库展开讲述,并提供了大量的实例作为参考,可以帮..._sailing数据库
简单的线性回归标准的线性回归模型通过一系列的预测参数的线性组合来预测一个数字变量,其系数通过最小化训练集上的平方预测误差的总和进行学习。 线性回归严重依赖于数据的假设,其更多的数学观点如下: 普通最小二乘法与上述假设之间的关系: 使用MLE或MAP进行权重估计: 损失函数——最小平方损失: Q:模型与损失函数之间有什么关系?
环球震惊事件:他高中时因不足1.8米被校篮球队淘汰;他职业生涯中有超过9000球没投进、输了近300场球赛;有26次被托付执行最后一击,而他却失手了;他的生命中充满了失败。他没有放弃,他的身高涨到了1.98米;他没有放弃,他6得NBA总冠军,5得MVP。我可以接受失败,但绝对不能接受自己都未曾奋斗过。--迈克尔。乔丹#30秒MBA#【德鲁克谈时间管理】1.始终坚持记录自己的时间耗用情况。这..._阿里郎"教你用销售流程追老婆
Luaj是Java的Lua解释器,基于Lua5.2.x,Luaj是基于Java的实现,可在Java应用中集成Lua虚拟机。简单来说,Luaj是Lua的Java版本的实现,使用Luaj可在Java程序中运行Lua程序,换言之,也就是为Java带来了脚本功能。Luaj对JavaSE和Android都提供了支持。在Cocos2dx中,Luaj是用来完成Lua和Java之间的数据交互的。..._cocos.cocos2d.luaj
图像的腐蚀和膨胀都属于形态学的基本运算。什么是形态学?形态学操作可以说是基于形状的一系列图像处理操作,通过将结构元素(这里是kernal)作用于输入图像,从而得到输出图像。大都是在二值图像的基础上进行的操作。膨胀操作类似于“领域扩张”,原二值图像中分为前景和背景,膨胀操作就是把前景区域扩大;腐蚀操作类似于“领域压缩”,图像中高亮的前景部分的区域会缩小。以下图为例:上图中左边的图像为经过ot..._腐蚀膨胀尺寸
1.Category概述那的Category的使用场景有那些呢:1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。Category能实现上面的需求,当然也有使用Category是需要注意的问题:1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继_oc 泛型不能添加nsinter
3dmax软件给模型添加标注尺寸教程 3dmax软件如何给模型添加标注尺寸?在使用3dmax的过程之中,如果我们想要标注模型尺寸数值,应该怎样添加标注呢?那么,今天小编就和大家讲解一下,3dmax软件给模型添加标注尺寸的步骤方法吧!方法简单易懂,希望对小伙伴们有所帮助, 3dmax软件给模型添加标注尺寸方法如下: 步骤一、使用3dmax软件的“工具”—“测量距离”,可以测量任意位置的距离。包括模型之间的尺寸。 步骤二、我们可以看到使用3dmax软件测量距离工具后的模型尺._3dsmax能标注尺寸吗
应用场景:MYSQL 5.7 设置简单密码问题描述:MYSQL 5.7 设置简单密码方式MySQL版本从5.5升级到5.7之后,强制使用复杂密码,首次使用随机密码登录后想修改root用户密码为简单密码,会报错如下:mysql> set password=password("root");ERROR 1819 (HY000): Your password does not satisfy the current policy requirements原因分析:目录上面报._mysql5.7的密码是哪一个属性
这个话题跟我的另一篇博客“SQL性能优化”应该是类似的,只不过是关注方面不同。为什么会有意写这样一篇文章呢?这是因为遇到一个项目需要将大量(1-10万)的手机号码存储到txt文件中(每行一个)然后读取到ListBox控件中显示。起初的时候没有多想就用了最直接的方式,读取一万的时候还可以,但是到了五万、十万条感觉就很慢了几乎假死。怎么办呢?不得不思考。 字符串操作的优化_用户体验除了性能还有哪些