SRA 産業第1事業部 鈴木真吾
https://slides.com/giantneco/googleio2019-11
Google I/O 2019 について
機械学習関連のトピック
その他
発表者について
Google I/O とは
Google I/O の内容
Google I/O に参加しよう
鈴木真吾(@giantneco)
所属: 産業第1事業部
言語: Go, C, Scala, etc
Google I/O
Google I/O 2016 に続いて 2 回目の参加
Google 開催の年次開発者向けイベント
毎年 5 月頃に開催
マウンテンビューの Google 本社近くで開催
メインは Android, Web など
アプリ開発者向け
TensorFlow だけ聞きたい人は
TensorFlow Dev Summit の方がいいかも
Pixel 3a
Google Nest Hub
参加する場合は前後も余裕を持っていくのがオススメ
etc...
TensorFlow Optimizers を拡張した確率的最適化
etc
強化学習用の TensorFlow ライブラリ
TPU で作ったスパコン
AutoML Vision Edge
Firebase 上で画像認識のモデル作成
ML Kit で利用可能に
ベータ1 が 2019/06 にリリース
tf.keras as the recommended high-level api
= Define by Run
強化学習、RNN、自然言語処理などに有利
従来の Defined and Run (graph 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())
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 = 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
非中央集権型データを扱う Map Reduce
データセンター内の Map Reduce に比べて:
?℃
31℃
28℃
26℃
34℃
?℃
31℃
28℃
26℃
34℃
> 30℃?
?℃
31℃
28℃
26℃
34℃
> 30℃?
1
0
1
31℃
利点:
TensorFlow Federated API:
TensorFlow Federated Core:
+シミュレーション用の API
ここでの「fairness」はジェンダー、アイデンティティetc
データ自体が偏りを持つ恐れがある
教訓:
観測したデータは、違う文脈では意図していない意味を持っているかもしれない
教訓:
早めにテスト・頻繁にテストする
複数のメトリクスを用意
プロダクトが持つべき制約を意識してモデリングする
プロダクトのデザインによって公平性を損ねる場合がある
対策:
文脈次第で意味が変わる場合がある
多様な背景を持ったユーザからフィードバックを受ける
多様なユーザに合わせた体験を提供する
TensorFlow-base の汎用かつスケーラブルな
機械学習プラットフォーム
引用:TFX: A TensorFlow-Based Production-Scale Machine Learning Platform
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())