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
- ハイパーパラメータチューニングのライブラリ
- 現在 pre-alpha
- TensorFlow 2.0, Python3.6
- https://gist.github.com/giantneco/e12fdba557de538598e704bcf23dae46
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
- Fairness by Data
- Fairness by Measurement and Modeling
- Fairness by Design
Fairness by Data
Fairness by Data
Fairness by Data
データ自体が偏りを持つ恐れがある
教訓:
- 母集団の多様性を反映する訓練・評価データを作成する
- ターゲットとするユーザが除外するかもしれないものを考慮する
- データが将来違った意味を持ちうる事を意識する
Fairness by Measurement and Modeling
Fairness by Measurement and Modeling
観測したデータは、違う文脈では意図していない意味を持っているかもしれない
教訓:
-
早めにテスト・頻繁にテストする
-
複数のメトリクスを用意
-
プロダクトが持つべき制約を意識してモデリングする
Fairness by Design
Fairness by Design
プロダクトのデザインによって公平性を損ねる場合がある
対策:
-
文脈次第で意味が変わる場合がある
-
多様な背景を持ったユーザからフィードバックを受ける
-
多様なユーザに合わせた体験を提供する
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 関連部分とその他部分を抜いたもの
- 727