机器之心编辑部报道

无需数学就能写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") endend

其次,研究人员编写了一个推理程序,用于操纵模型的 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


工程AI概率编程MIT
1
相关数据
英特尔机构

英特尔是计算创新领域的全球领先厂商,致力于拓展科技疆界,让最精彩体验成为可能。英特尔创始于1968年,已拥有近半个世纪产品创新和引领市场的经验。英特尔1971年推出了世界上第一个微处理器,后来又促进了计算机和互联网的革命,改变了整个世界的进程。如今,英特尔正转型成为一家数据公司,制定了清晰的数据战略,凭借云和数据中心、物联网、存储、FPGA以及5G构成的增长良性循环,提供独到价值,驱动日益发展的智能互联世界。英特尔专注于技术创新,同时也积极支持中国的自主创新,与产业伙伴携手推动智能互联的发展。基于明确的数据战略和智能互联全栈实力,英特尔瞄准人工智能、无人驾驶、5G、精准医疗、体育等关键领域,与中国深度合作。面向未来,英特尔致力于做中国高价值合作伙伴,在新科技、新经济、新消费三个方面,着力驱动产业协同创新,为实体经济增值,促进消费升级。

https://www.intel.com/content/www/us/en/company-overview/company-overview.html
相关技术
深度学习技术

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

增强现实技术

增强现实,是指透过摄影机影像的位置及角度精算并加上图像分析技术,让屏幕上的虚拟世界能够与现实世界场景进行结合与互动的技术。这种技术于1990年提出。随着随身电子产品运算能力的提升,增强现实的用途也越来越广。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

结构学习技术

结构化预测是监督学习,分类和回归的标准范式的一种推广。 所有这些可以被认为是找到一个能最大限度减少训练集损失的函数。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

迭代 技术

模型的权重在训练期间的一次更新。迭代包含计算参数在单个批量数据上的梯度损失。

Julia技术

Julia 是MIT设计的一个面向科学计算的高性能动态高级程序设计语言,项目大约于2009年中开始,2018年8月JuliaCon2018 发布会上发布Julia 1.0。据介绍,Julia 目前下载量已经达到了 200 万次,且 Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C++ 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。

常识知识库技术

常识知识库是当代智能系统或智能代理所具备的一种知识库。它是解决人工智能或知识工程技术瓶颈难题的一项关键措施,其特点是数量上规模大。早期人工智能或知识工程系统所具备的领域知识库是另一种知识库。也就是说,领域知识库和常识知识库是智能计算机系统所具备的知识库的两种基本类型。计算机科学领域普遍认为领域知识库和常识知识库是人工智能或知识工程技术瓶颈难题。从早期关注专家的领域知识到现在同时关注常识知识,这是人工智能或知识工程技术的一种进步。由于计算机硬件和软件以及数据库乃至数据仓库及其人机交互界面等技术的不断成熟,使得人们在21世纪开发各种专家系统所需要的各个中等规模的领域知识库和开发常识系统所需要的大规模的常识知识库都具备了基础条件。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

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

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

TensorFlow技术

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

统计模型技术

统计模型[stochasticmodel;statisticmodel;probabilitymodel]指以概率论为基础,采用数学统计方法建立的模型。有些过程无法用理论分析方法导出其模型,但可通过试验测定数据,经过数理统计法求得各变量之间的函数关系,称为统计模型。常用的数理统计分析方法有最大事后概率估算法、最大似然率辨识法等。常用的统计模型有一般线性模型、广义线性模型和混合模型。统计模型的意义在对大量随机事件的规律性做推断时仍然具有统计性,因而称为统计推断。常用的统计模型软件有SPSS、SAS、Stata、SPLM、Epi-Info、Statistica等。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

条件独立性技术

在概率论和统计学中,两事件R和B在给定的另一事件Y发生时条件独立,类似于统计独立性,就是指当事件Y发生时,R发生与否和B发生与否就条件概率分布而言是独立的。换句话讲,R和B在给定Y发生时条件独立,当且仅当已知Y发生时,知道R发生与否无助于知道B发生与否,同样知道B发生与否也无助于知道R发生与否。

贝叶斯线性回归技术

在统计学中,贝叶斯线性回归是一种线性回归方法,其中统计分析是在贝叶斯推断下进行的。 当回归模型具有正态分布的误差时,并且如果假设特定形式的先验分布,则可以获得模型参数的后验概率分布的显式结果。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

人机交互技术

人机交互,是一门研究系统与用户之间的交互关系的学问。系统可以是各种各样的机器,也可以是计算机化的系统和软件。人机交互界面通常是指用户可见的部分。用户通过人机交互界面与系统交流,并进行操作。小如收音机的播放按键,大至飞机上的仪表板、或是发电厂的控制室。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

暂无评论
暂无评论~