Google I/O 2019

参加報告

SRA 産業第1事業部 鈴木真吾

https://slides.com/giantneco/googleio2019-11

Agenda

  • Google I/O 2019 について

  • 機械学習関連のトピック

  • その他

Google I/O 2019

Google I/O

  • 発表者について

  • Google I/O とは

  • Google I/O の内容

  • Google I/O に参加しよう 

発表者について

  • 鈴木真吾(@giantneco)

  • 所属: 産業第1事業部

  • 言語: Go, C, Scala, etc

  • Google I/O

    • Google I/O 2016 に続いて 2 回目の参加

Google I/O とは

Google 開催の年次開発者向けイベント

  • 毎年 5 月頃に開催

  • マウンテンビューの Google 本社近くで開催

  • メインは Android, Web など

    • アプリ開発者向け

 
 

TensorFlow だけ聞きたい人は

TensorFlow Dev Summit の方がいいかも

Google I/O の内容

  • キーノート
  • セッション
  • SandBox
  • Codelabs
  • Office Hour
  • After Party
  • Workshop (new!)

Google I/O 2019

  • 参加者
    • 7000+
  • セッション
    • 約180
    • 大体の内訳
      • Android 関連 60
      • Web 関連       40
      • 機械学習関連 30
      • クラウド関連 15
      • AR                     7
      • VR                     0 

キーノート

新製品

  • Pixel 3a

  • Google Nest Hub

Sandbox

  • 製品・アプリの展示
  • 開発者に説明をして貰うことができる

Codelabs

  • Google が公開している学習コンテンツ
  • Google I/O 現地で、発表された技術をすぐに試せる

After Party

参加まで

  • チケットは 2 月末ごろに抽選
  • キャンセル分繰り上げ・invitation code 配布は 4 月末
  • 大体の予算
    • チケット代 130,000
    • 飛行機代 100,000
    • 宿泊費 70,000
      • サンタクララあたりに宿泊
  • 空港
    • サンフランシスコ空港
    • サンノゼ空港 <- 今回はこちら
  • 最短だと 1 日目朝到着、3 日目夕方帰る

前後でもいろいろイベントがある

参加する場合は前後も余裕を持っていくのがオススメ

  • Google 見学
  • Intel Day 0 Party
  • Netflix Day 0 Party
  • 日本人エンジニアのミートアップ

機械学習

機械学習

  • TensorFlow
    • TensorFlow 2.0
    • TensorFlow の新しいライブラリ
  • Cloud TPU Pods
  • ML Kit
    • AutoML
  • ML fairness
  • Federated Learning
  • TensorFlowX (TFX)

TensorFlow の新しいライブラリ

  • Keras Tuner
  • TensorFlow Probability
  • TF-Ranking
  • TensorFlow graphics
  • TF Agent

etc...

Keras Tuner

TensorFlow Probability

  • 確率的推論と統計分析のライブラリ
  • 確率的ブロックの構築
    • 確率分布や統計量処理
    • 可逆な変換API
  • モデル構築
    • 確率的プログラミング言語 Edward2
    • Probabilistic Layers
    • Trainable distribution
  • モデル推論
    • マルコフ連鎖モンテカルロ法対応
    • TensorFlow Optimizers を拡張した確率的最適化

    • etc

TensorFlow Graphics

  • 3DCG 向け機械学習の API
    • 変形: 拡大・縮小
    • カメラ操作
    • マテリアル
    • 2 つの3D 畳み込み層と 1 つのプーリング層
  • TensorBoard 3D
    • デバッグ・出力確認用の UI

TensorFlow Graphics

TensorFlow Graphics

TensorFlow Graphics

TF-Agents

強化学習用の TensorFlow ライブラリ

  • TensorFlow 2.0 向け
    • 一応 TensorFlow 1.3 でも動く?
  • ポリシーベースの強化学習
  • 主流な強化学習に対応
    • DQN, DDQN, etc

Cloud TPU Pods

TPU で作ったスパコン

  • パブリックベータ
  • クラウド

Coral

  • IoT 上の AI を開発するためのフレームワーク
    • ソフト、ハードどちらも
  • TensorFlow Light をサポート

MLKit

  • AutoML Vision Edge

    • Firebase 上で画像認識のモデル作成

    • ML Kit で利用可能に

  • 新機能
    • オンデバイス翻訳

TensorFlow 2.0

TensorFlow 2.0

ベータ1 が 2019/06 にリリース

  • より python らしい書き方ができる
    • 大域変数の排除、オブジェクト指向らしい書き方
  • デフォルトで eager mode
  • tf.keras as the recommended high-level api

  • API が整理された
    • tf.contrib は deprecated 
    • 重複の削除

Eager mode

= Define by Run

  • Chainer、PyTorch などはもともとこの方針
  • 強化学習、RNN、自然言語処理などに有利

  • 従来の Defined and Run (graph mode) も併用可能

graph mode vs eager mode

import tensorflow as tf

a = tf.Variable(0, name='counter')

with tf.control_dependencies([tf.assign_add(a, 1)]):
    b = tf.case({
        tf.equal(tf.mod(a, 15), 0): lambda: tf.constant("FizzBuzz"),
        tf.equal(tf.mod(a, 3), 0): lambda: tf.constant("Fizz"),
        tf.equal(tf.mod(a, 5), 0): lambda: tf.constant("Buzz"),
        }, default=lambda: tf.as_string(a))

