时间: |
MW 1:30–2:45 |
地点: |
哈利根102 |
向以下人员提问: |
广场 |
教练: |
诺曼·拉姆齐,Halligan哈利根222 |
快速参考:教学大纲、时间表、照片
此时,类的主要资源是教学大纲和日程安排我希望能编写一个软件,使阅读更容易。
背景
在现实世界中,事件是不确定的。为了推理不确定事件,我们使用概率(以及统计数据)进行计算。在过去20年里,编写概率计算的人越来越多地设计、构建和使用特殊用途的概率编程语言。这种方法的流行可以从工业和研究中使用的大量此类语言中看出:Anglican、AutoBayes、Alchemy、Blaise、BLOG、BUGS、Church、Csoft、FACTORIE、Figaro、Fun、Hakaru、HANSEI、HBC、IBAL、Lambda-circle、Probabilistic cc、PFP、Probablistic Scheme和Wolfe。
为了让您了解这些语言要解决的问题,下面是一个概率程序的草图:
- 有30%的可能性下雨
- 灌溉的可能性为50%
- 如果下雨,草有90%的可能性会湿
- 如果打开灌溉,草有80%的可能性会被弄湿
- 草有10%的可能性会因未知原因被弄湿
编写一个可以运行这个程序的解释器很容易向前地并回答问题“草被弄湿的概率是多少”。这一点都不有趣。有趣的是,拿着这个程序问:“如果我看到草是湿的,下雨的概率是多少?”(回答:大约47%)。有趣的计算包括推理,从结果到原因进行反向推理:
课程目标
上面列出的大多数语言都是由主要专长是机器学习而不是编程语言的人设计和实现的。本课程的主要目标是:
为了理解概率语言设计者试图解决的问题,你可以把自己的计算经验联系起来。
看到问题的一部分,就要把19世纪的数学和21世纪的程序分析结合起来。
看看,尽管有令人满意的数学基础,现有的解决问题的方法是如何多样化的,并且至少在一定程度上是不令人满意的。
我们还将学习如何分析概率程序。
课程详细信息
课程的进度将相对较慢。本课程旨在帮助学生深入实现一到两个目标,而不是对整个领域进行气喘吁吁的调查。
课程将每周举行两次,分两个阶段进行:
从编程语言的角度介绍概率语言。这一阶段将包括审查COMP 105(编程语言)的相关材料和概率基础。然后,它将继续阅读和讨论概率编程语言的主要来源。
在第二阶段,我们将强调来自编程语言文献的相对技术性论文,偶尔会被来自机器学习文献的相对应用性论文所激发。
每个学生本学期都要承担一个项目。该项目可以单独进行,也可以在任何规模的团队中进行。任何与概率编程语言相关的项目都是可以接受的。想法可能包括
评分将基于课堂参与度和对参与项目的贡献。不会有考试。为了获得课堂参与的学分,学生将被要求参与关于阅读和问题的课堂讨论。学生们还将在课堂外解决小编程问题或概率问题,并在课堂上准备分享解决方案。此类问题将计入课堂参与,但不会另行评分。
关于一切的更多信息是在教学大纲中.
先决条件:COMP 105(编程语言)。
项目要考虑的语言和系统
这里有一些语言和系统,它们是项目有趣的潜在基础。首先列出了最成熟、对初学者最友好的系统:
网络PPL是电子书的实现语言概率程序设计语言的设计与实现.
教堂是具有概率语义的Scheme类语言。我对计算模型有疑问,但它是许多其他项目的基础。电子书中有一个详尽的教程认知的概率模型.
英国圣公会灵感来源于Church,并与Clojure融为一体。它为Java虚拟机编译成相对高效的代码。有一个高度抛光的教程.
哈卡鲁是一种嵌入Haskell中的概率语言。它的显著特点是可以通过符号分析进行精确推断。我们将在课堂上阅读这个推论。
概率C旨在作为高级概率语言的编译目标。令人惊讶的是,只需向C添加两个原语,并利用并行性,就能完成这么多任务。
沃尔夫是一种嵌入Scala的概率语言。它以一种特别清晰的方式谈论概率域。
更长的列表以及其他注释可以在概率规划.org
.