Link: Why AI and machine learning researchers are beginning to embrace PyTorch
via Why AI and machine learning researchers are beginning to embrace PyTorch - O'Reilly Media
Facebook, research は PyTorch で production は Caffe2 なのか。そしてむかし TF 登場以前 Torch に入門しようとした時はドキュメントがさっぱりわけわからなかったけれど、PyTorch は充実してるね。ぱっとチュートリアルをながめたかんじ悪くなさそう。TF のグラフ定義言語と実行環境がまざって混乱する感じがない。これが imperative style API の良さというやつか。
Immediate mode の gradient はどう計算するかというと、tape based automatic differentiation というテクニックを使うらしい。具体的には gradient に参加させたい変数をオブジェクトでラップし、関数の側にもそのオブジェクトを識別するラッパーを用意し、オブジェクトに適用された関数というか計算を全部覚えておく("tape")。で、その記録された計算を逆にたどって微分する。計算を記録したあとは TF とかと同じということだろう。
PyTorch が引用しているもとねたの一つは Autograd という Python のライブラリ。これは numpy ベースで書かれた関数を自動微分できるという。これを Twitter が Torch (Lua) に移植し、それを更に PyTorch が取り込んだという紆余曲折。Autograd ライブラリもオリジナルというわけではない。この解説記事からリンクされた autodiff.org の参考文献をみると歴史あるジャンルであることが伺える。科学者えらい。
などと NN framework の dynamic と static の違いがわかってよかった。ついでに TF が numpy 互換っぽい API になっているのも自動微分の流儀なのだと理解した。
追記。PyTorch 0.2 のリリースノートを見てみる。
二階微分ができる。しかも近似ではないっぽい。つまり ops が自分の二階微分を提供しないといけない。まじか。大変じゃね?しかしおかげでむずかしい GAN が実装できるらしい。
分散トレーニング。どうもスクリプトを書くノードに送りつけて実行するスタイル(MPI 系)ぽい。まじか・・・。
TensorFlow とは違う進化の仕方をしているなあ。遠目に見つつ、そのうち気が向いたら試してみよう。