写点什么

Facebook 开源框架如何简化 PyTorch 实验

  • 2020-11-07
  • 本文字数:2889 字

    阅读完需:约 9 分钟

Facebook开源框架如何简化 PyTorch 实验

简化从实验到生产的周期是现代机器学习应用中最难实现的事情之一。在市场上的深度学习框架中,Facebook 孵化的 PyTorch 因其快速建模和运行实验的灵活性,从而成为数据科学界的宠儿。然而,深度学习应用实验的许多挑战超出了特定框架的能力。数据科学家评估不同模型或超参数配置的能力,通常会受到运行这些实验所需的昂贵计算资源和时间的阻碍。几个月前,Facebook 开源了两个新工具,旨在简化 PyTorch 应用中的自适应实验:


  • Ax:是一个可访问的通用平台,用于理解、管理、部署和自动化自适应实验。

  • BoTorch:基于 PyTorch,是一个灵活的、现代的库,用于贝叶斯优化,这是一种数据高效全局优化的概率方法。


这两个工具的目标是降低 PyTorch 开发人员的进入壁垒,以便能够进行快速实验,从而为特定问题找到最佳模型。Ax 和 BoTorch 都是基于概率模型,简化了机器学习问题中对给定环境的探索。然而,这两个框架针对的是实验问题空间的不同维度。

BoTorch

BoTorch 是构建在 PyTorch 之上的贝叶斯优化(Bayesian Optimization)库。贝叶斯优化的目标是在资源有限的情况下找到问题的最优解。贝叶斯优化通常应用于机器学习算法的超参数优化、A/B 测试等黑盒优化问题,以及许多科学和工程问题。


贝叶斯优化问题试图在无需获得 的函数形式的情况下,使一些昂贵的、难以评估的黑盒函数 最大化。在这种情况下,优化技术在一系列测试点上对 进行评估,以期在少量评估后确定一个接近最优的值。为了优化 实现这一目标,贝叶斯优化方法需要一种外推信念的方法,即在我们尚未评估的点上, 看起来是什么样子的。在贝叶斯优化中,这被称为代理模型。重要的是,代理模型应该能够量化其预测的不确定性,其形式是函数值 在点 上的后验概率。



BoTorch 是 Facebook 在贝叶斯优化方面反复研究的结果,并将这些技术整合到 PyTorch 编程模型中。从概念上讲,与其他优化方法相比,BoTorch 带来了一系列独特的优势。


PyTorch 功能:BoTorch 构建在 PyTorch 框架之上,利用了原生功能,诸如自动微分、支持使用设备无关代码的高并行化现代硬件(如 GPU),以及便于交互式开发的动态计算图。


最先进的建模:BoTorch 支持 GPyTorch 中的最先进的概率建模,包括支持多任务高斯过程(Gaussian processes,GP)。可伸缩 GP、深度内核学习、深度 GP 和近似推理。


提高开发效率:BoTorch 为组合贝叶斯优化原语提供了一个简单的编程模型。具体来说,BoTorch 依赖于基于蒙特卡洛(Monte Carlo)的采集函数,这使得实现新想法变得很简单,而不必对底层模型施加限制性假设。


并行性:BoTorch 编程模型通过批处理计算对并发性和并行性进行了优化,提高了其在大型基础架构中的可扩展性。


BoTorch 设计允许 PyTorch 开发人员更改、交换或重新安排深度神经网络架构的不同组件,而无需重新构建整个图来重新训练整个模型。显然,构建低级贝叶斯优化原语是一项需要深厚专业知识水平的任务。为应对这一挑战,Facebook 决定将 BoTorch 与另一个项目进行整合,为深度学习实验提供一个简单的编程模型:Ax。

Ax

从概念上讲,Ax 是一个优化实验的平台,例如 A/B 测试、模拟或机器学习模型。Ax 提供了一个高级的、易于使用的 API 与 BoTorch 接口,允许开发人员快速地建模并运行实验。Ax 和 BoTorch 之间的关系如下图所示。虽然可以使用 BoTorch 原语实现新的优化算法,但 Ax 为调度配置、查询数据和评估结果提供了一个简单的 API。



从优化的角度来看,Ax 可以使用多臂老虎机(multi-armed bandit)优化处理离散配置(如 A/B 测试的变体),也可以使用贝叶斯优化处理连续(如整数或浮点数)值的配置。Ax 提供了一个非常可扩展的框架,允许开发人员为 PyTorch 模型定制各种实验。从编程模型的角度来看,Ax 提供了三个主要 API:


