专栏首页机器之心无需数学就能写AI,MIT提出AI专用编程语言Gen

无需数学就能写AI,MIT提出AI专用编程语言Gen

机器之心报道

机器之心编辑部

在帮助专家做研究的同时,MIT 的研究员也要让新手做人工智能更简单。继 Julia 语言之后,近日 MIT 又发布了一种全新的通用概率编程系统 Gen,它是一种针对人工智能领域的专用语言,且除了深度学习外,各种机器学习与概率建模方法都囊括在内。

近日,在提交编程语言设计与实现大会(PLDI)的一篇论文中,MIT 研究人员介绍了一种全新的概率编程系统 Gen。从计算机视觉到机器人和统计,用户可以通过 Gen 为应用 AI 技术的多个领域编写模型和算法,且无需处理方程式或手动编写高性能代码。此外,Gen 还允许研究人员编写用于预测任务的复杂模型和推理算法,这在之前是不可能做到的。

例如,3-D 人体姿态是一项困难的计算机视觉推理任务,在自动系统、人机交互和增强现实(AR)中均有应用。在论文中,研究人员展示了简短的 Gen 程序如何推理 3-D 人体姿态。

看起来十分简单,但在后台,该程序包括执行图形渲染、深度学习和概率模拟类型的组件。与一些研究人员所开发的早期系统相比,这些不同技术的结合可以提高这项任务的准确性和速度。

论文图 6:人体姿态推理任务的建模、推理代码以及评估结果。模型使用静态 DSL 编写,调用图形引擎从姿态参数中渲染深度图像。自定义提议结合静态 DSL 和 TensorFlow DSL,通过深度神经网络来传递观察到的深度图像,并提出姿态参数。

研究人员表示,由于其简单性,从新手到专家,Gen 可以被任何人轻松使用。「这项工作的一个动机是让计算机科学或数学专业知识较少的人更容易做自动化人工智能,」论文第一作者、电气工程和计算机科学系博士生 Marco Cusumano-Towner 说。「我们还希望它能提高生产力,这意味着专家可以更轻松地快速迭代 AI 系统,做出原型。」

研究人员还展示了 Gen 通过使用其他 Gen 程序简化数据分析的能力,该程序可自动生成通常由专家用于分析、解释和预测数据中基础模式的复杂统计模型。这种能力建立在研究人员先前工作的基础上,也就是让用户可以编写几行代码来发现对金融趋势、航空旅行、投票模式以及疾病传播的洞见。但不同的是,早期系统需要大量的手动编码才能进行准确的预测。

「Gen 是第一个足以涵盖计算机视觉和数据科学中不同案例的灵活、自动化、高效的系统,且性能非常好。」MIT 脑与认知科学系(Department of Brain and Cognitive Sciences)的研究员 Vikash K. Mansinghka 说,他负责运行概率计算项目。

集自动化、灵活性和速度优势于一身

2015 年,谷歌开源 TensorFlow 以来,它已经成为了最为流行的深度学习框架。然而,即使 TensorFlow 足够自动化和高效,但它只侧重于深度学习模型,对范围更广的人工智能而言,这些模型既昂贵又有限。

如今,业内已经有大量的 AI 技术,例如统计和概率模型、模拟引擎等。一些概率编程系统虽然足够灵活,可以覆盖到多种 AI 技术,但运行不够高效。

研究人员寻求的是集其所长于一身:自动、灵活、快速。Mansinghka 说,「如果我们能做到这一点,或许就能向 TensorFlow 对深度学习那样,有助于民主化更广泛的模型和推理算法。」

在概率性 AI 中,推理算法会对数据执行操作,并基于新数据连续地调整概率,从而最终做出预测。

借鉴了早期概率编程系统 Church 中的概念,研究人员将几种自定义建模语言结合到 Julia 中,每种建模语言都对不同类型的 AI 建模方法进行优化,使其更加通用。利用优化、变分推理、某些概率方法以及深度学习等各种方法,Gen 还为推理任务提供了高级基础结构。

