HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

PyTorchの周辺ライブラリ

 

 

follow us in feedly

PyTorch

pytorch.org

いわずとしれたディープラーニングフレームワークです。最近、国産のフレームワークであるChainerの開発元であるPFNが、PyTorchへの移行を示したこともあり、一層認知度が高まったように思います。すでに研究分野ではTensorFlowよりも高いシェアを誇っている状態であり、今後、プロダクション方向にも整備が行くようで更に注目しておくべきでしょう。

ディープラーニングフレームワークと言いつつ、多次元配列の計算を自在に行うことが可能な自動微分ライブラリとして活用することも可能であり(その点はTensorFlowも同様だが)、PyTorchをバックエンドとした色々なライブラリができていたりします。TensorFlowに比べ、そのような使われ方がなされる大きな要因は、PyTorchがResearcher first、Python firstな構成を取っているからでしょう。素早くプロトタイプを作成でき、Pythonの書き方を崩すことなくコーディングできるため、プログラミング言語それ自体に深く精通することなく、実施したい計算を研究者が柔軟にコードに落とし込めます。

TorchScriptを利用すれば、これをグラフとしてコンパイルし、C++へ変換、あるいはTVMやTRTを通してハードウェアでのアクセラレーションの恩恵を受けることも可能です。また、C++での記述をサポートするLibTorchもあり、ほとんどPyTorchと同じようなデザインC++のコードを直接書くこともできます。

確率的プログラミング

GPyTorch

gpytorch.ai

PyTorchをバックエンドとしたGaussian Processのライブラリです。標準的なGPからSparse GP、Variational GP、MultiTask GPなどの応用モデルも簡単に扱うことができます。当然PyTorchのコードとシームレスに繋げることで、カーネルへの入力をニューラルネットワークで構成するDeep Kernel Learningや、GP自体を多層化するDeep Gaussian Processなども利用できます。

また後述するPyroと連携することで、Pyroが提供する変分推論、MCMCを利用することも可能です。加えて、GPyTorchの優れた機能は、後述するベイズ最適化ライブラリBoTorchのバックエンドとして活用されています。

www.hellocybernetics.tech

Pyro

pyro.ai

PyTorchをバックエンドとした確率的プログラミングライブラリです。階層モデルの記述を容易にし、強力な変分推論のフレームワークを提供します。深層学習のベイズ化も容易です。またHMCとNUTSを利用したMCMCも利用可能なため、ベイズモデリングでの統計分析も最低限のことが実施できます(ただし、この領域はTensorFlow ProbabilityやStan、PyMCの方が手厚いです)。

www.hellocybernetics.tech

www.hellocybernetics.tech

BoTorch

botorch.org

GPyTorchをバックエンドとしたベイズ最適化ライブラリです。ベイズ最適化はブラックボックス最適化、特にハイパーパラメータ探索に利用されることが多く、PyTorchの学習をラッピングすることに活用できます(もちろん、その他の最適化問題にも別途利用可能です)。BoTorchは後述する学習管理ライブラリAxの低レベルAPIとして利用することが可能です。

Ax

ax.dev

Adaptive Experimetation Platformと題された実験支援プラットフォームです。 最も単純な利用形態は、ニューラルネットワークのハイパーパラメータ探索になるでしょう。BoTorchをバックエンドとしたハイパーパラメータ探索戦略を非常に簡単に実行できます。可視化などのライブラリも同梱されており、PFNのOptunaのように、とりあえずブラックボックス最適化に使ってみるということが手軽に出来ます。

Training Wrapper

pytorch lightning

github.com

PyTorchが研究用途に力を入れている、という点に関して最も適した形のTraining Wrapperだと思われます。 Training時のニューラルネットワークの振る舞いも、Validation時のニューラルネットワークの振る舞いも基本的に自前で書かなければなりませんが、ニューラルネットワークを研究で扱うような場合にはこの辺りは頻繁に書き換えるところであるので、Wrapされていないことが返って柔軟性に繋がっているようです。

単に既によく知られているネットワークを学習させてみたいとか、Fine tuniningやTransffer learningに使いたいという場合には、少々書かなければならないコードが多めかもしれません。

ignite

github.com

PyTorch公式のtraining wrapperです。 私自信は一切触ったことがありませんが、どうやらChainerからの移行者から見ると、ChainerのTrainerチックなのはこれだそうです。ChainerとPyTorch、Wrapperまでそこそこ似てたんですね。

Catalyst

github.com

比較的コードの行数は少なくなる高レベルなWrapperです。下記のSkorchの高レベルが好みだった場合は、こちらに乗り換えるのが一番しっくりくるかもしれません。

skorch

github.com

scikit learnのようなAPIを提供しているPyTorchのWrapperです。手軽にサクッと回すのはこれが一番適しているように見えます。scikit learnのPipelineとも繋げられるというスグレモノ。と言っても、PyTorch自体もTorchVisionにそれなりの前処理機能が実装されているので、やはりサクッと使うとき専用かもしれません。

Computer Vision

kaolin

github.com

GPU、高解像度ゲームなどグラフィックを牽引しているNVidiaが提供する3D deep learningライブラリです。

pytorch3d

github.com

つい最近、FaceBookも3D系のライブラリを発表しました。

kornia

github.com

PyTorchをベースにした自動微分CVライブラリです。雰囲気としてはOpenCVで提供されているような画像処理計算が微分可能な状態で使えるという具合でしょうか。地味に便利な気がします。