近日,Facebook开源了两款基于PyTorch的实验框架Ax和BoTorch。Ax是一个面向自适应实验的理解、管理、部署和自动化任务的通用平台,BoTorch则主要面向贝叶斯优化任务。这两个框架旨在简化PyTorch应用中的自适应实验流程。
在现代机器学习应用中,对实验到生产的流程进行简化是最难实现的任务之一。在已经市场化深度学习框架中,Facebook的PyTorch因其高度灵活性成为数据科学界的最爱,PyTorch能够实现快速建模和实验。但是,深度学习应用中的许多实验面临的挑战已经超出了特定框架的能力范围。
对于数据科学家来说,在对不同的模型或超参数配置进行评估时,通常会受到实验所需的昂贵计算资源和时间的障碍。近日,Facebook开源了两个新框架,旨在简化PyTorch应用程序中的自适应实验流程:
Ax:一个易访问的通用平台,面向自适应实验的理解、管理、部署和自动化。
BoTorch:基于PyTorch,是一个灵活的现代库,用于贝叶斯优化——一种高效的全局优化的概率方法。
这两种工具的目标是降低PyTorch开发人员进行快速实验的入门门槛,以便为特定问题找到最佳模型。 Ax和BoTorch都基于概率模型,简化了机器学习问题中给定环境下的探索流程。不过两个框架针对的是实验问题空间的不同维度。
BoTorch
BoTorch是一个基于PyTorch构建的贝叶斯优化库。贝叶斯优化的目标是在有限的资源内找到问题的最优解。通常,贝叶斯优化用于解决黑盒优化问题,比如机器学习算法的超参数优化,A / B测试以及许多其他科学和工程问题。
贝叶斯优化问题试图在无法获取函数形式的情况下对一些昂贵的评估黑盒函数f进行最大化。具体来说,优化技术在一系列测试点处对f进行评估,希望在少量评估之后确定接近最优值。
为了实现这一目标,需要一种方法来推断关于f尚未评估的点的概念。在贝叶斯优化中,这被称为替代模型。重要的是,替代模型应该能够以点x的函数值f(x)的后验分布的形式对预测的不确定性进行量化。
BoTorch是Facebook在贝叶斯优化基础上大量工作的成果,并将这些技术集成到PyTorch编程模型中。从概念上讲,与替代优化方法相比,BoTorch具备一系列独特优势。
基于PyTorch:BoTorch构建于PyTorch框架基础上,可以利用本机功能,如自动差异化,使用独立于设备的代码,支持高度并行化的现代化硬件(如GPU),有助于交互式计算图的动态开发。
最先进的建模:BoTorch支持GPyTorch中的尖端概率建模,包括多任务高斯过程(GP),可扩展GP,深度内核学习,深度GP和近似推理等。
提高开发人员效率:BoTorch提供了简单的编程模型,用于对贝叶斯优化的基本问题进行组合。具体而言,BoTorch依赖于基于蒙特卡罗模型的采集函数,使得新思路的实现变得更加简单,无需对基础模型做出限制性的假设。
高并行性带来的可扩展性:BoTorch编程模型可以优化并发性和并行性任务进行批量计算,提高了大型基础架构的可扩展性。
BoTorch的设计可以让PyTorch开发人员更改、交换或重新排列深度神经网络架构的不同组件,无需重建整个图形来重新训练整个模型。显然,构建低级贝叶斯优化组件是一项需要深度专业知识的任务。为了应对这一挑战,Facebook决定将BoTorch与另一个为深度学习实验提供简单编程模型的项目进行集成:
这就是Ax。
从概念上讲,Ax是一个优化实验平台,比如A / B测试,模拟或机器学习模型实验等。Ax提供了一个易用的高级API,可以和BoTorch进行连接,使开发人员能够快速建模和运行实验。 Ax和BoTorch之间的关系如下图所示。使用BoTorch可以实现新的优化算法,而Ax则提供了一个简单的API,用于配置调度、查询数据和评估结果。
从优化的角度来看,Ax可以使用多臂老虎机优化处理离散型配置(比如A / B测试的变体),还可以使用贝叶斯优化的处理连续配置(比如整数或浮点)。Ax提供了一个高度可扩展的框架,允许开发人员为PyTorch模型定制各种实验。从编程模型的角度来看,Ax提供了三个主要API:
循环API:用于同步优化循环,可以立即评估试验。使用此API可以在一次调用中执行优化,一旦优化完成,就可以使用实验内省。
服务API:可用作参数调整应用程序的轻量级服务,可以并行评估试验以及异步获得数据。
开发者API:主要供数据科学家,机器学习工程师和研究人员临时使用。提供大量定制化和内省功能,推荐打算使用Ax来优化A / B测试的开发者使用。
从编程模型的角度来看,循环 API提供了最大程度的流程简化,而开发者API实现了最高级别的自定义功能。使用Loop API进行无约束合成Branin函数代码如下:
from ax import optimizefrom ax.utils.measurement.synthetic_functions import braninbest_parameters, values, experiment, model = optimize( parameters=[ { "name": "x1", "type": "range", "bounds": [-5.0, 10.0], }, { "name": "x2", "type": "range", "bounds": [0.0, 10.0], }, ], evaluation_function=lambda p: branin(p["x1"], p["x2"]), minimize=True,)
而开发者API则需要对Ax框架组件进行更深度的操控:
from ax import *branin_search_space = SearchSpace( parameters=[ RangeParameter( name="x1", parameter_type=ParameterType.FLOAT, lower=-5, upper=10 ), RangeParameter( name="x2", parameter_type=ParameterType.FLOAT, lower=0, upper=15 ), ])exp = SimpleExperiment( name="test_branin", search_space=branin_search_space, evaluation_function=lambda p: branin(p["x1"], p["x2"]), objective_name="branin", minimize=True,)sobol = Models.SOBOL(exp.search_space)for i in range(5): exp.new_trial(generator_run=sobol.gen(1))best_arm = Nonefor i in range(15): gpei = Models.GPEI(experiment=exp, data=exp.eval()) generator_run = gpei.gen(1) best_arm, _ = generator_run.best_arm_predictions exp.new_trial(generator_run=generator_run)best_parameters = best_arm.parameters
与其他实验性框架相比,Ax具备一些明显优势。对于初学者来说,编程模型可以与BoTorch之外的不同优化框架一起使用。此外,Ax会自动选择优化程序,让数据科学家能够更轻松对模型进行微调。最后,该框架由可视化工具和基准测试套件实现功能互补,简化了对优化技术的评估流程。
Facebook内部的许多团队都在广泛使用Ax和BoTorch框架。这些框架的开源是对PyTorch生态系统的重要补充,PyTorch生态系统已被广泛视作数据科学实验中最灵活的深度学习框架之一。随着数据科学界开始尝试Axe和BoTorch,可能会将更多新想法整合到两个框架中,优化PyTorch应用程序中的实验流程。
-
Facebook
+关注
关注
3文章
1429浏览量
54719 -
机器学习
+关注
关注
66文章
8406浏览量
132558 -
pytorch
+关注
关注
2文章
807浏览量
13198
原文标题:用PyTorch做深度学习实验!Facebook新框架Ax和BoTorch双双开源
文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论