机器之心原创
作者:邱陆陆
从回归分析的出现到深度学习的蓬勃发展,这条算法的进化路线与其说是「机器替代人」,不如说是「机器帮助人类完成我们不擅长的事」。这份「不擅长」列表里有「不擅长从大量数据中寻找规律」、「不擅长同时完成大量变量的优化」、「不擅长从高维数据中提取特征」。在今天,又有一批研究者在反省人类是否也「不擅长进行模型设计与模型调优」,以及机器如何能提供帮助。近两年,以谷歌为代表的公司再次将这一类问题以 AutoML 之名推向众人视野之中,试图探讨这一技术能否让更多行业专家能够跨越工程与算法的障碍,仅仅利用专业知识和数据积累,就能在机器的帮助下完成深度学习算法的开发。
在国内,探智立方就是持有这样愿景的一家公司,这家成立于今年年初的公司致力于开发一个有「自主模型设计」能力的平台——DarwinML——以进化算法为基础,找到模型不依赖人工设计的「进化之路」,从而降低人工智能的应用门槛,让各行业的 IT 人员,行业专家能更简便的将人工智能落地于各种适合并需要的场景中,解決人才短缺及技术能力不足的普遍問題。
七月,机器之心采访了探智立方的两位创始人,CTO 钱广锐和产品总监宋煜,深入了解这个走向实际应用的 AutoML 系统。
机器之心:探智立方希望以 AutoML 解决哪些问题?
宋煜:AutoML 并不是一个全新的概念,这两年它获得了广泛的关注,是因为大家看到数据集本身的分布和模型的关系是十分密切的。把一个论文中效果非常好的模型应用到某一个特殊场景下,模型的表现下降也会十分严重。两三年前,大家更多地会以「超参数调优」的形式进行模型改进。从基于规则的方法到贝叶斯方法,为了找到一个合理的、趋近于最优解的解空间,大家做了各种不同的尝试;有很多超参调优的自动化工具随之应运而生。之后大家发现除了超参之外,有时必须要改变网络结构等等。最后,大家开始思考:机器是不是可以设计一些模型。
之前我们在做模型的优化的时候也感受到,最有限的资源还是人的时间。因此,从去年开始我们尝试把模型优化的过程尽量抽象成一个纯数学问题,然后利用机器的强大计算力,以搜索拟合的方式,在有限的时间空间内来寻找全局最优解。探智立方今天就是以 AutoML 为主要方向,解决实际环境中人工智能相关应用模型自动化设计和优化的问题。
机器之心:AutoML 都有哪些类别?探智立方选择的是其中的哪一种?
钱广锐:在业界,从「头」学习的 AutoML 算法大概有三种。除了进化算法之外,还有最早以谷歌为代表的纯强化学习算法。目前从论文以及实践效果来看,进化算法的效率比强化学习要高些。除此之外,还有目前也在探索中的元学习方法。
进化算法本身也有很多分支,比如「进化策略」和「演化方法」。谷歌采用的是演化做法,OpenAI 用的是「进化策略」算法。探智立方的「DarwinML 平台」是一个基于「演化」算法类型的 AutoML 系统。
当然,如果是不要求从「头」学习的 AutoML 方法,也有预设一个模型库,从中选择相应的模型进行优化或者迁移的做法。
机器之心:探智立方在 AutoML 中重点关注哪方面的工作?
宋煜:我们和其他偏学术的机构不一样的地方是我们希望从 AutoML 的角度提供模型可解释性。
如今的可解释性研究更多是让研究者去将中间的特征提取层权重或激活进行输出,研究每一层的影响是什么,再把自己的观察传达给机器。但是人的时间是有限的,我们希望由机器自己完成这个过程。
我们希望机器自己总结「特征提取」究竟提取了什么。找到为什么一个特定的提取方法和损失函数计算组合作用在特定的数据分布上的时候,能让梯度下降更快,损失更小,然后将这些知识解释成机器可以理解的数据化的表达方式反馈回系统,变成属性,为下一次设计提供指导性意见,提高设计效率。
换言之,我们也在实践进行模型设计的「大脑」可不可以越来越聪明,能不能在为相似的问题或者数据类型设计模型的时候,迅速地将设计时间从「四天达到 80% 准确率」缩短为一天甚至几小时之内达到同等准确率?能否让最初几代模型不用走太多弯路就能够进入一个和最优解非常相近的解空间里。
钱广锐:如今的学界对 AutoML 的研究大多集中在方法论本身,而我们更多关注如何能够让 AutoML 技术用户实际的数据结合,在项目中落地。
我们开发了「DarwinML 平台」,在帮助大量的用户学习了自己的数据、训练自己的模型的过程中,也让平台越来越聪明,能够更高效地帮用户实际解决问题。
机器之心:DarwinML 平台的目标用户群是谁?完成一个任务需要用户完成哪些工作?平台完成哪些工作?
宋煜:DarwinML 平台是一个全生命周期管理平台,这个平台的最终目标,是成为一个自动模型开发平台,让业务人员,或者说不是专门从事 AI 研究的人,也能够设计一个符合业务目标的模型出来。
用户要做的就是准备数据,以及进行一些算力和期望效果的选择:使用算力的上限、模型精度要求、最长训练时间等。对算法有了解和模型设计有经验的用户,也可以就模型设计过程中的参数,比如进化算法的最大演化代数、模型最大的期望深度进行设置,甚至可以动态剔除的模型设计中不需要的「基因」、调节不同变化操作方式的进化算子的比例等。
余下的数据清洗、模型设计、训练、调优、评估、推理,都在平台上自动完成演化。
机器之心:能否描述一下平台完成一个任务的过程?
宋煜:首先,「DarwinML 平台」会提取数据的统计信息,根据统计信息设置一个演化的初始条件,包括模型的种群的个数、演化迭代的最大代数,分布式计算资源的分配情况,加上用户设置的算力限制等。
然后平台开始自动进行模型设计。在进化到每一代时,都会对模型进行一次评估,以选择继续演化的方向,同时防止种群,也就是所有模型的整体早熟(避免重复使用前期效果比较好的相同或者相近的模型,尽量让选择在解空间里分散化)。
当演化到达客户的准确率或者时间限制要求后,DarwinML 平台会再固定模型结构进行一次参数精调,同时进行超参数的局部优化。
最后,在整个过程结束后,以报告的形式将模型的特征、硬件配置、各项表现指标返回给用户。
机器之心:模型的基本组成模块是什么?
钱广锐:我们的平台叫「DarwinML」的原因就是在于其核心算法是进化算法。进化算法的实现基本思想就跟模拟自然界生物进化过程一样。
如同动物从单细胞动物开始,进行繁殖时通过 DNA 的交叉变异生成新的个体,我们的模型设计也从第一代的模型种群的初始化开始,保持着种群的大小基本不变,通过逐代演化生成更好的模型。
针对机器学习和深度学习,平台有着相同的演化核心算法,但分别面向机器学习和深度学习的基本构成单元(我们称之为「基因」)有所不同。因此,基因是「DarwinML 平台」设计模型过程中最基本的组成模块。
机器学习的模型「基因」包括一些聚类、Imputer 等数据预处理操作,以及回归、分类等任务相关的四十多个机器学习基本操作,一百二十多个变种。深度学习的「基因」库则更加庞大和复杂,它包括不同的深度学习神经元基因,比如卷积模块、 LSTM 模块、池化、全连接层等等;而当一些「基因」组合在一起的形成性能优异的更「大」的模块时,也会被固定下来,成为一个新的「基因」。这个拥有超过一百二十个初始化的深度学习基因库,再加上不断演化出现的更复杂的「大」基因库,可以实现设让机器学习、深度学习模型的结构可变性尽可能多、模块尽可能细,让我们能够得以探索一些超出人类想象的领域,发现一些与人类已知经验不同的模型结构。
机器之心:模型的初始生成的过程是什么?
钱广锐:初代种群中的模型有两种来源,一种是 DarwinML 平台根据数据分布情况,从「基因」中随机选择,自动生成一些模型,另外我们也支持从用户自己提供的一些「优秀」的初始模型开始演化。
其中模型的初始化生成过程里包含一系列类似「丢骰子」的初始化操作,根据预定义深度、总体神经元的个数随机生成一系列模型的。当然,DarwinML 平台会也从以前训练模型的经验里面进行学习,结合用户输入的参数,把初始化问题从一个简单的丢骰子情形变成一个根据数据的特征调整生成分布的问题。例如,系统会根据以往的经验判定,20 层以内的模型可能就可以取得很好的效果;或者,为了考量模型的性能,需要兼顾部署时的低延迟时,如何设计一个不超过 50 个神经元模型。
机器之心:能否描述一下模型的进化过程?
钱广锐:DarwinML平台会把第一代随机生成的模型进行训练、评估,然后进行性能排序。再根据进化算法的「优胜劣汰」法则,选择每一个基因能够「遗传」下去的概率:最好的个体理论上会有最大的可能性产生新的子代,来保证产生的个体的质量越来越高。
从一代模型中产生下一代新模型的方法有几种:
一是变异(mutation)操作,将一代模型中的少数几个「基因」替换掉。或者将模型中的一层整体删掉或者整体复制一次。二是交叉(crossover 或 heredity)操作,例如将两个一代模型分为三部分,把模型 A 的中间部分去掉,用模型 B 的中间部分替换。三是为了保证多样性,继续随机操作(random)生成一些,采用和第一代相同的办法随机生成新模型。
同时,DarwinML 平台还引入了基于贝叶斯的、基于蒙特卡洛树搜索(MCTS)和基于强化学习的三种方法来指导遗传算法进行搜索。贝叶斯方法用于计算下一代模型效力变好的概率分布,MCTS 提供依据树搜索产生的结果来设计可能存在的合理模型,而强化学习则不完全局限于模型变化本身,而是根据特定进化过程后、模型的得分、其他的输入信息更新 Q-table,指导生成更合理的模型和演化方向。
进化一代的时间由数据量和算力决定,一个 CIFAR 数据规模大小的深度学习模型 4 个 GPU 上进化一代大约需要 10-20 分钟。一个 400 万条数据的机器学习模型,在 100 个 CPU 核上进化一代大约需要 5-6 小时。
进化代数方面,机器学习模型一般一代在 15-20 个模型左右,不会超过 20 代。深度学习模型通常在 30-40 代,甚至更多。一般,模型越复杂,模型种群数量和进化代数就需要更多。
机器之心:能否以可视化的形式展示 DarwinML 平台的进化过程?
宋煜:上图是一个基于 CIFAR-10 数据集的演化过程模型关系图。每个圆圈代表一个模型,圆圈大小代表模型性能,越大代表性能越好;圆圈距离中心的位置代表了模型演进的代数,越靠外的模型是越晚生成的;红色代表模型是由 Random 操作生成的,蓝色代表由 Heredity 操作生成,绿色表示由 Mutation 操作生成。通过这个图,我们可以可以看到,算法非常高效、方向性非常强地向更优方向演进。同时,在图的左下角,我们可以发现,后面的几代模型性能都比较稳定,而且大多都是来自于同一个父母。在一些复杂的数据中,更加复杂的模型「家族图谱」会清晰地告诉我们模型演化的过程,结合模型的特征,可以更好的研究哪些「优秀」的模块(结构)被一代一代的遗传下去,为模型的可解释性提供数据支持。(下图)
宋煜:如下两张图是基于同一个风险分析数据,由 DarwinML 平台自动演化设计出来的两个模型计算图。第一个模型 pop3 是第三代里面最好的,第二个模型 pop8 是第八代里面最好的。
pop3 的模型达到了 98% 的准确率,而 pop8 达到了 99% 的准确率。但是相比较而言,pop3 的网络结构复杂的多。这是一个在演化过程中,通过加入惩罚项引导演化过程的例子。即使损失函数或者准确率相近,简单的模型和复杂的模型最后的评分差距也会比较大。惩罚项的引入让系统能够设计更高效的网络而不是更复杂的网络。
另外,这是一个分类任务,但是机器在设计模型的过程中加入了回归算法。机器并没有因为最终的目标是分类而限制基因的种类,而是在更广阔的范围内寻找最优解。在这里,机器认为用回归方法提取特征再交给分类器的效果更好。
对于 Pop8 还有一个有意思的现象是,数据预处理手段「分位转化」(Quantile Transformer)被应用在了分类器和 SVC 算法之前,但是没有用在 K 临近算法之前。这并不是一个人工设定的规则,而是机器通过大量训练后总结出来的规则。
以人类工程师的视角观察,我们知道将连续的变量转为离散对于分类器和 SVC 算法是有好处的,特别是在数据维度高、分布分散的情况下,是很好地避免过溢出的手段。但是 K 临近算法的核心是计算距离,因此对数据进行分位转化反而会引入不必要的噪声,导致数据分布变形。
这个是我们事后对模型的分析,而这个模型本身是在演化过程中完全由机器设计出来的,而没有人为预设的信息或者结构存在。
机器之心:DarwinML 系统平台是否有侧重的行业?
宋煜:我们希望平台能为各种行业服务,所以我们的应用案例也是跨行业的:我们在金融领域里做风控相关模型、在保险领域里做图像识别模型、在医疗领域里做医疗电子档案和专业术语的语音识别、在制造业进行质检和良品率分析。
DarwinML 平台的目标就是不限行业,全面降低 AI 的技术门槛。任何一个行业,只要有充足的数据,业务人员,而非算法专家,就可以让业务「AI 落地」。我们希望基于 *DarwinML *建立一个完整的人工智能生态圈*,*包括企业客户服务团队,共享云平台及开发者社区,从各个维度满足企业级客户对人工智能的期望与需求。
机器之心:为什么选择以 AutoML 角度切入来创业?
钱广锐:我在博士阶段的研究工作是和进化算法和高性能计算密切相关,当时的主要工作是使用大规模计算的方法在人类完全未知的高温高压的材料领域材料设计进行探索,我们当时采用了进化算法结合第一性原理计算,开发了至今仍然是世界领先的材料结构预测软件包。在 IBM 阶段,宋煜和我一起设计了一个面向企业级用户的人工智能的平台产品。
宋煜:我的早期背景是高性能计算和底层数据库,后来则设计了能够支持 Torch、Caffe、TensorFlow 等主要深度学习框架的上层建模平台。在过程中,我们发现模型的设计是最麻烦的地方。在当时,我们使用了许多超参调优的方法,试图在有限的计算力下在短期内找到一个比较好的模型,但是模型设计还是很麻烦。
我们认为,在 AI 领域,有两个方向是值得投入大量人力精力去做的:一是损失函数本身的设计,二是如何在特定的应用领域里使用 AI 模型。除此之外,模型设计和模型调优是耗时又没有太大意义的工作。虽然这是今天数据科学家和算法科学家的主要工作内容,但是久而久之,我们发现模型的相似性很大,而一旦我们把它概括为一个可微、可求导的数学问题,那么机器的「设计」、「寻找最优」的速度甚至不亚于人。
最后一届 ImageNet 大赛就是一个十分有趣的例子。那一届的优胜模型其实并非一个拥有新结构的模型,而是海康威视利用大量计算力完成了一次精调。这证明了在参数调整方面,给定一年的时间限制,机器的能力已经胜过了人。而在超参数调节,乃至模型结构设计方面,道理也是相通的,我们坚信这都是机器可以帮助人完成,甚至比人做得更好的工作。
本文为机器之心原创,转载请联系原作者获得授权。