【シリコンバレー現地レポート 番外編】- TensorFlow Dev Summit 2018 -

Googleが主催する「TensorFlow Dev Summit 2018」@カリフォルニア州マウンテンビューに参加してきました。 本ブログでは、当日の様子についてレポートをご紹介します!

こんにちは。アナリティクスサービス本部の太田です。

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で公開 されています。それぞれのセッションがとても面白いので、ぜひご覧ください。

また、日本各地で振り返りイベントもありますので、地方のかたもぜひご参加ください!

●deeplearn.js

まずはじめに紹介したいのが、「TensorFlow.js」です。TensorFlow.jsはウェブブラウザ上で動作する深層学習ライブラリですが、このセッションで発表されるまでは deeplearn.js と呼ばれていたため、セッションタイトルも deeplearn.js となっています。

TensorFlow.js を使うと、ブラウザ上で深層学習モデルの構築・学習・推論を行うことができます。では、なぜ深層学習をあえてブラウザ上で行う必要があるのでしょうか?セッションでは、以下の4点が挙げられていました。

  1. 環境構築が不要である
    • 対応しているブラウザさえインストールされていればOKです
  2. インタラクティブな表現ができる
    • JavaScriptのお家芸ですね
  3. センサーが簡単に利用できる
    • カメラや加速度センサーなど、iPhoneやAndroidにあるセンサーに簡単にアクセスすることができます。
  4. データがサーバーに渡ることがない
    • セキュリティ上の懸念が少なくなります。

「1. 環境構築が不要である」と「2. インタラクティブな表現ができる」という利点から、デモなどに向いていそうです。実際、セッションでも2つの面白いデモを見せてくれました。

Emoji Scavenger Hunt (絵文字を使った借り物競争) EMOJI SCAVENGER HUNT

Webcom Controller (Pac-Man をジェスチャーでコントロール) WEBCOM CONTROLLER

少し細かい話をすると、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を指定するだけです。

TensorFlow Hub のサンプル

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のコードとの対応、計算の途中経過を追っていくことなどが、簡単にできるようになっています。


TensorBoard Debugger plugin

●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といったイベントに参加しました。一日一日が大変濃く、毎日ブログをアップするのもなかなか大変でしたが、現地の熱気のいち部分でも皆さんに共有できていたら幸いです。



ブレインパッドは、イベントへの参加や最先端の情報収集など、さまざまな取り組みを積極的に実施しています。実際のビジネスで自分の知識・技術を活用してみたいという方、ぜひエントリーください!

www.brainpad.co.jp