動的ネットワーク構築と静的ネットワーク構築
静的ネットワーク構築
まず「静的ネットワーク構築」が基本になります。
これはニューラルネットワークの構造を先に決めて、その後にデータを流して計算を行います。俗に言う「Define and Run」というやつで、非常に分かりやすい方法です。
動的ネットワーク構築
「動的ネットワーク構築」は、データを流すと同時にニューラルネットワークの構造を決めていきます。データが流れる毎にニューラルネットワークの構造が変わっても構いません。俗に言う「Define by Run」によって実現されています。
(参考)
ChainerのDefine by Runとは? - "機械学習","信号解析","ディープラーニング"の勉強
動的なTensorFlowが登場
動的なネットワーク構築を行うライブラリ
「Chainer」はずっと紹介してきています。
ここ日本ではTensorFlowに対する対抗馬だと(勝手に)思っています。
他にも「dynet」と呼ばれるライブラリも登場しています。
更に何やらPyTorchと言うのも出ているらしい(しかも結構注目されている?)。
(公式)
個人的には「Define by Run」を提唱し、日本発である「Chainer」で良いでしょと思うところですが、いろいろなところからフレームワークが出てきています。
(OSSが広く受け入れられた場合には、その後、クラウドコンピューティングなどにつなげてビジネス化を有意に進められますし、この分野で日本が成功してほしい。)
TensorFlow Foldの登場
Chainerも見ながら、Google産ということでTensorFlowは常にチェック対象にしていました。動的にネットワークを構築できない点が、(今は関係ないけど)いつかネックになるかもしれないと思っていたのですが、これを解決するライブラリが既に登場していました。
どれがいいのか
正直わかりません。使いやすいのを使えばいいでしょう。
正直「Chainer」が勝つならばそれが一番嬉しいですが、Googleが引き下がるわけが無いですよね(まず資金が違う。後出しでも、同性能の物を出してくるんではないかと思ってしまう)。
「PyTorch」も注目されているようです。
正直ノーマークでした。かなりコードはChainerに似ているようです。
しかしそれなら尚更Chainerでいいじゃないですか…。
バックエンドでのテンソルの演算がNumPy(CuPy)かTorchかの違いという事になるのでしょうか。Torchが非常に高速なテンソル演算を可能にしているということなのでしょうか。詳しくは知らない。
正直、どれもコードを書くという面においては似通って来るとは感じます。あとは演算がどのように行われるのか、GPUを上手く活用できるのかが問われてくるでしょう。
TensorFlowはTPUという新たな演算ハードまで作ってしまって、完全に独自(独占)路線という印象ですが今後の行方はどうなるのだろうか。