外部机构就 Gen 与 MIT 展开合作

外部用户已经在寻找利用 Gen 进行 AI 研究的方法。例如,英特尔与 MIT 合作,将 Gen 用于机器人和 AR 系统,尤其内部基于深度感知摄像头的 3D 姿态估计。MIT 林肯实验室(Lincoln Laboratory)也在合作开发 Gen 在人道主义救援和灾害应对空中机器人中的应用。

在 MIT 追求人工智能的环境下,Gen 开始被用于野心勃勃的 AI 项目中。例如,Gen 对 MIT-IBM 沃森人工智能实验室以及美国国防部先进研究项目局(Department of Defense』s Defense Advanced Research Projects Agency)正在进行的「机器常识」项目极为重要,该项目旨在建模 18 个月大婴儿水平的人类常识知识库。Mansinghka 是该项目的主要研究者之一。

Mansinghka 表示:「借助于 Gen,研究人员首次得以很容易地集成大量不同的 AI 技术。」

优步首席科学家和 AI 副总裁、剑桥大学教授 Zoubin Ghahramani 表示:「自深度学习出现以来,概率编程是最有潜力的前沿人工智能领域之一。Gen 代表了这一领域的重大进展,并将有助于概率推理 AI 系统的可扩展和实际实现。」

谷歌研究主管 Peter Norvig 也非常赞赏这项工作,他说:「Gen 允许用户使用概率编程解决问题,因此对各种问题有更具原则性的方法,且不受限于概率编程系统设计上的一些缺陷。通用编程语言之所以能成功,是因为它们能令程序员更容易完成任务,Gen 对于概率编程的意义同样在此。」

举个栗子

研究人员编写了一个简短的 Gen 程序来做贝叶斯线性回归:给定(x, y)平面上的一组数据点,他们想找出一条能很好拟合这些数据点的线。

典型的 Gen 程序通常包含三个主要组件。

首先,定义一个生成模型:利用额外语句扩展的 Julia 函数,即从概念上模拟一个假数据集。下面的模型对 slope 和 intercept 参数进行采样,然后 x 轴上的参数可以作为输入,且对相应 y 轴进行采样。他们将所做的随机选择命名为 @trace,这样就可以在推理程序中引用这些选择。

using Gen


@gen function my_model(xs::Vector{Float64})
 slope = @trace(normal(0, 2), :slope)
 intercept = @trace(normal(0, 10), :intercept)
 for (i, x) in enumerate(xs)
 @trace(normal(slope * x + intercept, 1), "y-$i")
 end
end

其次,研究人员编写了一个推理程序,用于操纵模型的 Execution Traces。推理程序是常规的 Julia 代码,并利用 Gen 的标准推理库。

下面的推理程序会输入数据集,并迭代地运行 MCMC 算法,以拟合 slope 和 intercept 参数:

function my_inference_program(xs::Vector{Float64}, ys::Vector{Float64}, num_iters::Int)
 # Create a set of constraints fixing the 
 # y coordinates to the observed y values
 constraints = choicemap()
 for (i, y) in enumerate(ys)
 constraints["y-$i"] = y
 end
 
 # Run the model, constrained by `constraints`,
 # to get an initial execution trace
 (trace, _) = generate(my_model, (xs,), constraints)
 
 # Iteratively update the slope then the intercept,
 # using Gen's metropolis_hastings operator.
 for iter=1:num_iters
 (trace, _) = metropolis_hastings(trace, select(:slope))
 (trace, _) = metropolis_hastings(trace, select(:intercept))
 end
 
 # From the final trace, read out the slope and
 # the intercept.
 choices = get_choices(trace)
 return (choices[:slope], choices[:intercept])
end

最后,研究人员在一些数据上运行推理,得到下面的结果:

xs = [1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]
ys = [8.23, 5.87, 3.99, 2.59, 0.23, -0.66, -3.53, -6.91, -7.24, -9.90]
(slope, intercept) = my_inference_program(xs, ys, 1000)
println("slope: $slope, intercept: $intercept")

