|
|
|
|
移动端

《概率编程实战》本书的作者Avi Pfeffer正是主流概率编程系统Figaro的首席开发者,他以详尽的实例、清晰易懂的解说引领读者进入这一过去令人望而生畏的领域。通读本书,可以发现概率编程并非“疯狂科学家”们的专利,无需艰深的数学知识,就可以构思出解决许多实际问题的概率模型,进而利用现代概率编程系统的强大功能解题。本节为序。

作者:姚军 译来源:人民邮电出版社|2018-01-20 16:54

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

1814年,皮埃尔?西蒙?拉普拉斯写道,“在很大程度上,人生最重要的问题就是概率问题。”此后过了100多年,回答这些问题(这一格言依然正确)的唯一方法是用笔和纸分析每个问题,得到结果的公式,手工填入数字以求得公式值。计算机的出现对这一情况并没有很大的改变,只是能够为包含更多数字的更复杂公式求值,纸笔分析也变得更加雄心勃勃,往往用纸数百页。

概率问题的分析需要构思概率模型,这种模型以某种方式规划概率空间,为其指定数值化概率。过去,概率模型用自然语言文本和半正式的数学标记法的组合写下。从模型中,经过进一步数学处理得出计算答案的公式或者算法。这些阶段都十分费时费力、容易出错,而且存在特定于具体问题的难点,使概率理论的适用性受到了严重的限制。尽管拉普拉斯在多年前就已提出,但是这个生活中最重要的问题仍然没有答案。

解决上述问题的第一个重要进步是定义概率模型所用的形式语言的发展,例如贝叶斯网络和马尔科夫网络。形式语言具有定义正确表达式的精确语法,以及定义每种正确表达式含义的精确语义(即每个表达式表示哪种概率模型)。因此,用机器可理解的形式描述概率模型,开发一个算法计算任何可表达概率模型结果都成为可能。

在前面的叙述中,美中不足的是:可表达概率模型的缺乏。实际上,贝叶斯和马尔科夫网络等形式语言表达能力相当有限。从某种意义上说,它们只是布尔电路的概率模拟。为了对这一局限性的含义有所了解,我们考虑一个问题:编写大型公司所用的工资单软件。在Java等高级编程语言中,这可能涉及数万行代码。现在,想象一下将许多逻辑门电路连接起来完成相同的功能。这样的任务似乎完全无法完成。这样的电路规模、复杂度和清晰性都无法想象,因为电路缺乏捕捉问题结构的表达能力。

1997年,本书作者Avi Pfeffer(当时还是个学生)和他的导师Daphne Koller以及协作者David McAllester发表了一篇关于概率编程语言(PPL)的原创论文,提供了将概率理论与高级编程语言联系起来的关键思路。这一思路是通过引入随机元素使程序成为概率模型,并将程序的意义定义为每个可能执行路径的概率。这一思路以高效的方式结合了数学的两个最重要分支,我们接下来将要开始探索由此产生的新可能性。

本书使用Figaro语言阐述这些概念及其应用,逐步引领读者理解上述思路。书中避开了不必要的数学知识,集中于详细构思、认真解释的实例,适合于拥有典型编程背景的读者。通读本书还有一个副产品:读者能够比以往更轻松地熟练掌握贝叶斯推理和统计学的原理及技术。最重要的是,读者将学习建模技能,这是任何科学家或者工程师的最关键技能之一。Figaro和其他PPL使人们可以直接、快速、精确地表现这种技能。

本书是将概率编程从开发它的实验室中转移到真实世界的重要步骤。从某种程度上说,PPL系统的能力无疑还难以应对这种挑战,那些研究实验室也将停止工作。另一方面,本书的读者一定能找出应用Figaro的创新方法,它与各种新问题的相关性也绝非作者所能想象的。

Stuart Russell

加州大学伯克利分校计算机科学教授


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java面向对象编程

Java是当前最流行的程序设计语言之一。本书以Java最新版本Java SE5为基础,涵盖了Java SE5最新特性,由浅入深地介绍了Java SE5的主要内容。...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