a practical guide to machine learning on gcp
TRANSCRIPT
GCPではじめるかんたん機械学習
A Practical Guide to Machine Learning on GCP
GDG DevFestTokyo 2017
Hi there!
● 吉川隼人 @hayatoy● APAC向けに色々するR&D● 参加コミュニティ
○ TFUG, GCPUG, GDG● 最近
GCPと機械学習に関する本を
執筆してます。
Agenda
● 機械学習(ML)ってなんだっけ?
● GCPのML系API
● ML API ✖ GAE ✖ Firebase
● Datalab ✖ BigQuery
● GAE ✖ ML Engine (TensorFlow)
機械学習ってなんだっけ?
機械学習とは
ただの関数です
y=f(x)
f(x)x y
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
出力が未知
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
入力があったとき、未知の出力を知りたい(推論)出力が未知
関数に当てはめると・・
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
出力が未知の入力
f(x) ⭕ or ❌推論
関数に当てはめると・・
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
出力が未知の入力
f(x) ⭕ or ❌
学習
推論
機械学習は何のパラメータを変えているの?身長
体重
メタボの例
機械学習は何のパラメータを変えているの?身長
体重
メタボの例
この辺に境界線がありそう・・
既知のデータから境界線(のパラメータ)を求める
機械学習 vs ルールベースアルゴリズム
ルールベース BMI計算して、しきい値で分岐した方が早いよね。
機械学習 既知データから自動で判別式を算出
今回の例なら、ルールベースが正解。
だけど入力が2種類だから2次元でプロットできたけど、1000種類あったら?
現実のデータはそんな簡単にルールがわからない!
ニューラルネットワーク
境界線を引くのは同じ。層やニューロンの数を増やすと境界線がどんどん複雑になっていく。
過学習
精度の高い結果を得るには
● 学習するデータ数
● モデルの設計
● 演算能力
結構大変!
GCP!
GCPと機械学習
Machine Learning API学習済みモデルで誰でも簡単に高精度な結果を
得ることができる
Serverless Machine Learning自分でモデルを作るときも簡単に学習と推論ができる
環境の使い分け
Cloud Machine Learning
Cloud Vision API
Cloud Speech API
Cloud Natural Language API
Cloud Translation
API
Cloud Video Intelligence
API
学習が不要 学習が必要
モデル作成不要 モデル作成必要
ML系API サーバーレスML
サーバーレスML
Cloud Machine Learning
Cloud Vision API
Cloud Speech API
Cloud Natural Language API
Cloud Translation
API
Cloud Video Intelligence
API
学習が不要 学習が必要
モデル作成不要 モデル作成必要
ML系API
どれか1つではなく使い分け&連携するのが
クール!
GCPのML系API
Cloud Vision API
LabelDetection
LandmarkDetection OCR
LogoDetection
FaceDetection
Explicit ContentDetection
ラベル検出
ラベル検出
from google.cloud import vision
client = vision.Client()
image = client.image(filename='seagull.jpg')
labels = image.detect_labels()
Cloud Natural Language API
感情分析
感情分析
from google.cloud import language
client = language.Client()
text = u"GCPが凄すぎて感動の渦"
document = client.document_from_text(text)
sentiment = document.analyze_sentiment()
Demo
感情分析でゲーム
ルールの説明
● AチームとBチームに別れます
● それぞれポジティブっぽい文章を
投稿します
● よりポジティブな文章で埋めた
チームが勝ち!
スクリーン
Aチーム Bチーム
Had fun?https://github.com/hayatoy/nl-bubble
ML API x GAEx Firebase
Web App
デモアプリのアーキテクチャ
Front-end Web AppApp Engine
FirebaseRealtime DB
Cloud NaturalLanguage API
Front-end Web AppApp Engine
Insert rowsvia REST API
Get sentiment analysis result
入力 結果表示
GAEからFirebase DBへインサート
url = 'https://[project].firebaseio.com/bubbles.json'
payload = json.dumps({'message': message,
'team': team,
'score': score,
'time':{'.sv':'timestamp'}})
urlfetch.fetch(url=url,
method=urlfetch.POST,
payload=payload)
JavascriptでFirebase DBの変更をリッスンする
var database = firebase.database();
var bubblesRef = firebase.database().ref('bubbles');
bubblesRef.on('child_added', function(snapshot) {
// do something..
});
Firebase簡単。他システムとの連携はGAEやCloud Functionsを使うといいかも。
Datalab x BigQuery
Cloud Datalab?
● Jupyter Notebookのクラウド版
● ブラウザ上でインタラクティブに
PythonコードやBigQueryのクエリが走る
Demo
Web App
デモアプリのアーキテクチャ
Front-end Web AppApp Engine
FirebaseRealtime DB
Cloud NaturalLanguage API
Front-end Web AppApp Engine
Insert rowsvia REST API
Get sentiment analysis result
BigQuery
CloudDatalab
Insert rowsvia REST API
Datalab上でBigQueryクエリ実行
%bq querySELECT team, SUM(score) as total_scoreFROM bubbles.devfest2017GROUP BY 1ORDER BY 2 DESC
セルの先頭にこれを書くだけ。
あとは普通にクエリを書ける。
クエリ結果をチャートにプロット
%bq query --name xxxSELECT ...
クエリに名前を付ける
%chart bars --data xxx{key: value..}
これだけ。
チャートオプション
チャートはGoogle Chartsを利用大体何でもできる
PandasからBigQueryクエリ実行
import pandas as pd
query = "SELECT * FROM ..."
df = pd.read_gbq(project_id='project', query=query)
そのままDataFrame形式で扱えるので便利!Pandas v0.20.0からread_gbqは別パッケージになったので注意
pip install pandas-gbq でインストールしてね。
GAE x ML Engine
(TensorFlow)
Cloud Machine Learning Engine?
● TensorFlowのフルマネージドサービス
● 学習・推論のジョブが流せる
● APIで他のシステムと連携ができる
Demo
リアルGCPUG
こんなモデルを作った。
pix2pix
Variableが200MBあって重い
重いモデルをどうやって使う?
● モバイルアプリに積むのは辛い
● GAEではTensorFlow動かない
● 自分でServeするのは面倒…
そうだML Engine!
GAEからOnline Prediction APIを使う
credentials = GoogleCredentials.get_application_default()ml = discovery.build("ml", "v1", credentials=credentials)
input_instance = dict(input=input_data, key="0")request_body = {"instances": [input_instance]}job_req = ml.projects().predict(name=[model], body=request_body)response = job_req.execute()
Thank you!
GDG DevFestTokyo 2017