1. 程式人生 > >【機器學習】Tensorflow:概率程式設計初步印象

【機器學習】Tensorflow:概率程式設計初步印象

  谷歌對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.