晓查 栗子 发自 凹非寺 
量子位 出品 | 公众号 QbitAI

大家可能知道,要做概率编程 (Probabilistic Programming) 的话,TensorFlow Probability (TFP) 这个库是个不错的选择。

大家可能不知道,现在TFP里面有了一本开源教材,可以手把手教你学概率编程。就算是新手,就算没有用过TFP,也不要紧:

就是这本书,Bayesian Methods for Hackers。入门教材,注重实践,拥有各种示例。

(TFP版本的教材,也是先前PyMC3版本的一个补充。)

这本教材,除了适合新人上手概率编程,也展示了概率编程在现实问题中的应用。

概率编程,人人可学

贝叶斯方法,提供了一个相对直观的框架,把信念表征 (Representing Beliefs) 出来,再根据新的数据来更新这些信念。

教材以TFP库为根基,向大家传授这样的技术,还有许多动手实践帮助大家练习。

这本书是在Google Colab里面写的,里面的Python示例可以运行也可以修改

现在有友好的教材了,来学概率编程吧。毕竟,从金融到石油天然气,各行各业可能都用得到:不确定性 (Uncertainty) 无处不在,许多事件都可能受到外部因素的影响。如果抛开这些因素,模型就可能不准了,所以才有了概率编程,才有了TFP库。

那么,来看一下TFP是怎样解决现实问题的:

解决现实世界的问题

Bayesian Methods for Hackers一书从简单问题开始,比如用于硬币正反和骰子点数问题,然后转向更为现实的问题,包括从理解宇宙到检测在线用户行为的变化。

下面我们将概述一个著名的现实世界问题:1986年挑战者航天飞机灾难性事故。书中对此问题有更详细的处理。

1986年1月28日,美国挑战者号航天飞机的第25次飞行中,由于O形圈故障,挑战者号的两个固体火箭助推器中的一个爆炸了。 虽然工程师与O形圈制造商就先前飞行中的损坏进行了多次沟通,但制造商认为风险是可以接受的。

下图描述了对先前航天飞机任务中的七次O形圈损坏事件的观测,这是损坏事件对环境温度的函数。 (在70度时,有两个损坏事件。注:温度均为华氏度,下同。)

你会注意到,随着温度的降低,O形圈损坏的比例会显著增加,但是没有明显的温度阈值,低于该阈值时O形圈就一定会失效。 与现实世界大多数现象一样,这个问题存在不确定性。 我们希望在给定温度t下,确定O形圈失效的概率是多少?

我们可以使用逻辑函数模拟温度t下O形环损坏的概率p :

其中β确定概率函数的形状,α是偏移项,控制函数的左右移动。 由于这两个参数都可以是正的或负的,没有特定的边界或大小的偏差,我们可以将它们建模为高斯分布随机变量:

在TFP中,我们可以用tfp.distributions.Normal直观地表示α和β,代码如下:

请注意,我们在第8行得到p(t)的实际值0或1,其中我们使用先前在第6行和第7行中采样的α和β值对概率函数进行采样。另外,请注意evaluate()辅助函数允许我们无缝地在图形和eager模式之间转换,同时将张量值转换为numpy。

为了将温度t、失效概率p(t)与我们的观测数据联系起来,我们可以使用带参数p(t)的伯努利随机变量。 注意,通常,Ber(p)是随机变量,其值为1的概率为p,其余情况下为0。 因此,生成模型的最后一部分是某温度下观测到有缺陷事件的数量D? ,它可以建模为:

鉴于这种生成模型,我们希望找到模型参数,可以解释观察到的数据,这正是是概率推理的目标。

TFP通过使用非标准化联合对数概率函数评估模型来执行概率推断。此joint_log_prob的参数是数据和模型状态。 该函数返回参数化模型生成观测数据的联合概率的对数。

接下来,我们使用joint_log_prob函数,并将其发送到tfp.mcmc模块。 马尔可夫链蒙特卡洛(MCMC)算法对未知输入值进行有根据的猜测,计算joint_log_prob函数中参数集的可能性。 通过多次重复此过程,MCMC构建了可能参数的分布。 构建此分布是概率推理的目标。

因此,我们将通过challenge_joint_log_prob函数设置一种特定类型的MCMC,称为“哈密顿蒙特卡洛”:

最后,我们将通过evaluate()辅助函数进行推理:

通过绘制α和β的分布图,我们注意到这两个参数分布相当宽:

正如我们上面提到的,我们真正想知道的是: 在给定温度下O形环损坏的预期概率是多少? 为了计算这个概率,我们可以对来自后验的所有样本求平均值,得到概率的可能值。

然后我们可以在整个温度范围内计算95%的可信区间。 请注意,这是一个可靠的区间,而不是通常在统计分析方法中的置信区间。 95%可信区间告诉我们,我们可以95%的概率确定真实值将位于此区间内。 例如,正如下图中的紫色区域,在50度时,我们可以95%确定O形圈损坏的概率介于1.0和0.80之间。

挑战者号事故发生当天的温度为31华氏度。事实证明,O形圈失效的后验分布将使我们高度确信会出现损坏的问题。

这种相当简单的概率分析证明了TFP和贝叶斯方法的强大功能:它们可以提供有价值的分析,对可能产生重大后果的实际问题进行预测。

关于TensorFlow Probability

TensorFlow Probability是一个Python库,可以把概率模型和深度学习轻松结合起来。

机器学习研究人员或者工程师,都可以用它编码领域知识 (Domain Knowledge),就是某个特定领域的专业知识,从而理解数据并写出自己的应用。这里有:

· 许多种类的概率分布,以及Bijectors;

· 搭建概率模型的各种工具,比如概率层 (Probabilistic Layers) 以及Edward2语言;

