【机器学习】Tensorflow概率编程: 贝叶斯线性回归、变分贝叶斯与黑盒变分推断
来源:互联网 发布:淘宝没有访客 编辑:程序博客网 时间:2024/04/29 03:37
我们首先看看概率编程最简单的实例:贝叶斯线性回归。
线性回归的基本公式为
传统贝叶斯线性回归的局限
如果w、b的先验不服从正太分布,我们就不容易写出类似上面的最优化方程,也就无从求解。而概率编程则可以部分解决这些问题。
下面的例子还是使用最简单的正太分布,效果最显著。
首先写出概率分布方程组:
根据概率分布方程组,我们可以看出方程组可以归为一个泛函方程。概率编程上求解这类方程的方法主要有两大类:变分推断和蒙特卡洛方法。变分推断计算复杂,不过较为精确。我们来看看如何求解。
泛函方程有解析解的情况并不多,一般求解数值近似解。对于一个复杂的泛函分布,我们可以用多个简单的独立分布来拟合,进行近似推断。请注意独立这个要求,可以类比为重新构建一类基空间。这一大类方法称为平均场。分布是函数,用简单独立分布去拟合真实分布,其实就是用简单基函数去构建真实复杂函数。衡量函数近似度的一个基准就是大名鼎鼎的KL散度/KL距离/相对熵。其定义为
变分推断
我们不知道样本Y的真实分布,但是客观真理是不会改变的,所以
其中C是常数,ELBO表示Evidence Lower Bound Objective。我们的目标是最小化KL散度,其中
好在
这么多未知量,一个求解方法就是先优化一类变量
合并在一起,我们看出来这长得很像KL散度的负数形式:
这个计算能得到较为精确的结果,不过解析式太复杂了,尤其是面对非正太分布的时候,计算简直了不得。所以实际上是提供了ELBO可解的证明。
Tensorflow Edward与黑盒变分推断
Tensorflow Edward加入了自由参数
对
于是
接下来我们看看先验信息是怎么使用的。根据(3)式,我们把w,b看做
公式虽然多,但是Tensorflow Edward已经写好了,最后放上一个拟合cos函数的代码,非常简洁:
import tensorflow as tffrom edward.models import Normalimport edward as eded.set_seed(42)sess = ed.get_session()tf.global_variables_initializer().run()W_0 = Normal(mu=tf.zeros([1, 2]), sigma=tf.ones([1, 2]))W_1 = Normal(mu=tf.zeros([2, 1]), sigma=tf.ones([2, 1]))b_0 = Normal(mu=tf.zeros(2), sigma=tf.ones(2))b_1 = Normal(mu=tf.zeros(1), sigma=tf.ones(1))x = x_trainy = Normal(mu=tf.matmul(tf.tanh(tf.matmul(x, W_0) + b_0), W_1) + b_1, sigma=0.1)print(y.get_shape())qW_0 = Normal(mu=tf.Variable(tf.zeros([1, 2])), sigma=tf.nn.softplus(tf.Variable(tf.zeros([1, 2]))))qW_1 = Normal(mu=tf.Variable(tf.zeros([2, 1])), sigma=tf.nn.softplus(tf.Variable(tf.zeros([2, 1]))))qb_0 = Normal(mu=tf.Variable(tf.zeros(2)), sigma=tf.nn.softplus(tf.Variable(tf.zeros(2))))qb_1 = Normal(mu=tf.Variable(tf.zeros(1)), sigma=tf.nn.softplus(tf.Variable(tf.zeros(1))))inference = ed.KLqp({W_0: qW_0, b_0: qb_0, W_1: qW_1, b_1: qb_1}, data={y: y_train})inference.run(n_iter=1000, n_samples=5)
在核心部分拟合的还可以,边角没拟合上,说明非线性不够。我很少见到用深度学习拟合周期函数的。
Ranganath, R., Gerrish, S., & Blei, D. (2014). Black box variational inference. In Artificial intelligence and statistics.
阅读全文
0 0
- 【机器学习】Tensorflow概率编程: 贝叶斯线性回归、变分贝叶斯与黑盒变分推断
- 机器学习(2) 变分推断
- 机器学习(2) 变分推断
- 变分贝叶斯推断(Variational Bayes Inference)简介
- 变分贝叶斯推断(Variational Bayes Inference)简介
- 机器学习:LDA_数学基础_5:变分推断:变分推断部分
- 变分推断学习笔记
- 机器学习与TensorFlow编程(1)线性回归模型
- 变分贝叶斯简介
- 变分推断
- 变分推断
- 机器学习:LDA_数学基础_4:变分推断:EM基础
- LDA的变分推断
- Variational Bayes(变分贝叶斯)
- 变分贝叶斯自编码器
- 自编码变分贝叶斯
- 【机器学习】Tensorflow概率编程:线性混合模型
- 变分推断学习笔记(1)——概念介绍
- Centos7配置静态IP
- 【hadoop学习笔记】——Hive
- Hibernate 集合映射
- SPSS Statistics 24 中文破解版安装教程(图)附注册机下载
- 《逆向工程核心原理》学习总结(一)
- 【机器学习】Tensorflow概率编程: 贝叶斯线性回归、变分贝叶斯与黑盒变分推断
- Java多线程-无锁
- 170630 逆向-珍贵资料
- 【转】小辩《降薪求职,到底该不该?》
- VMware虚拟机三种联网方法及原理
- BZOJ 1398: Vijos1382寻找主人 Necklace 最小表示法
- hadoop-30
- 贪心(POJ 1700)
- Our Collectors