0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

谷歌大脑提出了一种简单的方法,用于将概率编程嵌入到深度学习生态系统

DPVg_AI_era 来源:未知 作者:李倩 2018-11-14 09:15 次阅读

谷歌大脑最新提出了一种简单的方法,用于将概率编程嵌入到深度学习生态系统。这种简单分布式、加速的概率编程,可以将概率程序扩展到512个TPUv2、1亿+参数的模型。

将概率程序扩展到512个TPU、1亿+参数的模型是什么概念?

谷歌大脑近日公开一篇论文“Simple, Distributed, and Accelerated Probabilistic Programming”,发表于NIPS 2018。论文描述了一种简单、低级的方法,用于将概率编程嵌入到深度学习生态系统中。

该研究将概率编程提取为一种单一的抽象——随机变量(random variable)。

在继续介绍论文之前,让我们先了解一下Edward,因为该研究是基于Edward2实现的。

Edward是哥伦比亚大学、谷歌大脑等在2017年提出的新深度概率编程语言,也是一个用于概率建模、推理和评估的Python 库。Edward 融合了以下三个领域:贝叶斯统计学和机器学习、深度学习、概率编程。

研究人员在TensorFlow的轻量级实现证明该方法可支持多种应用:使用TPUv2的模型并行变分自动编码器(VAE);使用TPUv2的数据并行自回归模型Image Transformer;以及多GPUNo-U-Turn Sampler(NUTS)。

对于64x64 ImageNet上最先进的VAE和256x256 CelebA-HQ上最先进的Image Transformer,该方法实现了从1 TPU到256 TPU的最佳线性加速。对于NUTS,相对Stan的GPU加速达到100倍,相对PyMC3的加速达到37倍。

从可微编程到概率编程

深度学习的许多进展可以被解释为模糊了模型和计算之间的界限。有人甚至提出一种新的“可微编程”(differentiable programming)范式,在这种范式中,其目标不仅仅是训练一个模型,而是执行一般的程序合成。

在这种观点里,注意力(attention)和门控(gating)描述了布尔逻辑;跳过连接(skip connections)和条件计算描述了控制流;外部存储访问函数内部范围之外的元素。学习算法也越来越动态:例如, learning to learn,神经结构搜索,以及层内优化等。

可微编程范式鼓励人们考虑计算成本:不仅要考虑模型的统计特性,还必须考虑其计算、内存和带宽成本。这种理念使研究人员设计出深度学习系统,这些系统运行在最前沿的现代硬件上。

相比之下,概率编程社区倾向于在模型和计算之间划清界限:首先,将概率模型指定为程序;其次,执行“推理查询”来自动训练给定数据的模型。

这种设计使得很难真正大规模地实现概率模型,因为训练具有数十亿参数的模型需要跨加速器地拆分模型计算和调度通信

在这篇论文中,我们描述了一种在深度学习生态系统中嵌入概率编程的简单方法; 我们的实现基于TensorFlow和Python,名为Edward2。这种轻量级方法为灵活的建模提供了一种 low-level 的模式——深度学习者可以从使用概率原语进行灵活的原型设计中获益,并且概率建模者可以从与数字生态系统更紧密的集成中获益。

研究贡献:

我们将概率编程的核心提炼为单个抽象——随机变量(random variable)。

这种low-level的设计有两个重要含义:

首先,它使研究具有灵活性:研究人员可以自由地操作模型计算,以进行训练和测试。

其次,它可以使用加速器(例如TPU)来实现更大的模型:TPU需要专门的ops,以便在物理网络拓扑中分配计算和内存。

我们举例说明了三种应用:使用TPUv2的模型并行变分自动编码器(VAE);使用TPUv2的数据并行自回归模型(Image Transformer);以及多GPU No-U-Turn Sampler (NUTS)。

对于64x64 ImageNet上最先进的VAE和256x256 CelebA-HQ上最先进的Image Transformer,我们的方法实现了从1 TPUv2到256 TPUv2的最佳线性加速。对于NUTS,GPU的加速比Stan快100倍,比PyMC3快37倍。

只需要随机变量

Random Variables Are All You Need!

在这一节,我们概述了Edward2的概率程序。它们只需要一个抽象:一个随机变量。然后,我们将描述如何使用跟踪(tracing)来执行灵活的、low-level 的操作。

概率程序、变分程序

Edward2将任何可计算的概率分布具体化为一个Python函数(程序)。通常,该函数执行生成过程,并返回示例。程序的输入—以及任何限定范围的Python变量—表示分布条件的值。

要在程序中指定随机选择,我们使用了Edward的RandomVariables。RandomVariables提供了log_prob和sample等方法,包装TensorFlow Distributions。此外,Edward随机变量增加了TensorFlow操作的计算图:每个随机变量x与图中的张量x∗∼p(x)相关联。

图1描述了一个示例:一个Beta-Bernoulli模型

图1:Beta-Bernoulli program

重要的是,所有的分布——不管下游用什么——都是作为概率程序编写的。

图2描述了一个隐式变分程序,即允许采样但可能不具有易于处理的密度的变分分布。

图2:Variational program

一般而言,变分程序、proposal programs和对抗式训练中的discriminators都是可计算的概率分布。如果我们有一个操纵这些概率程序的机制,那么就不需要引入任何额外的抽象来支持强大的推理范例。

下面我们将使用一个model-parallel VAE来展示这种灵活性。

示例:模型并行的变分自动编码器

图4实现了一个模型并行的变分自动编码器(model-parallel VAE),它由decoder、prior和encoder组成。decoder生成16位音频;它采用一种自回归的flow,用于训练有效地在序列长度上并行化。encoder将每个样本压缩成粗分辨率,由一个压缩函数参数化。

