RStan から Edward (Python) への乗り換え検討
お試しで linux mint 18.3 に Jupyter lab で Edward の動作確認が取れたのでインストール備忘録として手順を残します。 Ubuntu でも同様の方法で可能なはず。
R は数式処理が簡潔に書けて好きなのですが、GPU の対応などは Python と比べると弱いです。 Stan も確率モデルを簡潔に記述して推定までできてしまうのが素敵なのですが、離散数の取り扱いが弱かったりプログラミング言語として見たときに融通が利きません。 また現状ではGPU対応していないのも残念。
Blei lab が作成した Edward*1 が良さげなので使いたいと思ったのですが Python 向けです。 観念して久々に使おうかと思いますが、tesorflow が必須だったり、virtualenv 推奨と意外に大変でした。
追記:Windows で virtualenv 抜きで Jupyter Lab, TensorFlow & Edward の環境構築もしましたが問題なく使えています。
install Juypter lab
インストールついでに起動確認。
$ sudo -H pip intall jupyterlab
$ jupyter lab
起動確認がとれたら、適当に終了させる。
install virtualenv, tensorflow & edward
基本的にTensorFlow の公式マニュアル *2 と同じです。
$ sudo -H pip intall virtualenv
tensorflow 用の環境を構築。ここでは tf_test
という名前にした。
$ virtualenv --system-site-package -p python3 tf_test
仮想環境 tf_test に移り、tensorflow をインストール。今回はGPUを使わない。
$ source tf_test/activate tf_test # bash $ pip intall tensorflow
更に edward とその example にある plot の表示にあわせ matplotlib をインストール
(tf_test)$ pip install edward (tf_test)$ pip install matplotlib
jupyter に tensorflow 対応カーネルを登録
python -m ipykernel install --user --name tf_test --display-name "TensorFlow test"
Jupyter Lab にて Edward の動作確認
"TensorFlow test" note を選択し起動。 こちらの example*3 をコピペしてみましたが、特に問題は起きないようでした。
うれしい誤算として TensorFlow は CPU 版でもしっかり並列動作をしてくれるので思っていたより早かったです。 確率的PCAの example *4の数値を変えてみましたが、Stanより速度が出るのは有難いです。 プロセスが並列化できるので比較はフェアではないですが実用上は助かります。
Jupyter lab は IDE という位置付けなので左ペインがファイルエクスプローラになっていたり、note 内の cell が drug & drop で移動できたりと notebook と違いがありまが、 今までのユーザーが操作に戸惑うことはないと思います。 IDEという位置付けですが debugger は2018年03月07日現在実装されていないようです *5。 Vimmer 向けの情報として vim-keybinding への対応は現状完全でない模様*6。github issue では活発な議論されているようなので近いうちにリリースされるかもしれません。
Edward が graph と確率モデルとを変換できるというのはエンジニアには当たり前なのかもしれませんが、 私にはちょっと新鮮でした。plate notation より式の方が馴染みがあるので二者を別物だという先入観から来ていると思います。 両方ともモデルの異なった表現手法と考えれば、ごく自然で互いに翻訳できますね。
既に Edward の日本語チュートリアルを作られ始めています。スゴイ
*2:Installing TensorFlow on Ubuntu | TensorFlow
*3:重回帰の例: Jupyter Notebook Viewer
*4:確率的PCAの例: Jupyter Notebook Viewer
*5:関連しそうな github repository & issue github.com github.com