TensorFlowのコミュニティ
はじめに
こんにちは。私はChainerを応援していますが、いつでもTensorFlowの動向を伺っております。簡単なニューラルネットを書いてみて、TensorFlowを使ってみるということも継続的に続けております。
それでも普段はChainerをメインで使っていて、なんとか活性化しないかなと思っているところです。しかし、ずっと言われていることですが、TensorFlowはGoogle製で知名度が抜群ですから、自然とたくさんの参加者が集まってきます。
研究者レベルの人たち、すなわちプロの人たちもやはり参加者が多くて、TensorFlowをつかった最新の実装が多いというところです。プロの実装をすぐに試すことができるというのはやはり強みであって、私のような素人の参加者もたくさん集まってきて、どんどん規模が大きくなっています。
TensorFlowの強み
TensorFlowの強みとしては、やはりコミュニティの大きさです。
プロも素人もたくさん参加しています。
ネット上に質問と回答が溢れている
スタックオーバーフローではTensorFlowの質問は山ほどあります。Chainerの質問はあまり多くありません。つまり問題が発生した時に、その問題の解決策の見つけやすさが全然違うのです。
サードパーティーがTensorFlowを盛り上げる
TensorFlowが出てまもなくして、Kerasがラッパーとして出てきました。その後公式にGoogleがKerasを取り扱うことにしましたが、周りの食いつきが明らかに別格です。
TensorBoardなどの便利機能
ニューラルネットを簡単に記述できるのみならず、その周辺の機能も優れています。
TensorBoardはニューラルネットの計算グラフを可視化したり、パラメータやデータの可視化もサポートしています。通常ならばその部分を自力で書いて、しかもプレゼン用に綺麗に整えなければならないところを、TensorBoardならお任せくださいです。
TensorBoard: Graph Visualization | TensorFlow
宣言的プログラミング
TensorFlowは宣言的プログラミングを自然と行うように作られています(多分)。
命令形では値が「どう計算されるか(How)」
宣言型では値が「どういうものであるか(What)」を記述します。
命令形の場合データ構造とアルゴリズムを記述することになります。宣言型では定義や制約条件を記述することになります。はっきり言って、宣言型の方が読みやすいです。なぜならば、制御構造やフローが(基本的に)出てこないからです。
どうあるべきか、どういうものであるか、というのが端的に記述されます。
ニューラルネットに対する入力がどういうものであるか、計算グラフがどういうものであるかが記述されるのです。命令形の場合、どのように計算されていくのかを記述することになります。
しかし、ココが実は落とし穴だったと言いましょうか、ニューラルネットは宣言的に定義できないことがあるのです。データのフローに応じてその姿を変える場合があり、TensorFlowではそれができません(いわゆるDefine and Run)。
Chainerは命令的でありながら、非常に読みやすいコードになります。Chainerというライブラリ自体が、ユーザビリティを非常に意識され作られていることがよくわかります(贔屓目かな)。
宣言的プログラミングは基本的に推奨される型であり、少しずつプログラミングに使われてきてはいます(関数型言語が意識されるなど)。そういう意味でTensorFlowは良い型のはずではあると思われる…。
動的計算グラフ構築を後追いして、TensorFlow Flodが登場することとなりました。
なんかある意味Chainerの思想が認められた気分だ。
確率モデルを記述するedward登場
最近確率モデルを記述する「edward」というPythonライブラリが登場しました。
深層学習でもVAEやGAN、GMMなどの生成モデルの研究が進んでいますが、「edward」はなんとTensorFlowと共に使うことができ、確率的計算をedwardで、TensorFlowの中に計算グラフとして組み込めるそうな。
記述が簡単になれば、いろいろ試してみようというのも増えてくるかと思います。
深層学習の分野は、理論は後追いで、とりあえず工夫してみるというのが先行しているため、コーディング環境が整えば整うほど研究が加速するようなイメージがあります。
TensorFlowの周りにいろいろなライブラリがくっつくことで、更にTensorFlowを使った研究が加速していきそうです。
Google、TensorFlow自体も頑張る
アンドロイドOSに対応
アンドロイドがGoogleのプロダクトですから当然といえば当然かもしれません。
しかし古今はスマートフォン(小型のコンピュータ)を持ち歩くのが当たり前で、この部分での応用領域は非常に広いのではないかと思われます。
なんと言ってもスマホにはすでに文字を入力する機構も、カメラも搭載されていますから、自然言語処理も画像認識も音声認識もやり放題です。学習をスマホでするのは無理にしても、学習済みのモデルをスマホに搭載しておいて、何かしらのアプリケーションとして出すことができます。
研究のみならず実応用にも対応できるようなフレームワークを構築しているという点がTensorFlowの強みでもあるでしょう。
ラズベリーパイをサポート
ラズベリーパイは近年人気のマイコンボードです。
安価でかつ、いろいろなことに応用が可能なため、研究の実装のみならず、ビジネスの現場でも試されているのではないでしょうか。メーカーの活動をサポートするためにTensorFlowがラズベリーパイに対してライブラリを提供し始めました。
これで産業分野のユーザーもそれなりに増えていきそうな予感です。
そういえばキュウリの仕分けをする農家のAIもTensorFlow×ラズパイの組み合わせでした。
Chainerは?
もっぱら研究用という立ち位置でしょうか。
分散学習に対応し、強化学習などもライブラリとして提供していく方針です。
分散協調学習へ
GoogleはTensorFlowを多くのユーザーに使ってもらい、学習環境としてクラウドコンピューティングを提供するという形でビジネスをしています。
一方でChainerの開発をするPFNは「エッジヘビーコンピューティング」という概念を提唱しています。
クラウドコンピューティングではユーザーが強力な計算機を保持する必要がなくなります。データと処理をクラウドに渡して結果だけを受け取れば良いのです。強力なコンピュータがどこか一箇所にあれば、それを分けあって使えばいいという考え方です。
エッジヘビーコンピューティングではむしろ、センサーでデータを拾ったその場で学習を行ってしまいます。つまり、学習が至るところで行われているという状況です。そしてインターネットを介して学習結果を共有することで「分散協調学習」を行うことを目標にしています。
フィンテックで有名なブロックチェーン(ビットコインの技術)もそうですが、近年は中央処理型から分散処理型に考え方がシフトしている時期です。そういう意味ではPFNの考え方は時代の最先端を行っているように思います。(本当に応援したくなる。ICTの流れを日本で掴んで欲しいという願望)