当前位置: 首页 > 科技观察

麻省理工学院推出了一种编程语言,将工程师从方程式和手写代码中解放出来

时间:2023-03-20 17:44:31 科技观察

麻省理工学院的研究人员最近推出了Gen,这是一种新的概率编程语言,可以让研究人员编写将人工智能技术应用于多个领域的程序,而无需紧缩方程式并手动编写高性能代码。模型和算法。软件科学家JesusRodriguez写了一篇介绍Gen和其他一些类似工具的文章。雷锋网AI科技评论整理了他的文章如下。概率编程语言(PPLs)领域正在经历机器学习技术快速发展带来的奇迹般的复兴。在短短几年内,PPL已经从一个默默无闻的统计研究领域发展成为十几个活跃的开源项目。最近,麻省理工学院(MIT)的研究人员推出了一种新的概率编程语言Gen。这种新语言让研究人员可以编写模型和算法,在多个领域应用AI技术,而无需手动处理方程式和编写高性能代码。PPL是机器学习管道的常规组成部分,但其实施仍然具有挑战性。尽管市场上的PPL数量大幅增加,但大多数PPL仍局限于研究工作,并不适合实际应用。在2015年谷歌开源TensorFlow之前,深度学习领域也经历过类似的挑战。使用TensorFlow,开发人员能够使用一致的框架构建复杂而高效的深度学习模型。从某种意义上说,Gen正在寻找进行概率编程的方法,就像TensorFlow为深度学习所做的那样。然而,为了做到这一点,Gen需要很好地平衡PPL的两个关键特性。表现力和效率现代PPL的最大挑战是在建模表现力和推理效率之间取得平衡。虽然许多PPL在句法上很丰富并且可以用来表示几乎任何模型,但它们倾向于支持有限的推理算法,这些算法收敛速度非常慢。其他PPL具有丰富的推理算法,但仍然是特定领域的,因此不适合一般应用。通用PPL应支持两个基本效率向量:1)推理算法效率:通用PPL应允许开发人员创建定制的、高度复杂的模型,而不会牺牲底层组件的性能。PPL语法的表现力越强,优化过程就越具有挑战性。2)实现效率:一般PPL要求系统运行超越算法本身的推理算法。执行效率取决于存储算法状态的数据结构、系统是否使用缓存和增量计算等因素。GenGen通过使用改进了一些传统PPL技术的新架构来解决上述一些挑战。基于Julia编程语言,Gen引入了一种架构,该架构将模型表示为图灵完备建模语言中的程序代码,而不是黑盒,它通过通用接口公开推理功能。这些称为生成函数的黑匣子包括具有以下功能的接口:1.构建模型的工具:Gen提供多种可互操作的建模语言,每种语言具有不同的灵活性/效率权衡。单个模型可以组合来自多种建模语言的代码。生成函数利用非常适合建模和增量计算的数据结构。2.裁剪推理的工具:Gen提供了推理编程的高级库。它仅通过生成函数与模型进行交互,实现推理算法模块的构建。3.评估:Gen提供了一个经验模型来评估其在已知推理问题中针对备选方案的性能。下图说明了Gen的架构。如您所见,该框架支持微分推理算法,以及基于生成函数概念的抽象层。使用Gen开始使用Gen很容易。可以使用Julia包管理器安装语言工具。pkg>addhttps://github.com/probcomp/Gen在Gen中编写生成器函数就像编写带有一些扩展的julian函数一样简单。@genfunctionfoo(prob::Float64)z1=@trace(bernoulli(prob),:a)z2=@trace(bernoulli(prob),:b)returnz1||z2endGen还包括一个可视化框架,可以用来绘制推理模型并评估其效率。#Startavisualizationserveronport8000server=VizServer(8000)#Initializevisualizationwithsomeparametersviz=Viz(server,joinpath(@__DIR__,"vue/dist"),Dict("xs"=>xs,"ys"=>ys,"num"=>length(xs)),"xlim"=>[minimum(xs),maximum(xs)],"ylim"=>[minimum(ys),maximum(ys)]))#OpenthevisualizationinbrowseropenInBrowser(viz)gen不是唯一推荐的工具A试图解决可编程推理挑战的语言。近年来,出现了许多PPL的强大替代品:EdwardEdward是一种用Python编写的图灵完备概率编程语言(PPL)。Edward最初由GoogleBrain团队支持,但现在有很多贡献者。自Edward的原始研究论文于2017年3月发表以来,Stack已在机器学习社区中得到广泛采用。爱德华结合了三个领域:贝叶斯统计和机器学习、深度学习和概率编程。该库与Keras和TensorFlow等深度学习框架无缝集成。PyroPyro是UberAILabs发布的一种深度概率编程语言(PPL)。Pyro基于四个基本原则构建在PyTorch之上:通用:Pyro是一个通用的PPL,可以表示任何可计算的概率分布。如何表达?从具有迭代和递归(任意Python代码)的通用语言开始,然后添加随机采样、观察和推理。可扩展:Pyro可以扩展到大型数据集,而手写代码的开销很小。怎么做?通过构建现代黑盒优化技术,利用小批量数据进行近似推理。最小:Pyro灵活且可维护。怎么做?Pyro是用一个强大的、可组合的抽象核心实现的。在可能的情况下,使用PyTorch和其他库。灵活:Pyro旨在在您需要时实现自动化和控制。怎么做?Pyro使用高级抽象来表示生成和推理模型,同时允许研究人员轻松定制推理。Infer.Net微软最近开源了一个为.NET开发者简化概率编程的框架。微软研究院自2004年以来一直致力于Infer.net,但直到最近,随着深度学习的出现,该框架才真正流行起来。Infer.net的优势使其成为开发人员深入PPL领域的有力选择。Gen是PPL中最新但最有趣的成员。统计与深度学习的结合是人工智能未来发展的关键要素。像Gen这样的努力正试图以与TensorFlow对深度学习相同的方式来推广PPL。