ディープラーニングフレームワーク開発競争に見る、ライブラリ国際競争の本質
数ヶ月前、chainerがガラパゴスである、という文言をインターネットで見たchainer信者である私は衝撃だった。
だってchainerは公式ドキュメント全部英語じゃん!
githubで全世界に公開してるじゃん!
コードレビューだって英語でやってるじゃん!
英語のgoogle group作って質問答えてるじゃん!
だが、言わんとするところもわからないわけではない。
例えば、githubのコントリビュータを見るとアクティブな開発者はほとんど日本人だ。
Contributors to chainer/chainer · GitHub
雑に言えば日本人が開発して、日本人が使って、日本人が質問して、日本人が答えているのである。
chainerを使って研究している海外のグループもあるし、例外はあるが、例えばtensorflowやMXNet、Pytorchと比べると少ない。(最近は徐々に増えてるけど。)
米国でなぜchainerがあまり使われていないのか、アメリカに赴任していたエンジニアに聞いたところ、結局英語の技術メモが少ないからということだった。chainerの公式ドキュメントはすべて英語なのに、だ。
githubでもこういうイシューが立っている。
ライブラリがグローバルになるということは公式ドキュメントが英語になるということだけではないのかもしれない。
むしろ、それは単なるスタートでしかない。
公式ドキュメントだけを読んで自分のやりたいことができるのは、ある程度(その分野についての)技術力を持ってるハッカーだったり、並々ならぬ好奇心を持っているイノベーターであっても、アーリーアダプターではない。
裾野の層が育つことが重要だ。chainerのdefine by runがなんとかとか、tensorflowのTensor Processing Unitがどうとか、そういった細かい部分での技術的な優位性はほとんどの彼らには大きな意味はない。
それよりもサポートコミュニティが強固であることが必要だ。
英語の技術メモが初級~上級レベルまで投稿され、英語版のstackoverflowで質問が沢山飛んで即答され、深層学習プログラミングに慣れていないエンジニアがググってコピペしてちょこ変するだけである程度自分がやりたいことが出来る状況になり、
その中で、やがて未来のコントリビューターや自発的エヴァンジェリスト、ヘビーユーザーが表れ、ネットワーク効果を強固なものになる。
そこまできてはじめて真にグローバルなライブラリと言えるのかもしれない。
ライブラリをグローバルにするためにユーザーができることはあるのか?
英語版のstackoverflowで質問する。答えられる質問があれば答える。
技術メモを英語で書く。つらい。
そこまでする意味あるのだろうか?
ないかもね。
でも、自分が使っているライブラリや言語が、流行っていれば流行っているほど恩恵はある。
リファレンスとなる実装があれば、似たようなことをやりたいときに素早くできる。
求人も増える。
例えば国内のクラウドソーシングサービスでさえ、crowdworksの案件見ても、tensorflowを指定している深層学習案件はあってもchainerのものはない。自分が使うライブラリがシェア競争でトップじゃないということはそういうことだ。
もちろん乗り換えてもいい。
日本人はガラパゴス体質なのか?
そうかもしれないし、そうじゃないかもしれない。
ただね、
ドキュメントの問題だけではなくて、日本語サポートコミュニティがないと日本人はそのソフトを使わない。
— Denny Britz (@dennybritz) 2016年12月24日
これは英語圏の人だってそうです。
英語圏の人間が英語のコミュニティしかないツール使ってもガラパゴスと言われないけど、
日本人が日本語のコミュニティしかないツール使うとガラパゴスというレッテルを貼られかねない。
その非対称性はある。差別じゃないかとも思う。しかし嘆いてもしょうがない。
大切なのは状況を正しく認識した上で自分がなにをすべきかだ。
日本人は海外の発明を無視しているのか?
西洋で新しい物が発明されると、最初日本はそれを無視する。数ヶ月後、made in japanのクローンの出現や、既存の日本製品が西洋の発明を真似し始める: ニコ動、mixi。でも結局その日本製クローンのUXが酷すぎて、西洋のオリジナルが日本でも普及する: YouTube, FB
— François Chollet (@fchollet) 2017年5月15日
家電製品ならともかく(とはいえ最近は家電も国産ブランドの価値はなくなりつつあるが)、webサービスを使うに当たって、made in japanかそうでないかを区別して使っている人はほとんどいない。ニコ動やmixiが初期において、派生元よりも日本で普及したのは、マーケティングや独自機能によって日本人の心を掴んだからだ。
日本人はパクリ民族なのか?
パクリは日本人だけじゃなくて欧米人もやってる。
特にオープンソースはオープンにしている以上、パクりパクられの世界である。
(chainerのUXが素晴らしいことの証左でもあるが、)Pytorchなんか、ぱっと見APIほとんどchainerだと思う。
Pytorchでは今でもdepthwise convolutionもchainerからパクろうというディスカッションもやってたりする。
feature request: depthwise separable convolution · Issue #1708 · pytorch/pytorch · GitHub
金払え!ご利用ありがとうございます。
さらにいうとeinsumはtensorflowからパクってる([Needs someone to complete] torch.einsum() by vlasenkov · Pull Request #2008 · pytorch/pytorch · GitHub)
基本的には、オープンソースソフトウェアが影響しあうということはポジティブな現象だと思う(いや、本当に)。
もし、パクられたくないなら、オープンソースはやめるべきだ。
もちろんライセンス違反や、特許違反はダメだ。単なる既存ライブラリの下位互換も堂々とやるものじゃない。
でもそうじゃない範囲において、パクることは個人にとってもライブラリにとっても大事な成長エンジンだ。パクれるものはパクろう。
日本人はいつも後発なのか?
そうかもしれない。破壊的イノベーションが苦手だと思う。
でもそれだけがライブラリ開発競争の本質ではない。
大体、世界で一番流行ってるtensorflowなんてchainerよりも後発である。
(あくまで公開したタイミング、において)
APIがほぼchainerの後発のPytorchもいまやchainerよりもgithubのstarもcontributerもchainerの倍稼いでいる。英語圏の人が日本人の先行発明を無視している、という言い方もできる。
chainerはガラパゴスか?
ガラパゴスという言葉を正しく定義しないとこれを論じることは出来ないが、私としては(今のところは)NOというのが答えだ。
wikipedia(ガラパゴス化 - Wikipedia)にはガラパゴス化には独自仕様になるとか、世界標準から離れるとか、そういう意味があるが、chainerのデザインは他のディープラーニングライブラリにも影響を与えている。
独自進化をしながら外界には一切の影響を与えなかった、ガラパゴス諸島の生物たちとは違う。
ディープラーニングフレームワーク選びに迷ってる貴方へ
流行ってる奴使いましょう。
ハッカーや研究者はchainer使うのをおすすめします。
中は本当によくできてる。コードは隅から隅まで綺麗だ(MXNetは結構汚いとこあるし、tensorflowもあれ?と思うコードは散見する)。非常に勉強になる。ハックしやすい。ほぼPythonだからIDEでデバッグしやすい。
小回りが効くから新しい手法を試すにはいい。
バックエンドのcupyもAPIが増えてnumpy同然で使えるようになってきた。
勉強になる。癒される。
余談
(完全に大きなお世話なんだけど、)chainer以上に気になっているのがcupy。
cupyはchainer以上のポテンシャルを持っている割に、獲得スターが少なすぎる。
scipyとかpandasとかsklearnとかskimageとかに使われているありとあらゆる行列計算のパフォーマンスを一変させる可能性がある。
それらのライブラリに埋め込まれているimport numpy as npをimport cupy as npに置換して公開したらいい。(言いすぎ?)