Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Deep Learning Basic
w/ TensorFlow
2
目次:
1. TensorFlow概要
2. DeepLearning基礎とTensorFlow
3. 改善に向けた試行錯誤
4. まとめ
3
目次:
1. TensorFlow概要
2. DeepLearning基礎とTensorFlow
3. 改善に向けた試行錯誤
4. まとめ
4
Motivation
5
TensorFlowの登場
6
TensorFlowとは?
Googleが発表した機械学習フレームワーク
Deep Learningだけでなくword2Vecなども実現可能
分散実行やマルチCPU/GPUでも動作可能
実装言語はC++/Python
Google...
7
TensorFlowとは?
TensorBoard: 学習内容の可視化ツール
8
TensorFlowとは?
TensorFlow Serving:
クライアントへの入出力をサポート
9
TensorFlowとは?
Distributed TensorFlow :
分散処理用フレームワーク
10
TensorFlowとは?
これも(恐らく)TensorFlow
https://cloudplatform.googleblog.com/2016/02/Google-Cloud-Vision-API-enters-beta-open-...
11
TensorFlowとは?
これも(恐らく) TensorFlow
12
実用的かつ、話題性も高い
このSWでゼロから作ってみよう!
13
Demo
(類似商品検索機能)
14
実装機能:
1. ショッピングサイトの画像をInputに学習
2. 学習結果を元に、Inputの画像がどのカテゴリか判別する
3. 同一カテゴリの写真を推薦する(rails内処理)
※対応カテゴリ: Tシャツ, ワンピース, トップス, ...
15
アプリケーション概要(データ準備)
page=1 page=2 page=3 page=4 page=5
学習用データ 検証用データ
画像:
ラベル: 0
1
0
※サブカテゴリを0/1の配列に見
立て該当カテゴリにbitを立てる
 w...
