前置き~今回のハッカソンを行うに至った経緯
PyData.Tokyoは昨年秋に開始し、第1回のテーマとして深層学習を取り扱いました。それから1年がたちましたが、まさにこの一年間ずっと、深層学習に関してはニュースに事欠かず、目覚ましく変化の大きい一年でした。さまざまな研究結果が発表され、大手企業がAI研究所の設立を急ぎ、またエンジニアおよび研究者向けにはさまざまなフレームワークが開発されました。実は1年前のPyData.Tokyoでは東京大学の中山先生に、PyLearn2という深層学習フレームワークのお話をしていただきました。その時点では大変アクティブなコードベースがあったわけですが、つい先日PyLearn2が事実上の終了宣言をしたことが話題になっていました。
また、ImageNetでの驚異的な結果などで一斉を風靡し、Model Zooで学習済みモデルのライブラリーを構築したCaffeも、最近勢いを失っているようで、早くも深層学習フレームワークは激しい淘汰の時代を迎えています。日本からもPreferred Networksが中心になって開発されているChainerが6月に発表され、その使いやすさが定評を博しているようです。
そして年の瀬に現れたのがGoogleのTensorFlowです。すでに各所でニュースになっているためご存じの方も多いと思います。Googleが公開したことのインパクトもあって、他のフレームワークについては聞いたことがない方の耳にも広く知れ渡ったようです。PyData.Tokyo周辺でもTensorFlowの注目度は非常に高く、今回急きょハッカソンイベント企画し、参加者・主催者ともどもハンズオンで勉強する会を開催しました。
今回のイベントには深層学習を以前から追いかけていたコアな方から、興味はあるけどまだ何なのかよく分からないという初心者まで、かなり幅広い参加者が集まりました。そのような幅広いオーディエンスが今後の深層学習・機械学習技術まわりの発展にどのように関わっていくのか、本イベントではそういったことを考える大変良い機会になったので、ここで共有したいと思います。
TensorFlowとはなに?
そもそも深層学習とは何か、という方も大変多いと思いますが、今回のイベントではそういった基礎知識も含め、自身を「深層学習ウォッチャー」と称するバクフー株式会社の柏野さんにTensorFlowのご紹介をいただきました:
深層学習は、インプット(データ)とアウトプット(予測結果)の間に複数の層を持った機械学習アルゴリズムで、数理的な表現などで見ると(図)少し難しそうではありますが、シンプルなパーツを多層構造にすることで学習を可能にするという、人間の脳の構造に着想を得たタイプのアルゴリズムです。実際には人間の脳の構造とは多くの点で違っているそうですが、「神経回路」と呼ばれます。
各層では入力データ(テンソルという多次元で均一なデータ構造)を与えられたルールによって変換し、次の層に引き渡します。こうすることで導き出される予測結果の精度を上げるために各層のパラメーターを調整していく学習プロセスが近年の研究で飛躍的に効率化され、またGPUなどのハードウェア面での発展も相まって、その予測精度がほかの種類のアルゴリズムを大きく凌駕しています。これがここのところの「人工知能ブーム」の発端でもあったわけですが、特に大きな成果が出ているのは画像認識の世界です。
例えばGoogleが昨年発表した、画像に何が写っているのかを文章化するアルゴリズムなども深層学習の成果の一つです。数値計算や自然言語処理などでも応用に向けた研究が進んでいますが、画像分野ほどの成果にはつながっていないようです。
TensorFlowは、そのような深層学習を使ったデータモデリングをするためのライブラリです。Googleでは2年ほど前から開発が進められてきたようで、コア部分はC++で開発されており、ユーザー向けにはPythonのインターフェースが用意されています。その利用目的は多岐におよび、いまだ新しい応用分野がどんどん広がっています。
柏野さんの紹介したTensorFlowのチュートリアルでは、このような例を実際にコード付きで紹介しています:
- MNIST:手書きの数字を読み込み判別する
- CNN:見せられた画像に何が写っているのか認識する
- Word2Vec:文章を読み込み、各単語の関係を学習する
- RNN:半分書かれた文章を見て、次にどの単語が来るか当てる
- Seq2Seq Model:フランス語を英語に翻訳する
このようにいろいろな種類の深層学習ネットワークを構築し、さまざまな用途に応用するための基本的なツールがTensorFlowです。