オーストラリアで勉強してきたMLデザイナーの口語自由詩

主に、データ分析・機械学習・ベイズ・統計について自由に書く。

なぜPyMC4のバックエンドにTensorFlowが採用されたのか?

f:id:yukinagae:20180920092932p:plain

TL;DR

  • 以下記事をもとに、PyMC4のバックエンドにtensorflowが採用された経緯をまとめました。

see: Theano, TensorFlow and the Future of PyMC – PyMC Developers – Medium

ポイント

  • tensorflowには既に多くのユーザがいること(デファクトスタンダードであること)
  • 確率プログラミングに必要な確率分布や変換処理が実装されているtensorflow probability(edward2)が使えること
  • tensorflow probabilityは低レベルでフレキシブルなAPI、PyMC4は高レベルでユーザフレンドリーなAPIという棲み分けが上手くできること

PyMC4のバックエンドにtensorflowが採用された理由

PyMC3のバックエンドのTheanoが開発停止

まずは2018/05/18の以下記事でPyMC DevelopersからPyMC4のアナウンスが出されています。

see: Theano, TensorFlow and the Future of PyMC – PyMC Developers – Medium

PyMC3 is an open-source library for Bayesian statistical modeling and inference in Python, implementing gradient-based Markov chain Monte Carlo, variational inference, and other approximation methods. These algorithms currently rely on Theano for computation, specifically for providing gradients.

(PyMC4の前バージョンである)PyMC3のバックエンドは Theano に依存していたことがわかります。

Since the Theano team announced that it would cease development and maintenance of Theano within a year, we, the PyMC developers, have been actively discussing what to do about this.

しかし、Theanoのチームが年内の開発とメンテナンスをやめることをアナウンスしたため、PyMCとしては今後はTheano以外のバックエンドを採用する必要があり、そのディスカッションを行ったとのことです。

Theanoのgithubレポジトリを見ると、 MILA will stop developing Theano. と記載されています。

see: GitHub - Theano/Theano: Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. It can use GPUs and perform efficient symbolic differentiation.

また、開発・メンテナンスしていた Mila がTheanoを止めた理由が以下forumに投稿されています。

see: Forum: MILA and the future of Theano

要約すると、MILAチームは約10年程度をTheanoの開発に費やしたが現在の深層学習研究の状況が進んだことで様々なフレームワークが使用可能になったため、Theanoの役目は終わったということのようです。開発停止の告知文からは、Theanoによって様々なイノベーションを推進してきたという誇りが垣間見えます。

Tensorflow (Tensorflow Probability) を採用した理由

理由としては以下が挙げられています。

  • tensorflowには既に多くのユーザがいること(デファクトスタンダードであること)
  • 確率プログラミングに必要な確率分布や変換処理が実装されているtensorflow probability(edward2)が使えること

TFP(tensorflow probability)はフレキシブルな統計モデルを可能にしますが、低レベルのAPIしか提供しないためそこまでユーザフレンドリーではありません。その点を補完する、より使いやすい高レベルなAPIを提供するのがPyMCの役目とのことです。

なぜ他のライブラリが採用されなかったのか?

PyMC4のバックエンドに関するディスカッションの様子は以下から見ることができますが、ここでTheanoの代替として何をバックエンドに採用するかが議論されています。

see: PyMC4 - PyMC Discourse

選択肢として挙がっていたのは、主に以下でした。

  • PyTorch
  • Pyro: PyTorchをバックエンドとした確率プログラミングライブラリ(by Uber
  • TensorFlow
  • Edward: TensorFlowをバックエンドとした確率プログラミングライブラリ
  • Microsoft Cognitive Toolkit (CNTK)
  • MxNet

ディスカッション内でのやり取りを見ると、Edwardの作者であるDustinがPyMC4のオーガナイズをしているtweickiと会話しており、この後実際にミーティングで直に話したようです。

f:id:yukinagae:20180920092932p:plain

細かい詳細はわかりませんが、やはりTFPは低レベルでフレキシブルなAPIを提供し、それをラップするPyMC4は高レベルでユーザフレンドリーなAPIを提供する、という役割分担の点で考えが一致したのが大きな理由のように思えます。

参考資料