序言
概率编程是一类计算机编程框架,用于灵活地构建贝叶斯模型,一旦构建好模型,强大的推断算法便可以独立于特定的模型而工作,并通过模型拟合数据。把灵活的模型定义与自动推断结合在一起便得到了一个强大的工具,方便研究者们快速地构建、分析和迭代新的统计模型。这个迭代过程与以往用贝叶斯模型拟合数据的方式有很大的不同:以往的推断算法仅对某一特定的模型有效。这不仅导致人们在构建模型和设计推断算法的时候,需要具备很强的数据技巧,还降低了迭代速度:需要先修改模型,然后重新设计推断算法。而概率编程则将统计建模的过程大众化,大大降低了对使用者的数学水平的要求,缩短了构建新模型时所需花费的时间,同时还能增强使用者对数据内涵的洞察。
概率编程背后的思想并不新鲜。BUGS是最早的概率编程实践之一,于1989年首次发布。由于能够成功应用的模型非常有限,而且推断过程很慢,因此这些第一代语言不太实用。如今,人们已经开发出了许多概率编程语言,并在学术界和各大公司(如谷歌、微软、亚马逊)广泛地用于解决各种复杂问题。那现代的概率编程语言有哪些变化呢?最大的变化来自哈密顿蒙特卡洛采样算法,它相较以往的采样算法要高出若干个数量级,以往的算法只能用来解决一些玩具问题,而如今的算法可以用于解决非常复杂的大规模问题。尽管这些采样器起源于1987年,但得益于最近的一些概率编程系统,如Stan和PyMC3,它们才被广泛地使用起来。
本书将从务实的角度介绍概率编程这一强大而灵活的工具,它将影响你如何思考和解决复杂的分析问题。作为PyMC3的核心开发者之一,没有人比Osvaldo Martin更适合来写这本书了。Osvaldo非常擅长将复杂的问题拆解成容易理解和吸收的部分,他宝贵的实战经验将带领读者穿过这片复杂的领域。书中的图表和代码是非常有用的资源,这些都将增进读者对背后理论知识的直观理解。
此外,我还要称赞此刻拿起本书的亲爱的读者。如今这个时代,各大新闻头条都在鼓吹深度学习才是解决所有当前和未来分析问题的技术,为某个具体目的而特地构建一个定制化的模型似乎显得不那么吸引人。不过,通过概率编程,你将能够解决其他方法很难解决的复杂问题。
这并不是说深度学习不是那么令人兴奋的技术。事实上,概率编程并不局限于经典的统计模型。阅读最近一些机器学习文献,你就会发现,贝叶斯统计正作为一个强大的框架被用来表示和理解下一代深度神经网络。本书不仅会让你具备分析和解决复杂问题的技能,还会带你走进可能是人类智慧的最前沿:开发人工智能。尽情享受吧!
Tomas Wiecki 博士
Quantopian首席研究员