论文:Gen: A General-Purpose Probabilistic Programming System with Programmable Inference

摘要:概率建模和推理对于很多领域都是极为重要的。概率编程语言得到更广泛采用的关键挑战在于设计灵活且性能良好的系统。本文介绍的新概率编程系统 Gen 具有可用于建模以及终端用户自定义和推理优化的全新语言结构。Gen 使得能够解决多领域问题的概率程序编写变得切实可行。Gen 程序能够结合 Julia 编写的生成模型、TensorFlow 中的神经网络以及基于 Monte Carlo 可扩展库的推理算法和数值优化方法。

本文还介绍了一些能够结合 Gen 灵活性和性能的方法:

  • 生成函数接口,一种封装概率和/或可微计算的抽象
  • 具有自定义编译器的特定领域语言,对不同的灵活性/性能进行权衡
  • 能够编码条件独立性和重复计算常见模式的连结符,支持缓存加速
  • 标准推理库,支持在 Gen 中编写作为程序的自定义建议分布

本文研究表明,在处理非线性状态空间建模、现实世界时序数据结构学习、鲁棒回归以及基于深度图像的 3D 人体姿态估计等问题上,Gen 的性能优于当前最佳的概率编程系统,有时超出多个数量级。

参考链接:

http://news.mit.edu/2019/ai-programming-gen-0626

https://probcomp.github.io/Gen/

https://github.com/probcomp/Gen

https://dspace.mit.edu/bitstream/handle/1721.1/119255/MIT-CSAIL-TR-2018-020.pdf

深度Pro

理论详解 | 工程实践 | 产业分析 | 行研报告

机器之心最新上线深度内容栏目,汇总AI深度好文,详解理论、工程、产业与应用。这里的每一篇文章,都需要深度阅读15分钟。

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 7 Papers | KDD2019最佳论文;AutoML SOTA 综述

    摘要:在本文中,研究者深入探索了真实世界图谱谱密度的核心。他们借用了凝聚态物理学中开发的工具,并添加了新的适应性来处理常见图形的谱特征。他们计算了单个计算节点上...

    机器之心
  • ICLR 2018 | 斯坦福大学论文通过对抗训练实现可保证的分布式鲁棒性

    机器之心
  • 陈丹琦新作:关系抽取新SOTA,用pipeline方式挫败joint模型

    端到端关系抽取旨在识别命名实体,同时抽取其关系。近期研究大多采取 joint 方式建模这两项子任务,要么将二者统一在一个结构化预测网络中,要么通过共享表示进行多...

    机器之心
  • .NET GC 精要(五)

    之前讲过 .NET GC 出于效率等因素的考虑,对 SOH(Small Object Heap)进行了分代处理(Gen 0, Gen 1 和 Gen 2),当时...

    用户2615200
  • .NET GC 精要(二)

    之前我们讲述 SOH(Small Object Heap) 时提过其会执行内存压缩过程,但如果程序中存在大量的(小)对象的话,在 SOH 中完整执行一遍内存压缩...

    用户2615200
  • CS学习笔记 | 20、通过Socks转发的方法

    这一小节中,将看看如何构建一个 SOCKS 代理服务器使一个上线主机变成我们的跳板机。

    TeamsSix
  • Android 6.0后动态申请权限

    自从Android6.0(api23)发布以后,当我们的APP需要用到系统权限时,必须在用户运行时动态申请权限了.

    Vaccae
  • 拖不得了,Android11真的来了,最全适配实践指南奉上

    没错!Android 11(version 30,Andorid R) 正式发布了!看到这个新闻我知道我不能再拖了,再不好好准备好迎接Android11的到来,...

    码上积木
  • js实用方法记录-简单cookie操作

    易墨
  • Selenium:添加Cookie的方法

    从中可以看出add_cookie()这个函数有一个参数cookie_dict,它是以字典的形式传入的,字典中必选的键是"name"和"value",可选的键是"...

    弄啥嘞

扫码关注云+社区

领取腾讯云代金券