邱陆陆作者

AutoML初创公司探智立方:模型的物竞天择与适者生存

回归分析的出现到深度学习的蓬勃发展,这条算法的进化路线与其说是「机器替代人」,不如说是「机器帮助人类完成我们不擅长的事」。这份「不擅长」列表里有「不擅长从大量数据中寻找规律」、「不擅长同时完成大量变量的优化」、「不擅长从高维数据中提取特征」。在今天,又有一批研究者在反省人类是否也「不擅长进行模型设计与模型调优」,以及机器如何能提供帮助。近两年,以谷歌为代表的公司再次将这一类问题以 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 大赛就是一个十分有趣的例子。那一届的优胜模型其实并非一个拥有新结构的模型,而是海康威视利用大量计算力完成了一次精调。这证明了在参数调整方面,给定一年的时间限制,机器的能力已经胜过了人。而在参数调节,乃至模型结构设计方面,道理也是相通的,我们坚信这都是机器可以帮助人完成,甚至比人做得更好的工作。

产业初创公司AutoML模型
1
相关数据
分布式计算技术
Distributed computing

在计算机科学中,分布式计算,又译为分散式運算。这个研究领域,主要研究分布式系统如何进行计算。分布式系统是一组电脑,通过网络相互链接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。

超参数技术
Hyperparameter

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

梯度下降技术
Gradient Descent

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

机器学习技术
Machine Learning

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

损失函数技术
Loss function

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

神经元技术
neurons

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

元学习技术
Meta learning

元学习是机器学习的一个子领域,是将自动学习算法应用于机器学习实验的元数据上。现在的 AI 系统可以通过大量时间和经验从头学习一项复杂技能。但是,我们如果想使智能体掌握多种技能、适应多种环境,则不应该从头开始在每一个环境中训练每一项技能,而是需要智能体通过对以往经验的再利用来学习如何学习多项新任务,因此我们不应该独立地训练每一个新任务。这种学习如何学习的方法,又叫元学习(meta-learning),是通往可持续学习多项新任务的多面智能体的必经之路。

池化技术
Pooling

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

参数技术
parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

回归分析技术
Regression analysis

回归分析是一种用于估计变量之间的关系(当一个自变量变化而其它变量固定时,因变量会如何变化)的统计过程,在预测任务中有广泛的应用。回归分析模型有不同的种类,其中最流行的是线性回归和 逻辑回归(Logistic Regression)。另外还有多变量回归、泊松回归、逐步回归、脊回归(Ridge Regression)、套索回归(Lasso Regression)和多项式回归等等。随机梯度下降(SGD)就是一种起源于回归分析的常用方法,可用于控制复杂度。

强化学习技术
Reinforcement learning

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

语音识别技术
Speech Recognition

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

权重技术
Weight

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

张量技术
Tensor

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

TensorFlow技术
TensorFlow

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

准确率技术
Accuracy

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

机器之心
机器之心

机器之心是国内领先的前沿科技媒体和产业服务平台,关注人工智能、机器人和神经认知科学,坚持为从业者提供高质量内容和多项产业服务。

推荐文章
返回顶部