Upload
ryo-yamamoto
View
171
Download
3
Embed Size (px)
Citation preview
Deep Learning ハンズオン #2
もうすぐスタートします!資料 URL: https://goo.gl/wzUB4V※ コーディングをしたい方は、リアルでご参加下さい
はじめに2
Deep Learning 勉強会• 趣旨:エンジニアとして Deep Learning の仕組みを理解する• 開催履歴・予定
– 4/21 人工生命勉強会– 5/16 Deep Learning 勉強会 #1– 5/23 Deep Learning 勉強会 #2– 5/30 Deep Learning 勉強会 #3– 6/16 Deep Learning ハンズオン会 #1– 6/30 AI 情報共有会 & 社内技術共有会 #1 – 7/14 Deep Learning ハンズオン会 #2
3
4
今日の目次1. ハンズオン #1 Hello TF.learn2. ハンズオン #2 カラム名付き TF.learn3. ハンズオン #3 Wide and Deep Learning
• TensorFlow 公式チュートリアルの続きです• 前回の内容とは別のレイヤなので、前回の知識は不要です
Jupyter (旧称 IPython Notebook )• ブラウザ経由で以下ができるツールです
– Python のインタラクティブシェル– linux コンソール(今日は使わないで!)
• 配布資料の URL からアクセスして下さい– 以下がインストールされたサーバ (36vCPU, c4.8xlarge)
• TensorFlow ( Google 製の Deep Learning のライブラリ)• Anaconda ( Python 機械学習のパッケージ。 Jupyter 含む)
– 勉強会後にサーバを落とすので、必要なファイルは最後にローカルに保存して下さい(アナウンスします) 5
6
Hello Jupyter
1. 識別子として自分の名前を使った prefix を使う– チームラボの人はメールアドレスの文字列(例 : yamamoto )– 外部の方はフルネーム(例 : yamadataro )
2. Python ノートブックを作って下さい– New → Python2 で新規ノートブックを作成– タイトルをクリックして 名前 -IRIS と入力例: yamamoto-IRIS
ハンズオン #1 HELLO TF.LEARN000-IRIS.ipynb
7
8
TF.learn
• TensorFlow 0.9 から導入されたハイレベル API• 簡単な記述で DNN が記述できる
9
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
10
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
11
Hello TF.learn
• IRIS Flower Dataset
• 3品種のアイリスの花についてsepal( がく ) 、 petal( 花びら ) の長さ・太さのデータを収集
• データから品種を推定する問題の入門データセットとしてよく用いられる アイリス(アヤメ)の花
12
Hello TF.learn
13
Hello TF.learn
14
Hello TF.learn
順にsepal.length, sepal.width, petal.length, petal.width
15
Hello TF.learn
16
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
17
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
18
Hello TF.learn
• 隠れ層が 10 個・ 20 個・ 10 個 の3層• 出力層が3個(3クラスの識別器)• 活性化関数は ReLU (デフォルト)• 入力層の数はまだ決まっていない
19
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
20
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
21
Hello TF.learn
fit() で学習• データと正解を与えて学習• 誤差逆伝播を 200 回まわす• 初めて fit 関数が呼ばれた時に入力層のニューロン数が決まる
22
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
23
Hello TF.learn のフロー
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
24
Hello TF.Learn
evaluate() で精度評価
25
Hello TF.learn
predict( x ) で予測
26
Hello TF.learn まとめ
識別器を作るDNNClassifier()
データ読込(学習 & 評価)それぞれ x, y
.fit(x, y) で学習する
.evaluate(x, y) で評価する
27
フリータイムPython ノートブックを作って下さい
– New → Python2 で新規ノートブックを作成– タイトルをクリックして 名前 -IRIS と入力例: yamamoto-IRIS
サンプル本体: 000-IRIS.ipynb
ハンズオン #2 カラム名付きTF.LEARN000-IRIS-named.ipynb
28
29
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
30
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
31
カラム名付き TF.learn
‘sepal_length’ という名前のカラム(値は実数)を定義
32
TF.learn のカラム種類(後述)• tf.contrib.layers.real_valued_column : 実数値• tf.contrib.layers.sparse_column : ID 値• tf.contrib.layers.bucketized_column : 実数の区間 ID• tf.contrib.layers.crossed_column : 複合カラム• tf.contrib.layers.embedding_column :
Embedding
33
カラム名付き TF.learn
‘sepal_length’ という名前のカラム(値は実数)を定義
34
カラム名付き TF.learn
‘sepal_length’ という名前のカラム(値は実数)を定義
入力層に用いるカラムを指定してDNN 識別器を作成
35
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
36
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
37
TF.learn のデータ読込関数 (input_fn)
• 学習や評価に用いるデータを、カラム名付きで1バッチぶん返す関数
‘sepal_length’ :
‘sepal_width’ :
‘petal_length’ :
‘petal_width’ :
6.4, 5.6, 6.3, 4.8, …
2.8, 2.3, 3.1, 2.4, …
5.4, 1.3, 1.5, 4.6, …
1.8, 2.3, 0.2, 1.4, … ,
2, 1, 0, 0, 1, 2, 2, 0, …
タプル型↑ ↑ 辞書型
データ 正解
↑TensorFlow のテンソル型↑
38
TF.learn のデータ読込関数 (input_fn)
学習データ用のinput_fn
39
TF.learn のデータ読込関数 (input_fn)
評価データ用のinput_fn
40
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
41
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
42
カラム名付き TF.learn
x, y の代わりにinput_fn_train を与える
43
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
44
カラム名付き TF.learn
• x, y の代わりに input_fn_eval を与える• steps で「何回 input_fn を呼び出すか」を指定
• 評価データがバッチに分かれている時は1 より大きな値になる
45
カラム名付き TF.learn
データ部分だけを返すinput_fn を定義して使う
46
カラム名付き TF.learn まとめ
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
47
フリータイムPython ノートブックを作って下さい
– New → Python2 で新規ノートブックを作成– タイトルをクリックして 名前 -IRIS-named と入力例: yamamoto-IRIS-named
サンプル本体: 000-IRIS-named.ipynb
ハンズオン #3 WIDE&DEEP LEARNING000-WideDeep.ipynb
48
49
Wide and Deep Learning
• Google が最近出した論文で提案している手法– Cheng, et.al. “Wide & Deep Learning for Recommender Systems,”
2016
• シンプルな回帰モデル (Wide Model) とEmbedding を使った DNN(Deep Model) を組み合わせたネットワーク
50
Wide Model
男 女 文京区 北区豊島区 20代30代40代 IT 建設医療性別 居住区 年代 業種
年収 500万円以上かどうか
51
Wide Model によるレコメンド
男 女 文京区 北区豊島区 20代30代40代 IT 建設医療性別 居住区 年代 業種 レコメンドする商品
服 食品家電 書籍
その商品をクリックするかどうか
52
Wide Model によるレコメンド
北区&服 20代&食品 男&書籍複合特徴
男 女 文京区 北区豊島区 20代30代40代 IT 建設医療性別 居住区 年代 業種 レコメンドする商品
服 食品家電 書籍
その商品をクリックするかどうか
53
Deep Model
54
Wide and Deep Learning
単純で過学習しにくい モデルの表現力が豊か
55
Wide and Deep Learning
• Google Play トップのアプリレコメンドで実験したところ現行のレコメンド手法(回帰モデル)に比べてアプリインストール率が 3.9% 向上• TensorFlow 0.9 に実装された
56
扱う問題
Census Income Dataset年収が $50K 以上かどうかを推定したい
57
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
58
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
59
Wide and Deep Learning
60
TF.learn のカラム種類• tf.contrib.layers.real_valued_column : 実数値• tf.contrib.layers.sparse_column : ID 値• tf.contrib.layers.bucketized_column : 実数の区間 ID• tf.contrib.layers.crossed_column : 複合カラム• tf.contrib.layers.embedding_column :
Embedding
61
Wide and Deep Learning
-17 18-2425-29
age_buckets↑ 実数age
62
Wide and Deep Learning‘Male’, ‘Female’ などの文字列をハッシュ関数で 0-99 の値にマッピング
hash_bucket_size は十分大きな値にする
経営者セールス 技術者occupation
63
Wide and Deep Learning
中学校 高校 大学education
経営者セールス 技術者occupation
中学校 /経営者 中学校 /セールス中学校 /技術者x_education_occupation
高校 /経営者 高校 /セールス 高校 /技術者
64
Wide and Deep Learning
中学校 高校 大学education
中学校 高校 大学e_education
65
Wide and Deep Learning
66
Wide and Deep Learning
67
Wide and Deep Learning
68
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
69
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
70
Wide and Deep Learning
データ分析ライブラリ Pandas を利用カラム名を与えて CSV を読み込む
71
Wide and Deep Learning
72
Wide and Deep Learning
data_train[‘income_bracket’] data_train[‘income_bracket’] == ‘>50K’ ~.astype(int)
73
Wide and Deep Learning
74
TF.learn のデータ読込関数 (再掲 )
• 学習や評価に用いるデータを、カラム名付きで1バッチぶん返す関数
‘sepal_length’ :
‘sepal_width’ :
‘petal_length’ :
‘petal_width’ :
6.4, 5.6, 6.3, 4.8, …
2.8, 2.3, 3.1, 2.4, …
5.4, 1.3, 1.5, 4.6, …
1.8, 2.3, 0.2, 1.4, … ,
2, 1, 0, 0, 1, 2, 2, 0, …
タプル型↑ ↑ 辞書型
データ 正解
↑TensorFlow のテンソル型↑
75
Wide and Deep Learning
Pandas データはdata[‘age’].values で配列として取得できる
ID カラムは SparseTensor として読み込む必要がある
76
Wide and Deep Learning
for 文中の SparseTensor 関数は、実際はこんな感じで呼ばれる
77
Wide and Deep Learning
78
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
79
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
80
Wide and Deep Learning
81
カラム名付き TF.learn
識別器を作るDNNClassifier()
データ読込関数(学習 & 評価)input_fn_train, input_fn_eval
.fit( input_fn_train ) で学習する
.evaluate( input_fn_eval ) で評価する
82
Wide and Deep Learning
83
フリータイムPython ノートブックを作って下さい
– New → Python2 で新規ノートブックを作成– タイトルをクリックして 名前 -WideDeep と入力例: yamamoto-WideDeep
サンプル本体: 000-WideDeep.ipynb
お疲れ様でした84
各自、ファイルを持ち帰って下さい• サーバはこのあと、削除します• File → Download as → IPython Notebook
• 20160714-jupyter.zip も必要であれば保存ください
85
86
学生さん向けアナウンス• 参加頂いた方を、勉強会の告知用 ML に登録します• ML 経由で、次回以降の勉強会のアナウンスをお送りします• 興味がなくなったら、 ML フッターのリンクから
unsubscribe してください
87
学生さん向けアナウンス2• 短期研究アルバイトを募集します• 技術的に面白そうな調査研究で、社内で着手できていないものをやってもらいたい• 実験的にやってみます
88
課題 A. Deep Learning によるレコメンデーション• 協調フィルタによるレコメンデーション
– 商品 ×ユーザ の購買マトリクスを特異値分解などで次元圧縮すると、各商品について「どういうユーザ層に買われれるか」を表すベクトル表現が得られる• この値は商品を表す良い特徴量となっていて、この値を用いてレコメンデーションを行う
– しかし購買データが少ない商品(新商品など)に対しては適切なベクトル表現が得られにくい( Cold Start 問題)– 商品の画像やテキストデータから、 Deep Learning によってこのベクトル表現への回帰を学習し、新商品に対しても適切なレコメンデーションができないかを実験する
• 参考論文– Oord, et.al. “Deep Content-Based Music Recommendation,” 2013
89
課題 B. 強化学習による自然な動き獲得• 犬の形の3次元モデルを作り、自然に歩くように学習させる
– 深層強化学習 (DQN)– 筋肉のモデル化によって自然になるか調査– チームラボの遊園地系の案件で導入したい
• 参考資料– 過去の社内実験 : page– OpenAI Gym: https://gym.openai.com/envs#mujoco
90
課題 C. プロジェクタとスマホによる可視光通信• ライブ会場でお客さんがスマホをかざし、客席にプロジェクタで特定のパターンを描画することでスマホのカメラを使って位置を認識し、演出ができないか調査• 先日、東大・稲見先生にいただいたアイデア
91
課題 D. 弊社受付システム映像からの同一人物判定• 弊社5階、 Facetouch という受付システム• 取り付けたカメラの映像から、同一人物の判定ができないかを調査
– この人が前回来たのはいつ、ということを検索できないか• 将来的に Facetouch に搭載し、前回来社時の担当者を呼び出しやすくするなどの改良をしたい• 参考資料
– OpenFace: https://cmusatyalab.github.io/openface/• Deep Learning による顔認識ライブラリ
92
短期研究アルバイト• 働き方
– 応相談(例:週に2日で2ヶ月 とか)– 基本的には弊社に来て作業してもらう想定
• 報酬– 時給 910円– 実際に作業した時間
• 弊社以外で論文読んだり作業した場合は自己申告で換算
• やりたい方は山本まで連絡ください
今後の予定93
94
次回以降の予定• 7/21( 木 ) 19:00 - 21:00 機械学習もくもく会(社内のみ)• 7/28(木 ) は開催なし。 8月に再開予定、後日連絡します
– 7月忙しい人が多い– 次に何をやるか、ゆっくり考えたい
• TensorFlow ハンズオン、ちょっと煮詰まってきた感あり• これらの情報にキャッチアップしたい、チームラボの人は
Slack の #ai トピックに参加して下さい• 学生の方は ML からご案内します