こんにちは。アナリティクスサービス本部の太田です。
4日間に渡ってNVIDIAの技術イベント「GTC2018」の様子をブログでお伝えしてきましたが、その翌日には、Google の主催する「TensorFlow Dev Summit 2018」が開催されました。 今回は、番外編として「TensorFlow Dev Summit 2018」 の様子をレポートします。
■TensorFlow Dev Summit
TensorFlow は、Google が中心となって開発している機械学習・深層学習ライブラリのことです。2015年11月に公開されて以来、多くの研究者やエンジニアに支持されており、他の深層学習ライブラリと比較しても圧倒的なユーザー数を誇っています。TensorFlow Dev Summitは年に一回開催されるイベントで、TensorFlow に関する最新の情報を得ることができます。昨年度は TensorFlow 1.0 のリリースや、Kerasの統合などが発表されました。
今回は2回目となり、Google 本社(Googleplex)にほど近いコンピューター歴史博物館で開催されました。
会場は、休憩やご飯を食べながらデモをみる部屋とセッション会場の2部屋です。参加者も数百名程度と、GTCに比べると小さいイベントですが、実は参加登録は数千人あったそうで、非常に高倍率の抽選をくぐり抜けた人だけが参加できたようです。
1日だけの開催でしたが、コードのチューニングの話から実応用の話まで、合計20本ものセッションの情報量に圧倒されました。この記事では、その中でも特に印象に残った3つについて紹介します。なお、セッションは全てYoutubeで公開 されています。それぞれのセッションがとても面白いので、ぜひご覧ください。
また、日本各地で振り返りイベントもありますので、地方のかたもぜひご参加ください!
- 4/9 @東京 Recap of TensorFlow Dev Summit 2018(TFUG Tokyo, GDG Tokyo)
- 4/13 @信州 TensorFlow Dev Summit in Shinshu(GDG Shinshu)
- 4/14@京都(大阪) Recap of TensorFlow Dev Summit 2018(GDG Kyoto)
- 4/25 @神戸(大阪) TensorFlow Dev Summit 2018 振り返り会 with ヤフー (仮)(GDG Kobe)
●deeplearn.js
まずはじめに紹介したいのが、「TensorFlow.js」です。TensorFlow.jsはウェブブラウザ上で動作する深層学習ライブラリですが、このセッションで発表されるまでは deeplearn.js と呼ばれていたため、セッションタイトルも deeplearn.js となっています。
TensorFlow.js を使うと、ブラウザ上で深層学習モデルの構築・学習・推論を行うことができます。では、なぜ深層学習をあえてブラウザ上で行う必要があるのでしょうか?セッションでは、以下の4点が挙げられていました。
- 環境構築が不要である
- 対応しているブラウザさえインストールされていればOKです
- インタラクティブな表現ができる
- JavaScriptのお家芸ですね
- センサーが簡単に利用できる
- カメラや加速度センサーなど、iPhoneやAndroidにあるセンサーに簡単にアクセスすることができます。
- データがサーバーに渡ることがない
- セキュリティ上の懸念が少なくなります。
「1. 環境構築が不要である」と「2. インタラクティブな表現ができる」という利点から、デモなどに向いていそうです。実際、セッションでも2つの面白いデモを見せてくれました。
Emoji Scavenger Hunt (絵文字を使った借り物競争)
Webcom Controller (Pac-Man をジェスチャーでコントロール)
少し細かい話をすると、TensorFlow.js では、WebGLと呼ばれる技術を用いてGPUを利用することで処理の高速化を図っています。 deeplearn.jsの頃は、モデルを構築して学習させるには、ある程度のWebGLの知識が必要でした。今回の発表でTensorFlow.jsとなったことで、2つのAPIが整備され、より簡単にモデルを構築できるようになっています。
1つめは、 Ops API と呼ばれるもので、これは、あたかも生のTensorFlow を用いているようなイメージです。下のコードは Ops API で書かれたものですが、TensorFlow にとても似ていることがわかると思います。
import * as tf from '@tensorflow/tfjs'; const a = tf.tensor(0.1).variable(); const b = tf.tensor(0.1).variable(); const c = tf.tensor(0.1).variable(); # a*x^2 + b*x + c const f = x => a.mul(x.square()).add(b.mul(x)).add(c)
2つめは、 Layers API です。こちらは、Kerasに対応していると考えてもらうとわかりやすいかと思います。
import * as tf from '@tensorflow/tfjs'; const model = tf.sequential({ layers: [ tf.layers.lstm({units: hiddenSize, inputShape: [maxLen, vocabSize]}), tf.layers.repeatVector({n: digits + 1}), tf.layers.lstm({units: hiddenSize, returnSequences: true}), tf.layers.timeDistributed(tf.layers.dense({units: vocabSize})), tf.layers.activation({activation: 'sotmax'}) ]});
TensorFlow.js は、ブラウザ内で学習・推論するだけでなく、TensorFlow のSavedModelやKeras Modelを読み込むことができるのも特徴です。これにより、モデルの構築はこれまで通りPythonを使い、推論だけはブラウザで、といった使い方ができるようになります。
●TensorFlow Hub
TensorFlow Hub は、モデルの共有を促進するためのライブラリです。以下の絵が、TensorFlow Hub を端的に表しています。
TensorFlow Hub (公開動画キャプチャ)
機械学習に必要なもの一式をすべてまとめた「モジュール」を共有できる仕組みになっています。共有されたモジュールを使うには、下にあるように、コンストラクタにURLを指定するだけです。
import tensorflow as tf import tensorflow_hub as hub with tf.Graph().as_default(): embed = hub.Module("https://tfhub.dev/google/nnlm-en-dim128-with-normalization/1") embeddings = embed(["A long sentence.", "single-word", "http://example.com"]) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) sess.run(tf.tables_initializer()) print(sess.run(embeddings))
画像分類やテキスト分類、画像生成など、既に色々な学習済モデルが共有されており、すぐに使い始めることができます。
●Debugging TensorFlow with TensorBoard plugins
ほかにも、TensorFlow のデバッガー、tfdbg のGUIインターフェイス(TensorBoardのプラグイン)の紹介もありました。 機械学習や深層学習は、出力が必ずしも決定的ではないため、どうしてもバグに気づきにくくなります。そのため、デバッガーが重要になりますが、今まではコマンドベースのtfdbgしかなく、使いやすいものではありませんでした。
今回紹介されたGUIインターフェイスでは、グラフィカルな操作でテンソルの値の時系列変化、Pythonのコードとの対応、計算の途中経過を追っていくことなどが、簡単にできるようになっています。
●TFiwS Compiler
TFiwS、逆から読むとSwiftです。AppleでSwiftの開発を手がけていた Chris Lattnerが昨年の夏頃に Google Brain に参画していたのですが、 Swift for TensorFlow の開発をしていたようです。セッションでは、実際にSwiftで、とても簡単に、TensorFlow を操作する様子のデモがあり、印象的でした。
●Eager Execution
最近導入された Eager Execution を使うと、「グラフを定義してから最後に実行する」Define and Run スタイルではなく、「グラフを定義しながら実行する」Define by Run で TensorFlow を利用することができます。 Chainer や PyTorch を始めとする最近のライブラリは、Define By Run を採用していることも多く、一種の流行りになっている気がしますが、Eager Execution の登場によって、TensorFlow でも Define By Run が可能になりました。
■まとめ
その他にも、面白いセッションがたくさんありました。また、全体を通して、昨年度統合が発表されたKerasがTensorFlow の内部にちゃんと入り込んでいるな、という印象を受けました。数年前からKerasを使っているブレインパッドとしては、ちょっとホッとした印象です。また、昨年度と比べて、セッションの内容がより具体的になっていて、この一年の進歩を感じ取れたのも良かったです。
今回の出張では、約一週間に渡ってシリコンバレーに滞在し、GTCやTensorFlow Dev Summitといったイベントに参加しました。一日一日が大変濃く、毎日ブログをアップするのもなかなか大変でしたが、現地の熱気のいち部分でも皆さんに共有できていたら幸いです。
ブレインパッドは、イベントへの参加や最先端の情報収集など、さまざまな取り組みを積極的に実施しています。実際のビジネスで自分の知識・技術を活用してみたいという方、ぜひエントリーください!