Loop API:此 API 用于同步优化循环,可以立即对试验进行评估。有了此 API,优化可以在单个调用中执行,并且在优化完成后就可以进行实验内省。


Service API:此 API 用作参数调整应用程序的轻量级服务。在这些应用程序中,试验可以并行评估,并且数据可以异步获得。


Developer API:此 API 供数据科学家、机器学习工程师和研究人员临时使用。Developer API 允许进行大量的定制和内省,并且建议计划使用 Ax 优化 A/B 测试的人员使用。


从编程模型的角度来看,LoopAPI 提供了最大程度的简单性,而 Developer 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,)
复制代码


Developer 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 生态系统已被认为是数据科学实验中最为灵活的深度学习框架之一。随着数据科学界开始使用 Ax 和 BoTorch 进行实验,新的想法可能会被整合到这两个栈中,以缩短 PyTorch 应用程序中的实验周期。


作者介绍


Jesus Rodriguez,IntoTheBlock 首席执行官,Invector 实验室首席科学家、哥伦比亚大学客座讲师、天使投资人、作家、演讲家。


原文链接


https://medium.com/dataseries/facebooks-open-source-frameworks-to-streamline-pytorch-experimentation-4a33f0947d99


2020-11-07 08:002268
用户头像
李冬梅 加V:busulishang4668

发布了 965 篇内容, 共 561.9 次阅读, 收获喜欢 1119 次。

关注

评论

发布
暂无评论
发现更多内容

总结近期腾讯+阿里+百度Java岗高频面试题,提问率高达98%,看到这篇文章基本offer稳了

Java架构之路

Java 程序员 架构 面试 编程语言

饿了么刚给我确认了p7的职位,对自己的经历,做一个面试总结。

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:714. 买卖股票的最佳时机含手续费,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

【回溯算法】借助最后一道「组合总和」问题来总结一下回溯算法 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

正则表达式.01 - 元字符

insight

正则表达式 3月日更

Elasticsearch Index Types and Mappings

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

话题讨论 | 又一家大厂进入汽车领域,"百车大战"即将来临?

程序员架构进阶

话题讨论 七日更 28天写作 话题王者 3月日更

Wireshark数据包分析学习笔记Day3

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

萌新不看会后悔的C++基本类型总结(二)

花狗Fdog

程序员必须知道的数据结构:队列与栈

老王说编程

数据结构 队列

Oracle table()函数的合理运用,提高工作效率

xiezhr

oracle table() Oracle函数 3月日更

金三银四程序员面试必备:2021最新 最全面Java复习路线!已收录GitHub

比伯

Java 编程 程序员 架构 面试

硬件设计必备,电子元器件高清矢量图

不脱发的程序猿

硬件产品 28天写作 硬件设计 电子元器件矢量图 3月日更

《不看后悔》38个JVM精选问答,让你变成专家

Java 架构 面试 JVM虚拟机原理

【金三银四】这才是打开Java面试的正确方式,吃透这份【Java面试手册】offer稳了

Java 编程 面试

mock 请求分发

blueju

JavaScript React Mock umi umijs

恋物志(二):独居者的智能生活指南

脑极体

开源镜像仓库Harbor的镜像安全

运维研习社

Docker Harbor 漏洞扫描 镜像安全 私有仓库

简易项目搭建 Models层封装

happlyfox

学习 28天写作 3月日更

力扣(LeetCode)刷题,简单题(第21期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

智慧党建系统开发,智慧组工平台建设

13530558032

两会热词“区块链”,打开传统溯源的一扇大门!

源中瑞-龙先生

区块链 两会

阿里面经最新分享:Java面试指南/成长笔记(金三银四程序员必备)

比伯

Java 编程 程序员 架构 面试

简单工厂模式、工厂模式、抽象工厂模式比较

良知犹存

设计模式

程序员必须知道的数据结构:HashMap 与 LinkedHashMap

老王说编程

Java 数据结构 hashmap

区块链药品溯源解决方案-区块链技术监管医药溯源

13530558032

Flutter 2 来了

SamGo

flutter

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

JackJiang

微信 架构设计 即时通讯

用c++创作一个简单小游戏

张鹤羽

28天写作 3月日更

程序员必须知道的数据结构:线性表与链表

老王说编程

Java 链表 线性表

Redis 与 I/O 多路复用模型

大海

redis

Facebook开源框架如何简化 PyTorch 实验_开源_Jesus Rodriguez_InfoQ精选文章