16
アプリケーション概要(学習)
web サイト
crawler
Tシャツ
学習用データ
訓練用ロジック
(DeepLearning)
スカート
評価用データ
学習済データ
17
アプリケーション概要(認識)
学習済データ識別プログラム
upload
カ
テ
ゴ
リ
名
該当カテゴリ
画像取得
18
アプリケーション概要
学習用画像: 対象カテゴリを4ページ分(約1000枚)
画像サイズは28x28x3に変更
正確性評価: 学習に使わない画像を用意し、正しく
カテゴリを判別てきた割合で判断
ネットワークモデル: 畳込み層x2 プーリン...
19
目次:
1. TensorFlow概要
2. DeepLearning基礎とTensorFlow
3. 改善に向けた試行錯誤
4. まとめ
20
TensorFlowのコーディングスタイルって?
# 画像分類-学習
imgtrain = ImageClassifier.train(file_path)
# 画像分類-カテゴリ分類
category = imgtrain.classi...
21
TensorFlowのコーディングスタイルって?
# 画像分類-学習
imgtrain = ImageClassifier.train(file_path)
# 画像分類-カテゴリ分類
category = imgtrain.classi...
22
実際のソースコード(抜粋)
# 画像分類-学習
def inference(images_placeholder, keep_prob):
# 畳込み層の作成
def conv2d(x, W):
return tf.nn.conv2d(x...
23
そのため
Deep Learningの理論概要を踏まえ
TensorFlowのコードを説明します
※ちょっと難しい話しますが、これが話題の人工知能の正体です
24
Deep Learning(畳込みニューラルネットワーク)のフロー
input(画像
+Label)
Tシャツ
スカート
コスチューム
スコア計算(推論)(inference)
誤差計算(loss)
0 0 1 0
1 0 0 0
計算結...
25
TensorFlowのコード
スコア計算(推論):inference関数
誤差計算:loss関数
最適化(training):training関数
input(画像+ラベル)読み込み
繰り返し処理
さきほど基本的なフローを踏まえたプログラ...
26
TensorFlowのコード
スコア計算(推論):inference関数
誤差計算:loss関数
最適化(training):training関数
input(画像+ラベル)読み込み
繰り返し処理
さきほど基本的なフローを踏まえたプログラ...
27
スコア計算(推論):inference
・畳込みニューラルネットワークでスコア計算
「畳込み層」と「プーリング層」「全結合層」等で構成
脳の視覚野を模倣し、画像の特徴を抽出する計算方法
Deep Learinngと呼ばれているものの正体の...
28
イメージ => 画像にフィルタなどをかけて特徴を抜き出す
「xx層」というのはその種類だと想像して下さい
http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html
29
スコア計算(推論):inference – 畳込み層
• フィルタ(weight)を使って特徴的な領域を抜き出す
• training(最適化)ではフィルタ(weight)の値を調整する
# 畳み込み層の作成
def conv2d(x, ...
30
0.4
0.1 0.3
0.20.4
0.1 0.3
0.2
スコア計算(推論):inference – 畳込み層
32 4
31 5
01 3
0.1 0.3
0.2 0.4
2.5 2*0.1
+ 3*0.3
+1*0.2
+3*0....
31
スコア計算(推論):inference – プーリング層
• 畳込み層の次に位置して、画像をサンプリングする
• 特徴の位置が変化しても対応できるようにするため
• 学習によって変化するパラメータは存在しない
# プーリング層の作成
de...
32
スコア計算(推論):inference – プーリング層
32 4
31 5
01 3
3 最大の
数値を
抽出
・・・ 53
31
計算イメージ
Input(画像等)
Output
画像イメージ
http://cs231n.github...
33
スコア計算(推論):inference – 全結合層
• 抽出した特徴量を元に、最終的な区分を出力する
• softmaxという計算をすることによって割合を出力
# 全結合層の作成
with tf.name_scope('fc2') as...
34
スコア計算(推論):inference – 全結合層
計算イメージ
画像イメージ
http://cs231n.github.io/convolutional-networks/
サラブレッド 50%
ポニー 37%
・
・
・
32
31...
35
TensorFlowのコード
スコア計算(推論):inference
誤差計算:loss関数
最適化(training):training関数
input(画像+ラベル)読み込み
繰り返し処理
さきほど基本的なフローを踏まえたプログラム構...
36
イメージ => 正解データと計算結果を比較して、どれくらい正
解しているかを計算
計算結果 正解
同じネコ科
だから60点
37
誤差計算:loss – 交差エントロピー
• 交差エントロピーという手法を実装
• 正解ラベルと算出した値を比較し誤差算出
def loss(logits, labels):
cross_entropy = -tf.reduce_sum(...
38
TensorFlowのコード
スコア計算(推論):inference
誤差計算:loss関数
最適化(training) :training関数
input(画像+ラベル)読み込み
繰り返し処理
さきほど基本的なフローを踏まえたプログラム...
39
イメージ => lossの値を元にフィルタ(weight)の値を最適化
Loss
最適値
40
最適化:training
• lossの結果を最小化するようにweightを変更する
• 代表的な最適化関数としては以下のものがある
1.GradientDescentOptimizer
⇒ 確率的勾配降下法という手法。確実だが遅い
2....
41
• TensorFlowコードとDeep Learning理論は繋がっている
• ただし内容は四則演算で充分理解できるものなので恐れずに
⇒とはいえ理論語るには全く時間が足りないので、もっと詳しく知りたい方は別途お声がけ下
さい。講師とか...
42
ちなみに・・・
• 学習済みモデルをつかえば簡単に書くことはできます
(cifar10モジュールを利用)
• チューニングは理論を知らないと厳しいですが
images, labels = cifar10.distorted_inputs(...
43
目次:
1. TensorFlow概要
2. TensorFlow コーディング概要
3. 改善に向けた試行錯誤
4. まとめ
44
実行ログ
NNNN:crawl usr0102044$ python cnn.py
step 0, training accuracy 0.0981432
step 1, training accuracy 0.0848806
step ...
45
実行ログ(学習データと正解性評価データが同一の場合)
NNNN:crawl usr0102044$ python cnn.py
step 0, training accuracy 0.130965
・・・
step 199, traini...
46
チューニング案
1.データ数増加
2.画像サイズ+フィルタサイズ増
3.画像に揺らぎ(歪み)を与える
47
1.データ数増加
• 多くの画像パターンに対応させるためInputを多くする
• 5ページ分から15ページ分(3倍)の画像に対応する
48
2.画像サイズ+フィルタサイズ増
• そもそも28x28の画像サイズは人間が見てもわからない
• ただし画像サイズを2倍すると行列は4倍になる
• 計算量を考え2倍の56x56で学習させる
49
3.画像に揺らぎ(歪み)を与える
• 一つの画像を加工し、いろいろな画像を生成する
• 切り出し、反転、色調変化など
• 加工するため同時にデータ数も増加する
やりすぎ!
50
結果
(通常)
データ増加
画像サイズ
揺らぎ
accuracy 実行時間
30.3%
50.1%
30.5%
34.2%
約1時間
約4時間
約2.5時間
約4時間
データ増加については著しい成果あり
ある程度までは、学習のためには...
51
さらなる改善に向けて
1.ネットワークモデル変更
2.速度改善
52
更なる改善案(1) ネットワークモデル変更
• ネットワークモデルとは前述した各層の組み合わせのこと
• 著名なネットワークモデルは公表されているため、これに置
き換えることによって成果を上げることが可能
53
更なる改善案(1) 著名なネットワークモデル
層数合計
8 ILSVRC 2012AlexNet
GoogLeNet 19
ResNet 152(!)
備考
内容は公開されており実装することは難しくはない
ただし、最近のものは非常に複...
54
更なる改善案(1) 層数とエラー率の関係
層数を単純に増やせばいいものではない
なにが効果あるのかは試行錯誤するしかないのが現状
http://cs231n.stanford.edu/slides/winter1516_lecture...
55
GPUの特徴
処理能力は遅いがコア数が多い(数千)
軽い処理を並列処理するのが得意
逆にCPUはシーケンシャルな処理が得意
今回のような小さなデータセットですら4時間程度かかる
GPUを使えば高速学習可能
 Deep Learningの...
56
更なる改善案(2)速度改善
(通常)
実行時間
59:52
GPU使用時 04:21
※AWS g2.2xlarge使用
• 4GB GPUを使うことにより性能が15倍近く向上(マシンス
ペックの差もあるので一概には言えないが)
• Te...
57
目次:
1. TensorFlow概要
2. DeepLearning基礎とTensorFlow
3. 改善に向けた試行錯誤
4. まとめ
58
• TensorFlowは敷居が低いわけではない
• 実装、チューニングなどは理論知識がないと辛い
• チューニングも試行錯誤を繰り返すしかない
• そのため開発スタイルも多人数ではなく、少人数で
数多く回すスタイルになる
まとめ
59http://cs231n.stanford.edu/slides/winter1516_lecture12.pdf
• Feature extraction / finetuning existing models:
Use Caffe
...
60https://cloud.google.com/ml/
TensorFlowが使えるクラウドサービス発表
Googleの取組み
61
Google Cloud Machine Learning
TensorFlowを実行できるクラウドサービス
透過的に実行環境の増強が可能
ノードの追加は自由に変更
10GB 4500万行を9時間→30分強まで短縮
62
Google謹製ということで
複数サービスの組み合わせで
優位性を生み出してきそう
63
デファクトスタンダードの可能性は
高いので引き続き追い続けましょう
64
何より理論学習を続けましょう!
65
一人だと寂しいので
勉強仲間も募集してます
66
ご清聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

Deep Learning基本理論とTensorFlow

6,464 views

Published on

TensorFlowを絡めて簡単な画像認識用のCNNを解説する勉強会の資料です

Published in: Technology
  • Be the first to comment

Deep Learning基本理論とTensorFlow

  1. 1. Deep Learning Basic w/ TensorFlow
  2. 2. 2 目次: 1. TensorFlow概要 2. DeepLearning基礎とTensorFlow 3. 改善に向けた試行錯誤 4. まとめ
  3. 3. 3 目次: 1. TensorFlow概要 2. DeepLearning基礎とTensorFlow 3. 改善に向けた試行錯誤 4. まとめ
  4. 4. 4 Motivation
  5. 5. 5 TensorFlowの登場
  6. 6. 6 TensorFlowとは? Googleが発表した機械学習フレームワーク Deep Learningだけでなくword2Vecなども実現可能 分散実行やマルチCPU/GPUでも動作可能 実装言語はC++/Python Google内部で実際にプロダクト環境に使われている
  7. 7. 7 TensorFlowとは? TensorBoard: 学習内容の可視化ツール
  8. 8. 8 TensorFlowとは? TensorFlow Serving: クライアントへの入出力をサポート
  9. 9. 9 TensorFlowとは? Distributed TensorFlow : 分散処理用フレームワーク
  10. 10. 10 TensorFlowとは? これも(恐らく)TensorFlow https://cloudplatform.googleblog.com/2016/02/Google-Cloud-Vision-API-enters-beta-open-to-all-to-try.html
  11. 11. 11 TensorFlowとは? これも(恐らく) TensorFlow
  12. 12. 12 実用的かつ、話題性も高い このSWでゼロから作ってみよう!
  13. 13. 13 Demo (類似商品検索機能)
  14. 14. 14 実装機能: 1. ショッピングサイトの画像をInputに学習 2. 学習結果を元に、Inputの画像がどのカテゴリか判別する 3. 同一カテゴリの写真を推薦する(rails内処理) ※対応カテゴリ: Tシャツ, ワンピース, トップス, パンツ, スカート, 帽子, スカーフ, 靴, ネ イル, コスチューム 削除
  15. 15. 15 アプリケーション概要(データ準備) page=1 page=2 page=3 page=4 page=5 学習用データ 検証用データ 画像: ラベル: 0 1 0 ※サブカテゴリを0/1の配列に見 立て該当カテゴリにbitを立てる  webサイトのあるカテゴリから画像取得  サブカテ5ページ分からスクレイピング Tシャツ 靴 ワンピース
  16. 16. 16 アプリケーション概要(学習) web サイト crawler Tシャツ 学習用データ 訓練用ロジック (DeepLearning) スカート 評価用データ 学習済データ
  17. 17. 17 アプリケーション概要(認識) 学習済データ識別プログラム upload カ テ ゴ リ 名 該当カテゴリ 画像取得
  18. 18. 18 アプリケーション概要 学習用画像: 対象カテゴリを4ページ分(約1000枚) 画像サイズは28x28x3に変更 正確性評価: 学習に使わない画像を用意し、正しく カテゴリを判別てきた割合で判断 ネットワークモデル: 畳込み層x2 プーリング層x2 全結合層 x2 繰り返し回数: 画像を50枚ずつ処理しながら全8,000回学習 (200ステップ)
  19. 19. 19 目次: 1. TensorFlow概要 2. DeepLearning基礎とTensorFlow 3. 改善に向けた試行錯誤 4. まとめ
  20. 20. 20 TensorFlowのコーディングスタイルって? # 画像分類-学習 imgtrain = ImageClassifier.train(file_path) # 画像分類-カテゴリ分類 category = imgtrain.classify(picture_binary) なんらかの便利クラスがあって、画像を読み込むだけが嬉しい。
  21. 21. 21 TensorFlowのコーディングスタイルって? # 画像分類-学習 imgtrain = ImageClassifier.train(file_path) # 画像分類-カテゴリ分類 category = imgtrain.classify(picture_binary) なんらかの便利クラスがあって、画像を読み込むだけが嬉しい。
  22. 22. 22 実際のソースコード(抜粋) # 画像分類-学習 def inference(images_placeholder, keep_prob): # 畳込み層の作成 def conv2d(x, W): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') # 畳込み層の作成 with tf.name_scope('conv1') as scope: W_conv1 = weight_variable([5, 5, 3, 32]) b_conv1 = bias_variable([32]) h_conv1 = tf.nn.relu(conv2d(x_images, W_conv1) + b_conv1) … 畳込み層??? weight??? strides??? 関連知識がないともはや意味不明
  23. 23. 23 そのため Deep Learningの理論概要を踏まえ TensorFlowのコードを説明します ※ちょっと難しい話しますが、これが話題の人工知能の正体です
  24. 24. 24 Deep Learning(畳込みニューラルネットワーク)のフロー input(画像 +Label) Tシャツ スカート コスチューム スコア計算(推論)(inference) 誤差計算(loss) 0 0 1 0 1 0 0 0 計算結果 正解 最適化(training) ※パラメータ調整 Training(学習) 繰り返し処理
  25. 25. 25 TensorFlowのコード スコア計算(推論):inference関数 誤差計算:loss関数 最適化(training):training関数 input(画像+ラベル)読み込み 繰り返し処理 さきほど基本的なフローを踏まえたプログラム構成となる
  26. 26. 26 TensorFlowのコード スコア計算(推論):inference関数 誤差計算:loss関数 最適化(training):training関数 input(画像+ラベル)読み込み 繰り返し処理 さきほど基本的なフローを踏まえたプログラム構成となる
  27. 27. 27 スコア計算(推論):inference ・畳込みニューラルネットワークでスコア計算 「畳込み層」と「プーリング層」「全結合層」等で構成 脳の視覚野を模倣し、画像の特徴を抽出する計算方法 Deep Learinngと呼ばれているものの正体の一つ 畳込み層 畳込み層プーリン グ層 プーリン グ層 全結合層
  28. 28. 28 イメージ => 画像にフィルタなどをかけて特徴を抜き出す 「xx層」というのはその種類だと想像して下さい http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html
  29. 29. 29 スコア計算(推論):inference – 畳込み層 • フィルタ(weight)を使って特徴的な領域を抜き出す • training(最適化)ではフィルタ(weight)の値を調整する # 畳み込み層の作成 def conv2d(x, W): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') # 畳込み層の作成 with tf.name_scope('conv1') as scope: W_conv1 = weight_variable([5, 5, 3, 32]) b_conv1 = bias_variable([32]) h_conv1 = tf.nn.relu(conv2d(x_images, W_conv1) + b_conv1)
  30. 30. 30 0.4 0.1 0.3 0.20.4 0.1 0.3 0.2 スコア計算(推論):inference – 畳込み層 32 4 31 5 01 3 0.1 0.3 0.2 0.4 2.5 2*0.1 + 3*0.3 +1*0.2 +3*0.4 ・・・ 4.12.5 3.81.2 計算イメージ Input(画像等) フィルタ Output 画像イメージ http://cs231n.github.io/convolutional-networks/ 様々な画像 フィルタ (weight)で 特徴を抽出 これをいい感じに 修正するのが目的
  31. 31. 31 スコア計算(推論):inference – プーリング層 • 畳込み層の次に位置して、画像をサンプリングする • 特徴の位置が変化しても対応できるようにするため • 学習によって変化するパラメータは存在しない # プーリング層の作成 def max_pool_2x2(x): return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') # プーリング層の作成 with tf.name_scope('pool1') as scope: h_pool1 = max_pool_2x2(h_conv1)
  32. 32. 32 スコア計算(推論):inference – プーリング層 32 4 31 5 01 3 3 最大の 数値を 抽出 ・・・ 53 31 計算イメージ Input(画像等) Output 画像イメージ http://cs231n.github.io/convolutional-networks/ 2x2ずつ抽出 4 5 3 1 0 3 3
  33. 33. 33 スコア計算(推論):inference – 全結合層 • 抽出した特徴量を元に、最終的な区分を出力する • softmaxという計算をすることによって割合を出力 # 全結合層の作成 with tf.name_scope('fc2') as scope: W_fc2 = weight_variable([1024, NUM_CLASSES]) b_fc2 = bias_variable([NUM_CLASSES]) # ソフトマックス関数による正規化 with tf.name_scope('softmax') as scope: y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
  34. 34. 34 スコア計算(推論):inference – 全結合層 計算イメージ 画像イメージ http://cs231n.github.io/convolutional-networks/ サラブレッド 50% ポニー 37% ・ ・ ・ 32 31 0.1 0.3 0.2 0.4 4.12.5 3.81.2 Input(画像等) フィルタ 60.312.1 44.73.3 exp norm 強いとこ ろはより 強く! 50%10% 37%3% 32 31 32 31 32 31
  35. 35. 35 TensorFlowのコード スコア計算(推論):inference 誤差計算:loss関数 最適化(training):training関数 input(画像+ラベル)読み込み 繰り返し処理 さきほど基本的なフローを踏まえたプログラム構成となる
  36. 36. 36 イメージ => 正解データと計算結果を比較して、どれくらい正 解しているかを計算 計算結果 正解 同じネコ科 だから60点
  37. 37. 37 誤差計算:loss – 交差エントロピー • 交差エントロピーという手法を実装 • 正解ラベルと算出した値を比較し誤差算出 def loss(logits, labels): cross_entropy = -tf.reduce_sum(labels * tf.log(tf.clip_by_value(logits,1e- 10,1.0))) return cross_entropy 計算イメージ 馬 ポニー 猫 ・・・ ☓ 計算結果 0.65 0.12 0.01 正解ラベル 馬 ポニー 猫 0 1 0 馬 ポニー 猫 -0.18 -0.92 -2 計算結果(LOG) ☓ -1 = 0.92
  38. 38. 38 TensorFlowのコード スコア計算(推論):inference 誤差計算:loss関数 最適化(training) :training関数 input(画像+ラベル)読み込み 繰り返し処理 さきほど基本的なフローを踏まえたプログラム構成となる
  39. 39. 39 イメージ => lossの値を元にフィルタ(weight)の値を最適化 Loss 最適値
  40. 40. 40 最適化:training • lossの結果を最小化するようにweightを変更する • 代表的な最適化関数としては以下のものがある 1.GradientDescentOptimizer ⇒ 確率的勾配降下法という手法。確実だが遅い 2.AdamOptimizer ⇒Adamという手法。比較的早く、収束にも問題ない ⇒基本こちらを使い、問題がある場合のみ他のOptimizerを試す def training(loss, learning_rate): train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss) return train_step
  41. 41. 41 • TensorFlowコードとDeep Learning理論は繋がっている • ただし内容は四則演算で充分理解できるものなので恐れずに ⇒とはいえ理論語るには全く時間が足りないので、もっと詳しく知りたい方は別途お声がけ下 さい。講師とかやります
  42. 42. 42 ちなみに・・・ • 学習済みモデルをつかえば簡単に書くことはできます (cifar10モジュールを利用) • チューニングは理論を知らないと厳しいですが images, labels = cifar10.distorted_inputs() logits = cifar10.inference(tf.image.resize_images(images,28,28)) loss = cifar10.loss(logits, labels) train_op = cifar10.train(loss, global_step)
  43. 43. 43 目次: 1. TensorFlow概要 2. TensorFlow コーディング概要 3. 改善に向けた試行錯誤 4. まとめ
  44. 44. 44 実行ログ NNNN:crawl usr0102044$ python cnn.py step 0, training accuracy 0.0981432 step 1, training accuracy 0.0848806 step 2, training accuracy 0.0928382 step 3, training accuracy 0.116711 step 4, training accuracy 0.108753 step 5, training accuracy 0.145889 ・・・ step 199, training accuracy 0.3138302 step 200, training accuracy 0.30504 • 学習が進むたび正解率があがっていく • しかし30%前後からaccuracyが上がらなくなる
  45. 45. 45 実行ログ(学習データと正解性評価データが同一の場合) NNNN:crawl usr0102044$ python cnn.py step 0, training accuracy 0.130965 ・・・ step 199, training accuracy 0.950159 step 200, training accuracy 0.950159 • こちらは95%の正解率 ⇒与えられたデータには適合できるが未知のデータには不適合
  46. 46. 46 チューニング案 1.データ数増加 2.画像サイズ+フィルタサイズ増 3.画像に揺らぎ(歪み)を与える
  47. 47. 47 1.データ数増加 • 多くの画像パターンに対応させるためInputを多くする • 5ページ分から15ページ分(3倍)の画像に対応する
  48. 48. 48 2.画像サイズ+フィルタサイズ増 • そもそも28x28の画像サイズは人間が見てもわからない • ただし画像サイズを2倍すると行列は4倍になる • 計算量を考え2倍の56x56で学習させる
  49. 49. 49 3.画像に揺らぎ(歪み)を与える • 一つの画像を加工し、いろいろな画像を生成する • 切り出し、反転、色調変化など • 加工するため同時にデータ数も増加する やりすぎ!
  50. 50. 50 結果 (通常) データ増加 画像サイズ 揺らぎ accuracy 実行時間 30.3% 50.1% 30.5% 34.2% 約1時間 約4時間 約2.5時間 約4時間 データ増加については著しい成果あり ある程度までは、学習のためには大きなデータセットが必要 ⇒いろいろな手法があるが、まずは訓練データ!
  51. 51. 51 さらなる改善に向けて 1.ネットワークモデル変更 2.速度改善
  52. 52. 52 更なる改善案(1) ネットワークモデル変更 • ネットワークモデルとは前述した各層の組み合わせのこと • 著名なネットワークモデルは公表されているため、これに置 き換えることによって成果を上げることが可能
  53. 53. 53 更なる改善案(1) 著名なネットワークモデル 層数合計 8 ILSVRC 2012AlexNet GoogLeNet 19 ResNet 152(!) 備考 内容は公開されており実装することは難しくはない ただし、最近のものは非常に複雑なため実装難易度も上がる エラー率 16.4% 6.7% 3.57% ILSVRC 2014 ILSVRC 2015 (今回使用) 4
  54. 54. 54 更なる改善案(1) 層数とエラー率の関係 層数を単純に増やせばいいものではない なにが効果あるのかは試行錯誤するしかないのが現状 http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf
  55. 55. 55 GPUの特徴 処理能力は遅いがコア数が多い(数千) 軽い処理を並列処理するのが得意 逆にCPUはシーケンシャルな処理が得意 今回のような小さなデータセットですら4時間程度かかる GPUを使えば高速学習可能  Deep Learningの正体は大量の行列演算  行列は簡単で並列実施可能な計算の塊のためGPUが得意 更なる改善案(2) 速度改善
  56. 56. 56 更なる改善案(2)速度改善 (通常) 実行時間 59:52 GPU使用時 04:21 ※AWS g2.2xlarge使用 • 4GB GPUを使うことにより性能が15倍近く向上(マシンス ペックの差もあるので一概には言えないが) • TensorFlow上のコードには修正なし • 「試行錯誤」必須なためGPU利用も必須 マシンスペック GPU CPU: i5 1.6GHz MEM: 8GB ー CPU: Xeon E5 8vCPU MEM: 15GB GRID K520 4GB
  57. 57. 57 目次: 1. TensorFlow概要 2. DeepLearning基礎とTensorFlow 3. 改善に向けた試行錯誤 4. まとめ
  58. 58. 58 • TensorFlowは敷居が低いわけではない • 実装、チューニングなどは理論知識がないと辛い • チューニングも試行錯誤を繰り返すしかない • そのため開発スタイルも多人数ではなく、少人数で 数多く回すスタイルになる まとめ
  59. 59. 59http://cs231n.stanford.edu/slides/winter1516_lecture12.pdf • Feature extraction / finetuning existing models: Use Caffe • Complex uses of pretrained models: Use Lasagne or Torch • Write your own layers: Use Torch • Crazy RNNs: Use Theano or Tensorflow • Huge model, need model parallelism: Use TensorFlow 単一でTensorFlowが圧倒的優位というわけでは ない 参考:スタンフォード大学講義より各種フレームワーク比較
  60. 60. 60https://cloud.google.com/ml/ TensorFlowが使えるクラウドサービス発表 Googleの取組み
  61. 61. 61 Google Cloud Machine Learning TensorFlowを実行できるクラウドサービス 透過的に実行環境の増強が可能 ノードの追加は自由に変更 10GB 4500万行を9時間→30分強まで短縮
  62. 62. 62 Google謹製ということで 複数サービスの組み合わせで 優位性を生み出してきそう
  63. 63. 63 デファクトスタンダードの可能性は 高いので引き続き追い続けましょう
  64. 64. 64 何より理論学習を続けましょう!
  65. 65. 65 一人だと寂しいので 勉強仲間も募集してます
  66. 66. 66 ご清聴ありがとうございました

×