【机器学习】Tensorflow:概率编程初步印象

来源:互联网 发布:淘宝香云纱 编辑:程序博客网 时间:2024/06/06 04:21

  谷歌对Tensorflow的定位是机器学习库而不仅仅是深度学习库。随着基于Tensorflow的深度概率编程库Edward的发展,Tensorflow踏入概率编程领域,与stan、pymc展开了竞争,大大扩展了应用范围。现在来看看基于Tensorflow的概率编程的一些初步知识笔记。
  在深度学习爆火以前,很多机器学习书籍都以统计学习为主要内容。统计学分为两大派别:频率派和贝叶斯派。随着贝叶斯方法在机器学习的实际应用,贝叶斯派打足了气,很多实用的机器学习方法都以贝叶斯为基础。知乎甚至将PRML宝典称为“贝叶斯视角的机器学习方法”,可见贝叶斯方法的重要。
  深度学习大热之后,统计学习方法退潮了。深度学习大致经历了感知器->浅层神经网络,DBN,RBM->CNN,RNN等阶段。其中基于概率模型的DBN和RBM,和神经网络一起催生了DNN,但是又有不同。虽然DNN有了长足发展,其基本思想、构造和80年代的论文思路基本一致;其基本原理依然是个谜,没有有理有据的指导方法。DNN网络层数越复杂,要求解出DNN的最优解,就需要在非常高维度的空间中搜索解空间;DNN很难继承人已掌握的知识,基本需要从头学起。诸多原因催生DNN和概率模型的结合,有利于限制学习维度,优化训练速度,变化出更强的普适性。DNN可以归入图模型,目前的一些猜想上认为DNN与统计方法有联系,所以有观点将统计学习和深度学习统一为概率图模型大类中。
  市面上概率图模型的基础教程,按大章节可分为:统计、推断、验证。统计就是统计学原理;推断可以对应数理统计,在已有样本的基础上进行预测,类比深度学习的predict。按结构分为贝叶斯网络和马尔科夫随机场,分别对应有向图和无向图。实际应用中两者都会用到。概率图模型包含的东西很多,说的不好听叫又大又空,说的好听叫包罗万象,本质上是一个基础框架,如何用概率方法描述世界。用神棍的话说,其现实基础是量子力学。
  基于Tensorflow 的Edward是一个深度概率编程库。其支持语言为Python,目前还没有支持C++的计划,其官方定位是深度概率模型的快速原型实现。Edward涉足三个领域:贝叶斯方法、概率编程、深度学习(感觉前两个可以归为一类)。其支持四类模型:

  • 有向图
  • 神经网络
  • 生成模型(生成对抗网络)
  • 贝叶斯/概率编程

Edward支持如下统计推断:

  • 变分推断系列方法
  • 蒙特卡洛系列方法
  • 其他推断方法

      由于带有Tensorflow血统,Edward可以利用CPU/GPU/分布式集群等计算资源,和其他机器学习库一样有自动微分、学习功能。
    可以看出,Edward偏重于概率图模型中的贝叶斯网络,马尔科夫随机场系列并不怎么涉及。对于随机场,一般可以通过Tensorflow的深度学习部分来进行建模和求解。

    1. Dustin Tran, Alp Kucukelbir, Adji B. Dieng, Maja Rudolph, Dawen Liang, and David M. Blei. 2016. Edward: A library for probabilistic modeling, inference, and criticism.