sess = tf.Session()
sess.run(tf.global_variables_initializer())

for i in range(100):
    print(sess.run(b).decode())

graph mode vs eager mode

import tensorflow as tf

def fizzbuzz(max_num):
  counter = tf.constant(0)
  max_num = tf.convert_to_tensor(max_num)
  for num in range(1, max_num.numpy()+1):
    num = tf.constant(num)
    if int(num % 3) == 0 and int(num % 5) == 0:
      print('FizzBuzz')
    elif int(num % 3) == 0:
      print('Fizz')
    elif int(num % 5) == 0:
      print('Buzz')
    else:
      print(num.numpy())
    counter += 1

model subtyping

これまでの書き方

model = tf.keras.models.Sqeuential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
class MyModel(tf.keras.Modle):
    def __init__(self, num_classes=10):
        super(MyModel, self).__init__(name='my_model')
        self.dense_1 = layers.Dense(32, activation='relu')
        self.dense_2 = laysers.Dense(num_classes, activation='sigmoid')

    def call(self, inputs):
        # Define your faorward pass here
        x = self.dense_1(inputs)
        return self.dense_2(x)

New

TensorFlow Federated Learning

Federated Computation

非中央集権型データを扱う Map Reduce

  • ノードはランダムに抽出
  • "Secure Aggregation"によりノードのプライバシを保つ

 

データセンター内の Map Reduce に比べて:

  • より大規模なノードを対象に可能
    • 全数検査ではないので‥
  • 通信切断などエッジデバイスが一時利用不可になった場合でも使える

Federated Computation

?℃

31℃

28℃

26℃

34℃

Federated Computation

?℃

31℃

28℃

26℃

34℃

> 30℃?

Federated Computation

?℃

31℃

28℃

26℃

34℃

> 30℃?

1

0

1

31℃

Federated Learning

  • Federated Computing を機械学習に使用
  • 分散先=エッジデバイスでは
    • サーバ提供の親モデルから転移学習
    • 学習結果は Secure Aggregation でサーバ側に反映
      • プライベートな情報は渡さない

 

利点:

  • 各エッジデバイスではパーソナライズされた学習データを利用できる
    • Gboard での絵文字サジェスチョンなど
  • プライバシなどで問題のあるデータはやりとりしない

TensorFlow Federated Learning

TensorFlow Federated API:

  • Federated Learning 用の高レベルAPI
  • 既存の TensorFLow モデルを利用可能

 

TensorFlow Federated Core:

  • Federatedアルゴリズムを作成するための低レベルAPI

 

+シミュレーション用の API

Machine Learning Fairness

Machine Learning fairness

ここでの「fairness」はジェンダー、アイデンティティetc

 

  1. Fairness by Data
  2. Fairness by Measurement and Modeling
  3. Fairness by Design

 

Fairness by Data

Fairness by Data

Fairness by Data

データ自体が偏りを持つ恐れがある

 

教訓:

  1. 母集団の多様性を反映する訓練・評価データを作成する
  2. ターゲットとするユーザが除外するかもしれないものを考慮する
  3. データが将来違った意味を持ちうる事を意識する

 

 

Fairness by Measurement and Modeling

Fairness by Measurement and Modeling

観測したデータは、違う文脈では意図していない意味を持っているかもしれない

 

教訓:

  1. 早めにテスト・頻繁にテストする

  2. 複数のメトリクスを用意

  3. プロダクトが持つべき制約を意識してモデリングする

Fairness by Design

Fairness by Design

プロダクトのデザインによって公平性を損ねる場合がある

 

対策:

  1. 文脈次第で意味が変わる場合がある

  2. 多様な背景を持ったユーザからフィードバックを受ける

  3. 多様なユーザに合わせた体験を提供する

TensorFlow Extended

TensorFlow Extended (TFX)

TensorFlow-base の汎用かつスケーラブルな

機械学習プラットフォーム

引用:TFX: A TensorFlow-Based Production-Scale Machine Learning Platform

TensorFlow Extended (TFX)

TensorFlow Extended (TFX)

TensorFlow Extended (TFX)

TensorFlow Extended (TFX)

TensorFlow Extended (TFX)

def _create_pipeline():
    examples = csv_input(...)
    example_gen = CsvExampleGen(input_base=examples)
    statistics_gen = StatisticsGen(...)
    infer_schema = SchemaGen(...)
    validate_stats = ExampleValidator(...)
    transform = Transform(...)
    trainer = Trainer(...)
    model_analyzer = Evaluator(..)
    model_validator = ModelValidator(...)
    pusher = Pusher(...)

    return pipeline.Pipeline(
        pipeline_name='simple',
        components=[
            example_gen, statistics_gen, infer_schema, validate_stats, transform,
            trainer, model_analyzer, model_validator, pusher
        ], ...
    )

airflow_pipeline = AirflowDAGRunner(_airflow_config).run(_create_pipeline())

ご清聴ありがとうございました

社内機械学習勉強会向け Google I/O 019 参加報告

By Shingo Suzuki

社内機械学習勉強会向け Google I/O 019 参加報告

社内機械学習勉強会向け Google I/O 2019 参加報告資料 元版から Android 関連部分とその他部分を抜いたもの

  • 433