Embedded Probabilistic Programming

由于一直没找到好的并且能答得上的问题,以后打算时不时往这发点paper,然后对之进行一定的解释,练练手&降低阅读门槛(希望)。 这次的是 Embedded Probabilistic Programming 建议前置知识:Probability Distribution,Monad,Continuation P1-P6:我们想造一个编程语言,在这语言里面,所有变量都不是传统意义上的变量,而是Probability Distribution(PD)。 在本文中,一个a的PD可以看成一个List (probability, a),其中,probability(简称prob)是double的别名,一个PD的元素,(probability, a),代表在该概率下a的可能性是多小(这文章不考虑无限&连续的PD) 一个PD要满足两个条件:所有prob加起来是1,所有不同元素的a都不一样 在这定义下,我们可以定义多个PD下的函数:(此文皆为伪代码) return : a -> PD a,接受一个非随机的值,变成一个PD return x = [(1.0, x)] (这个随机变量只可能取一个值,就是传进来的那个) map : (a -> b) -> (PD a -> PD b),把PD里的所有a 都变成b map f [] = [] map f ((prob, value):: rest) = (prob, f value):: map f rest join : PD (PD a) -> PD a,把一个概率分布的概率分布变成概率分布 join [] = [] join (prob_of_prob, prob_value): rest = loop prob_value ++join rest...

August 7, 2017 · 圆角骑士魔理沙 · CC BY-SA 4.0