· 变分推理 (Variational Inference) 和马尔科夫链蒙特卡洛 (MCMC) ;

· 以及各种优化器,比如Nelder-Mead,BFGS和SGLD。

现在,连教材也有了,大家可以开始愉快地学习了。

TensorFlow Probability传送门:
https://www.tensorflow.org/probability/

《Bayesian Methods for Hackers》电子书:

https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers

博客传送门:
https://medium.com/tensorflow/an-introduction-to-probabilistic-programming-now-available-in-tensorflow-probability-6dcc003ca29e?linkId=60908456

TensorFlow手把手教你概率编程:TF Probability内置了开源教材,新手友好相关推荐

  1. 手把手教你使用ADB卸载手机内置App软件

    [一.前言] 不知道你们有没有那么一段黑暗时期,刚买个手机,手机上内置一堆app,还卸载不掉,然后每天各种广告,手机一共1G的运行内存,那些流氓app还要再占走一些内存,真是让人欲哭无泪啊,后来我就学 ...

  2. 手把手教你使用CocoaPods管理你的iOS第三方开源类库

    手把手教你使用CocoaPods管理你的iOS第三方开源类库 本文转载自:http://kittenyang.com/cocoapods 鉴于我开这个博客的初衷是记录自己平时的技术积累,而我平时又属研 ...

  3. 真正手把手教你用unity接入苹果内购(IAP)

    原帖:真正手把手教你用unity接入苹果内购(IAP) http://www.manew.com/thread-100403-1-1.html (出处: -[游戏蛮牛]-ar增强现实,虚拟现实,uni ...

  4. 十八.面向对象编程,__init__方法,内置函数

    学习python第18天 一.面向对象编程 面向过程编程与面向对象编程 对象是数据与功能的集合体,而类则是对象之间相同数据与功能的集合体 类与对象 二. __init__方法 选课案例改进1: 选课案 ...

  5. 手把手教你从如何从公司内网访问外网(非翻墙)

    背景 不能上外网?是可忍孰不可忍. 根据公司安全要求,在办公网络是无法访问外网的,甚至打开百度都只能靠页面快照.作为一名程序员,不能百度是一件无法忍受的事情.幸好不是完全的网络隔离,而是屏蔽了几乎所有 ...

  6. 1000道Python题库系列分享21(11道编程题:内置函数专项练习)

    本期题目,答案在文末: 温馨提示 进入公众号,通过菜单"最新资源"==>"历史文章"可以快速查看分专题的文章列表,通过"最新资源"== ...

  7. join left 大数据_Java并发编程笔记-JDK内置并行执行框架Fork/Join

    Fork/Join由来-分而治之思想 分而治之:对于一个比较复杂的任务,如果可以很自然地将其分解为多个子任务,这些子任务互相独立且与原问题性质相同,递归地处理这些子任务,然后将各个子任务的结果合并得到 ...

  8. 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了"一文读懂TensorFlow(附代码.学习资料)",带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站.图书.视频等资料,本期文章就来带你一步步 ...

  9. 手把手教你学Python之波士顿房价预测(scikit-learn的应用)

    目录 1.波士顿房价预测介绍 2.线性回归算法 3.调用scikit-learn库实现房价预测 1.波士顿房价预测介绍 问题描述:波士顿房价数据集统计的是20世纪70年代中期波士顿郊区房价的中位数,统 ...

最新文章

  1. linux expect 自动交互命令 总结
  2. C语言十进制数转换为八进制(附完整源码)
  3. 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式
  4. spring cloud构建互联网分布式微服务云平台-断路器聚合监控(Hystrix Turbine)
  5. 重学java基础第二十一课:编译型和解释型
  6. iphone无线充电充电测试软件,瞎折腾星人的测评 篇一:想体验iPhone的无线充电?这可能是最具性价比的选择了!...
  7. 线上风控与数据埋点三部曲(一)——流量江湖不是处女地,投放渠道需谨慎
  8. 【服务器】WAMP一键安装PHP开发环境
  9. 有计算机考试励志的文案,关于考试的句子励志
  10. @EnableWebMVC注解理解
  11. java AES 32位加密解密
  12. 基于ArcGIS模型构建器工具的土地利用现状重分类流程及常见问题
  13. launcher3的具体学习
  14. PEM 与 DER 格式详解
  15. 什么牌子真无线蓝牙耳机适合运动,高续航舒适小巧这五款蓝牙耳机不要错过
  16. java枚举值转化中文_多个枚举的国际化(枚举值的转换)
  17. 白盒测试中的逻辑覆盖法
  18. 达人评测 i7 12700H和R7 6800H选哪个好
  19. 如何获取 ChatGPT OpenAI API Key
  20. Linux centos7 代码运行时出现已放弃(吐核)的问题解决

热门文章

  1. 为什么 GitHub 上的开发者比 iOS 上的要更值钱?
  2. 1 亿人民币的差距!硅谷初创公司工资期权调查报告里的 0.1% 与 1%
  3. GitHub 的 12 个实用技巧,你 get 了几个?
  4. 想拿高工资?那些年Java面试官常问的知识点项目实战
  5. linux查看/etc/fastab,/etc/fastab文件丢失致系统宕机的解决方案
  6. c# 后台传到前台乱码_ASP.NET关于前台脚本传递中文参数,后台获取乱码问题(乱码为方框,黑色方框等。。)...
  7. python语句写入oracle_将Python变量插入Oracle数据库
  8. python 翻译库本地库_利用python爬取并翻译GEO数据库
  9. mysql.proc_升级后直接更改mysql.proc表
  10. vue一级分类和耳机分类_vue 无限级分类导航