AI的快速发展激起了很多人的学习热情,但是初学者苦于大量的手动编程而止步不前,有没有一种编程语言可以让那些在计算机科学和数学领域专业知识较少的人,也能使用简洁的代码量来完成具体的AI应用呢?
今天为大家推荐一个专门用来预测的复杂模型和推理算法——Gen。下面随文摘菌一起来看看它的“前生今世”。
Gen问世之前的AI学习库(框架)
在2015年,谷歌发布了一个采用数据流图进行数值计算的开放源代码应用程序软件库TensorFlow(基于数据流编程的符号数学系统),它可以帮助初学者和专家自动生成机器学习系统,而不需要做太多数学运算。这个平台现在被广泛的使用,希望帮助人工智能在某些方面实现民主化。
尽管它是自动且高效的,但是与人工智能的广泛前景相比,它的重点仅限于深度学习模式,总的来说这种模式既昂贵又有局限性。
但是现在有很多可用的人工智能技术,比如统计和概率模型,以及仿真引擎。其他一些概率编程系统虽然足够灵活,能够覆盖多种人工智能技术,但他们的运行效率很低。
Gen“缘起”
鉴于之前的AI应用开发框架不太灵活,研究人员试图研究一套系统以将自动化、灵活性和高效性都融合在一起,但Mansinghka(一位研究人员)说,“如果我们可以做到这样,也许我们可以通过更广泛的建模和推理算法集合来帮助实现民主化,就像TensorFlow一样有助于深度学习的研究。”
MIT的一队研究人员一直致力于使初学者快速入门人工智能,与此同时,他们的研究也帮助这一领域的专家不断取得了进步。研究人员发现,在基于概率的人工智能中,用推理算法对数据进行运算,并根据新数据不断调整概率来进行预测。这样做最终会生成一个可以对新数据进行预测的模型。
基于他们早期概率编程系统“Church”中使用的概念,研究人员将几种自定义的建模语言融入MIT开发的通用编程语言“Julia”中。每种建模语言都针对不同类型的人工智能建模方法进行了优化,使其变得更加通用。Gen还使用了各种不同的方法,例如优选法、变分推理、概率统计法和机器学习,为推理任务提供高级基础设施。除此之外,研究人员还进行了一些优化调整,以使其实现有效运行。
同时,本周召开的程序设计语言设计与实现大会上,研究者们做了一场以新型概率编程系统——Gen为题的演说,用户从不同的AI技术应用领域编写模型和算法,这些领域涉及到计算机视觉、机器人和统计学,而这些模型算法可以代替人去解决,那些复杂公式和手工编写高性能代码。
为什么要使用Gen?
举例来说,在研究者的文章中提到,一个简短的Gen编程,可以推断3D身体姿势,而这种复杂的计算机视觉推断任务需要用到自动系统、人机交互、增强现实等技术。而在屏幕之后,这些程序包括了那些组成执行图像渲染、深度学习和其他种类的概率模拟的组件。这些不同技术的结合使这项任务比一些研究人员早期开发的系统具有更高的准确性和速度。
研究表明,不管是初学者还是专家都能非常轻易地上手Gen,因为它使用起来非常简单,且在某些用例中是自动化的。一位电气工程和计算机科学系的Marco Cusumano Towner博士说,“这个项目的一个动机就是让那些在计算机科学和数学领域专业知识较少的人,更容易地使用自动化人工智能”,他还说“我们同样也希望提高生产率,这意味着让专家更容易地高速迭代和原型化他们的人工智能系统”。
研究人员还演示了Gen通过使用另一个Gen的程序来简化数据分析的能力,该程序可以自动生成复杂的统计模型,通常用来供专家分析、解释和预测数据中基本趋势。它与早期需要大量手工编码才能进行准确预测的系统不同,建立在研究人员先前工作的基础上,它只需要让用户编写几行代码就可以揭示和了解金融走势、航空旅行、投票方式以及疾病传播等的趋势。
一位大脑与认知科学部门负责概率计算机项目的研究员Vikash K.Mansinghka说,“Gen是第一个灵活高效自动化的系统,拥有最先进的性能,能够覆盖计算机视觉和数据科学中不同类型的事例。”
Uber的首席科学家兼人工智能副总裁、剑桥大学教授Zoubin Ghahramani虽然没有参与这一项目,但是他说,“概率规划是自机器学习出现以来,人工智能最有前景的领域之一。Gen代表了这一领域的显著的进步,将有助于实现基于概率推理的人工智能系统的可扩展性和实际性发展。”
同样也没有参与此项研究的谷歌研究主管Peter Norving也赞扬了这项工作,他说,“Gen允许解决问题的人使用概率规划,如此对问题有一个更为原则性的方法,但不受概率规划系统设计者的选择所限制。”他还说,“通用编程语言……之所以成功是因为,它们使程序员更容易完成任务,同时也使程序员能创造出全新的东西来有效地解决新问题。Gen对于概率规划也是这样做的。”
探索“Gen”的本质
铺垫了这么多,那么Gen是怎么实现的呢?
下文将以论文的第三、四部分为例,介绍实现的机理,文摘菌略过了论文中枯燥的公式推理,先说明下原理吧,感兴趣的读者可以阅读论文原文。
原文链接:
http://delivery.acm.org/10.1145/3320000/3314642/pldi19main-p645-p.pdf?ip=118.144.138.198&id=3314642&acc=OA&key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2EE959BD37CA561672&__acm__=1562839037_72bcb9e83ef52bd8c297ff545e867515
Generative Function Interface(生成函数接口)以下简称GFI,GFI是一个“黑盒子”,用来实现建模语言和特定推理算法之间的接口,Generative Function (生成函数)由建模语言编辑器生成,具体实现过程是这样的:
- 用户将需要实现的功能使用@gen语法描述;
- 将语法描述交由动态建模语言编译器生成Generative Function;
- 通过Generative Function实现GFI
为了理解下文先介绍两个名词:
- Choice Map是地址到真实值之间的映射
- Generative Function表示为元组的形式:G = (X, Y, f ,p,q)
接口方法
论文中介绍了5种接口方法:
- generate (对约束条件的trace)-参数:u(Choice Map)、x-以映射集合u和参数x作为输入并返回结果;
- propose-参数x-返回t(Choice Map)、权重w;
- assess(评估Choice Map的可能性):此方法评估和计算由Generative Function生成的特定Choice Map(u)的可能性;
- update:更新方法调整执行trace的(t,x)中的随机选择,这是迭代推理算法中的常见模式,例如MCMC和MAP优化;
- choice_gradients:choice_gradients(differentiation)此方法计算跟踪的对数概率的梯度参数x和/或随机值的值选择。
具体的执行过程参照下图foo()函数的trace和choice map的生成过程。
系统总览
下面将以一个回归任务为例,演示Gen的编程风格:
a图给定数据集(x,y),需要推断x,y之间的关系,并检测异常值,这是一个典型的回归问题;b图是用@gen语法生成的描述模式;c图是b图的生成地址空间;f和g图展示出了在“Julia”(上文提到的MIT开发的通用编程语言)中实现的两个用户程序,每一个程序实现了一种不同的算法来解决任务,结果表现出不同的效率,如图h所示。
实验室外的“Gen”:Gen的工业应用
讲了这么多,Gen有没有开源?在工业界有使用案例吗?请看下文:
外部用户已经找到了利用Gen进行人工智能研究的方法。例如,英特尔正在与MIT合作运用其用于机器人和增强现实系统的深度感应摄像头,利用Gen进行3D姿态估计。MIT林肯实验室也在合作研究Gen在航空机器人领域的应用,以实现其在人道主义救援和灾难应急响应方面的应用。
MIT一直致力于人工智能的研究,因此Gen开始被用于雄心勃勃的人工智能项目。例如,Gen是MIT和IBM沃森人工智能实验室项目的核心,美国国防部高级研究项目计划局也将其应用于正在进行的机器常识项目,旨在模拟一个18个月大的孩子所能拥有的人类常识。Mansinghka也是该项目的主要研究人员之一。
Mansinghka说,“对于Gen,研究人员第一次可以很容易地整合一系列不同的人工智能技术。看看人们在现阶段发现了什么是可能的,这将会是很有趣的。”
Gen的开放源代码是公开可用的,并且在即将举行的开放源代码开发人员会议上展示,包括Strange Loop和JuliaCon,这项工作在一定程度上也得到了美国国防高级研究计划局(DARPA)的支持。