ありがとう、Chainer。頼むぜPyTorch。3ありがとう、Chainer。頼むぜPyTorch。自然言語処理MachineLearning2019/12/5、PFNからChainerの開発を停止しPyTorchの開発に貢献するというアナウンスがありました。Networks、深層学習の研究開発基盤をPyTorchに移行オフィシャルな発表が出たことは衝撃的でしたが、心の中で「いつかはこうなるんじゃないか」という思いがあったのも事実です。さびしくはありつつも、決断にはベストな時期だったのではないかと思います。2.0の公開があり、機能的にほぼ差異がなくなった2大フレームワークの決戦がいよいよ始まる・・・という雰囲気です。そんな中でのChainer開発合流のニュースは十分存在感が出る時期ですし、PyTorch陣営としてもありがたかったのではないかなと思います(積まれているIssue/PRもTensorFlowより多いですし)。本記事では、Chainerへの感謝とPyTorch合流への期待を綴りたいと思います。Chainerへの感謝Chainerが登場したのは2015年6月です。このころ、深層学習の実装は今とは比べ物にならないくらい大変でした。pylearn2を使っていましたが、そもそもインストールがすごくめんどくさかったです。Windowsでやろうなんて日には、「正気なの?」と疑われる有様でした。Windows/Python3でpylearn2を使うRNNは実装どころか情報もほとんどありませんでした。LSTMの実装が容易になり普及する前で、そもそもつかえんのかといわれているような状態でした。PyBrainという更新がほぼ停止していたライブラリで何とか実装をしていました。ニューラルネットワークで時系列データの予測を行うそんな中現れたChainerは、インストールも割りと容易で実装も容易でした。何より設計がとてもきれいで、「これだよこれ!!」と感動したのを覚えています。Chainerで始めるニューラルネットワークChainerを使った勉強会も何回か開催しました。体験ハンズオン論文を読んでいて、Salesforceがオフィシャルで採用しているようだと知りました。日本の会社が作ったフレームワークが、海外の著名機関の研究に使われていると知りかなりうれしかった思い出があります。20172015/12にはKerasが出て、Kaggleで結構使われるようになりました。その後TensorFlowも公開されました。チーム内で「Chainerか、Keras(TensorFlowバックエンド)か」という検討を行ったのですが、エースの「Kerasでいきましょう」という提言もありKerasを選択しました。正直に言えば、自分としてもGoogle相手にChainerが向こうを張り続けられるか、という点に不安がありました。初期のKeras/TensorFlowで、自然言語でよく使うRNNを実装するというのは地獄of地獄以外の何物でもありませんでした。なんどChainerに戻りたいと思ったかしれません。以下の記事を書いていたのは、ちょうどチーム全員(このころ2人だったけど)で血反吐をはいていたころです。機械学習で泣かないためのコード設計デバッガを使ってKerasのモデルをデバッグする単体テストをかけたとき、テストごとのTensorFlowグラフがコンタミしてクラッシュしたのはいい思い出です(※意識せずデフォルトグラフを使った場合の挙動で、分ければ回避は可能です)。新しく入ってきた後輩も「Chainerで書きたい」とごねる始末のなか、辛抱強くKerasをつかって本を書いたりもしてました。結局RNNの面倒さはずっと変わらなかったと思います(単純なモデルはKerasのLayerでかなり楽になったけど)。そんな中、PyTorchが登場しました。StanfordのKarpathy先生が開発に入ったようで、登場したときかなり期待したのを覚えています。PyTorch、Stanfordのkarpathy先生が開発に入ったっぽいな。2017TutorialやExampleが丁寧に作られていて、開発の「熱量」がとても感じられました。2017当時のメールマガジン。#3そしてその後、SalesforceがPyTorchに切り替えたのを知るという。2017とにかく加速度がすごかったです。KerasがTensorFlowの一部になるというニュースがありました。振り返ればこのころから新参vs大手の2大フレームワークの対決が始まったのかもしれません。それと同時にTheanoの開発が停止、pylearn2が開発停止、CaffeはCaffe2へ、と新陳代謝も起き始めます。なんだかすごい歴史を振り返っているように思いますが、ここまでの出来事が1~2年の間に起こっています。古参のフレームワーク続々が倒れる中Chainerが衰えることなく開発を続け新バージョン、さらにはChainerCVなどの派生ライブラリをリリースしてきたのはてきたのはとてもすごいことだと思います。細かいところですがChainerコントリビュートができたのは、念願かなった気がしてとてもうれしかったです。Chainerが普及しきれなかったのには、大きく心の疚しさを感じるところがあります(さっとKerasを選択してしまったというのもあり・・・)。アーティストがファンを必要とするように、オープンソースも普及にはコミュニティの力が欠かせないと感じています。したら、同じくらい大事だと思います。今後すばらしい才能による発明があっても「日本のコミュニティ」が足かせになって発展しきれないんじゃないかとか、「日本初」は「世界に通用しない」という漫然とした思い込みが成長を阻害したのでは、などもんもんと思うところはあります。そんなこともあり、最近は積極的にGitHubのStarを押すようにしています(GitHubのStar数は、たぶん思われているより相当のインパクトがあります)。個人的には、日本でももっと気軽にStarをつける文化が醸成されればなと思う。2019PyTorch合流への期待PyTorchの内部コードが、Chainerのようにきれいになるといいなと思っています。PyTorchは使うのを躊躇するレベルで中身がえぐいところがあり(これ)、この辺がなおるといいなと思っています。強力機能だと感じています。TensorBoardになるのかわかりませんが、ぜひこの資産はPyTorchでも使えたらなと思っています。chainerrl-visualizerChainerというリポジトリはアーカイブされるのかもしれませんが、各種DNNフレームワークのAPIが似たり寄ったりになる中で、移行できる資産は少なくないのではないかと思います。PyTorchの中、あるいは外側のエコシステムなど、Chainerの資産が活かされることでより安心して使えるフレームワークになることを期待しています。「PyTorch、Chainer合流のおかげてすごい良くなったよね」と評価されるようになることを願っています。創業40年超のSIerです。