图4:Model-parallel VAE with TPUs, generating 16-bit audio from 8-bit latents

TPU集群在环形网络中布置核心,例如,512个核心可以布置为16x16x2的环面互连。为了利用集群, prior和decoder都应用分布式自回归流(如图3所示)。

图3:Distributed autoregressive flows

概率程序很简洁。它们利用了最近的进展,如autoregressive flows和multi-scale latent variables,并且实现了以前从未尝试过的架构,其中使用16x16 TPUv2芯片(512核心),模型可以在4.1TB内存中分割,并使用最多1016个FLOPS。VAE的所有元素——分布式、架构和计算位置——都是可扩展的。

跟踪

我们将概率程序定义为任意Python函数。为了实现灵活的训练,我们应用了跟踪(tracing),这是概率编程的经典技术,以及自动微分(automatic differentiation)。

图5显示了核心实现:10行的代码。

图5:tracing的最小实现

图6:程序执行。

其他示例,包括数据并行Image Transformer,No-U-Turn Sampler,概率程序对齐,通过梯度下降的变分推理学习等,请阅读原始论文。

结论

我们描述了一种简单、低级别的方法,用于在深度学习生态系统中嵌入概率编程。对于64x64 ImageNet上的最先进的VAE和256x256 CelebA-HQ上的Image Transformer,我们实现了从1到256 TPUv2芯片的最佳线性加速。对于NUTS,相比其他系统速度提升100倍。

目前,我们正在推进这种设计,作为生成模型和贝叶斯神经网络基础研究的一个阶段。此外,我们的实验依赖于数据并行性以得到大幅的加速加速。最近的一些研究改进了神经网络的分布式编程,用于模型并行性以及对大规模输入(如超高分辨率图像)的并行性。结合这项工作,我们希望突破超过1万亿参数和超过4K分辨率的巨型概率模型的极限。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3639

    浏览量

    134439
  • 生态系统
    +关注

    关注

    0

    文章

    702

    浏览量

    20723
  • 深度学习
    +关注

    关注

    73

    文章

    5500

    浏览量

    121117

原文标题:NIPS 2018:谷歌大脑提出简单、分布式概率编程,可用TPU大规模训练

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式技术:STM32Cube生态系统介绍#嵌入系统

    嵌入生态系统
    学习电子
    发布于 :2022年11月12日 23:59:12

    MCU产品、软件、生态系统的演变及未来展望

    和环境、工程师开发方式、生态系统方面,都带来了深刻的变化。甚至产品的名字也从早期的“单片机”,更多地使用“微控制器”或者“嵌入系统”这样的术语(如表1)。我们下文更多以MCU或微控
    发表于 01-19 15:17

    大数据hadoop生态系统概念简单介绍

    零基础大数据入门3--大数据生态系统及其各组件简介
    发表于 05-05 14:34

    工厂生产系统能效的生态系统优化设计

    优化工厂生产系统能效的生态系统
    发表于 07-12 08:44

    鸿蒙操作系统为何发展缓慢 生态系统构建面临难题

    件容易的事情,苹果生态系统谷歌生态系统的构建都是经过长年累月才有今天的规模,目前苹果生态系统谷歌生态
    发表于 09-07 11:54

    everspin生态系统和制造工艺创新解析

    everspin生态系统和制造工艺创新
    发表于 01-01 07:55

    STM32单片机基础01——初识 STM32Cube 生态系统 精选资料分享

    本篇文章主要介绍STM32Cube生态系统。STM32Cube EcosystemSTM32Cube是ST公司开发的生态系统,致力于使STM32的开发变的更简单,并且100%开源免
    发表于 08-03 07:15

    STM32Cube生态系统更新

    前不久STM32Cube生态系统进行了次“大更新”,STM32CubeMX升级至V6.0.0,STM32CubeIDE升级至V1.4.0,STM32CubeProg升级至V2.5.0。...
    发表于 08-03 06:05

    Microchip FPGA 和基于 SoC 的 RISC-V 生态系统简介

    和 460k LE 范围内的 PolarFire SoC 与竞争对手相比具有类似的优势。PolarFire SoC 是一种安全且节能的解决方案,适用于从人工智能 (AI) 和机器学习
    发表于 09-07 17:59

    什么是STM32Cube生态系统

    什么是STM32Cube生态系统
    发表于 09-29 06:12

    使用linux嵌入式构建IoT生态系统组件

    linux嵌入式物联网 您会发现,构建IoT生态系统组件的最快方法是使用嵌入式Linux,无论您是从开始就扩充现有设备还是设计新设备或
    发表于 11-04 08:47

    IT的生态系统概述

    、IT的生态系统概述1.1 计算机CPU四大体系结构1、以PC机为代表的X86结构2、以嵌入式计算机为代表的ARM结构3、以国产龙芯为代表的MIPS结构4、以IBM巨型机为代表的POWPC结构
    发表于 12-22 06:47

    GaN功率半导体与高频生态系统

    GaN功率半导体与高频生态系统(氮化镓)
    发表于 06-25 09:38

    基于深度学习算法的软件生态系统

    ,这比较类似于人脑的运行方式,获得更多数据后,准确度也会越来越高。TIDL(TI Deep Learning Library) 是TI平台基于深度学习算法的软件生态系统,可以
    的头像 发表于 06-30 17:01 2110次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>算法的软件<b class='flag-5'>生态系统</b>

    谷歌智能家居生态系统设计

    谷歌Home是智能家居行业领先的物联网生态系统用于控制智能家居设备相当简单。该生态系统允许
    的头像 发表于 08-22 15:15 2074次阅读