Talk about ML and DL for happy engineer's life

Talk about ML and DL for happy engineer's life

DevFest Tokyo 2016での発表資料
http://gdg-tokyo.connpass.com/event/38927/

B5e4cea01a88ca6e79a962b3e0004405?s=128

Norihiro Shimoda

October 08, 2016
Tweet

Transcript

  1. エンジニアとして 知っておくと幸せになれる (かも知れない) 機械学習とTensorFlowのこと by  Norhiro Shimoda

  2. ⾃自⼰己紹介 • 下⽥田倫倫⼤大(@rindai87) • データ分析専業の会社で⾊色々やってます。 • 職歴的にはエンジニアになりますが、何故か データサイエンス的な話で露露出させていただく 機会が多めです。

  3. • つい⼀一昨⽇日の2016年年10⽉月 8⽇日に発⾜足しました(させ ました) • 先⾏行行して動いているいくつ かの勉強会とも合流流予定 • CloudMLなどもスコープに 活動していく予定

    TensorFlow User  Groupについて 公開資料料ではカット
  4. None
  5. None
  6. #2のMeetupも計画中

  7. 最近、機械学習とか ⼈人⼯工知能が ものすごいブームですね 出典:https://www.coursera.org/learn/machine-‐‑‒learning

  8. ⼈人⼯工知能すごい!というイメージ 出典:https://www.google.com/selfdrivingcar/where/ 出典: https://gogameguru.com/i/2016/03/AlphaGo-‐‑‒ Lee-‐‑‒Sedol-‐‑‒game-‐‑‒3-‐‑‒game-‐‑‒over.jpg ⾃自動運転 AlphaGO ⼈人が運転するより事故率率率が低いらしい 囲碁のプロ棋⼠士に勝利利した

  9. ⼈人⼯工知能使えそう!というイメージ 出典:https://cloud.google.com/products/ 超すごいGoogleの ⼈人⼯工知能の要素技術を クラウドで簡単に使えそう な雰囲気!!!

  10. 結果、こういう流流れが できつつあります

  11. クラウドで ⼈人⼯工知能関連のAPI あるじゃない ↓ APIを使ってみる ↓ ビジネスニーズに 微妙にフィットしない ↓ スクラッチでやるしか

    ↓ 機械学習むずい \(^o^)/
  12. エンジニアを取り巻く環境 機械学習が使 えそうな案件 ⼈人⼯工知能が キーワードに なっている新 規案件 ⼈人⼯工知能やりた まえという謎の プレッシャー

    ⼈人⼯工知能や機械 学習への興味 数年年前まではなかった機械学習や⼈人⼯工知能 というキーワードが⾒見見え隠れする今⽇日このごろ
  13. エンジニアも機械学習 っぽい話が分かった⽅方が 良良さそう??

  14. 本⽇日お話すること 誰でも⼤大体理理解した気になれる 機械学習とTensorFlowの話

  15. まずは機械学習のお話

  16. 弊社でもよくある話 機械学習とか分析を勉強したいん ですよね 社内にいるデータサイエンティス トに聞いたり⾃自分で勉強すればい いんじゃないですか? それがどうしたら良良いかよくわか らないんですよー エンジニア 私

  17. 機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •

    Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
  18. 機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •

    Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
  19. ブラックボックスとしての機械学習 アルゴリズムが取り扱えるデータフォーマット 機械学習のアルゴリズム 何らかの結果 ⼊入⼒力力 ⼊入出⼒力力の変換だけして ライブラリ呼び出し

  20. ⾔言ってることはわかるけど⾯面⽩白くない 著作者:dice-‐‑‒kt 出典:http://free-‐‑‒photos.gatag.net/2014/05/15/180000.html

  21. 機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •

    Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
  22. ⽤用途別のアルゴリズムの選択 出典:http://scikit-‐‑‒learn.org/stable/tutorial/machine_̲learning_̲map/

  23. やっぱり⾔言ってることは わかるけどやりたかった 機械学習ではない 著作者:Gwen241   出典:http://free-‐‑‒photos.gatag.net/2014/07/20/060000.html

  24. 機械学習理理解のstep別イメージ • Step1 – 賢いブラックボックスとして使う • Step2 – ⽤用途別に呼び出す⼿手法を判断できる •

    Step3 – 得られた結果の判断とパラメータのチューニング • Step4 – 機械学習のアルゴリズムを実装できる • etc…
  25. 結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択
  26. 出典:http://playground.tensorflow.org/

  27. 結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択
  28. 出典:http://playground.tensorflow.org/ アルゴリズムや使っているツー ルに合わせ、いい感じの結果が 出るように⼊入⼒力力を加⼯工する

  29. 結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択
  30. 出典:http://playground.tensorflow.org/ 結果を⾒見見て今のパラメータ で良良いかかどうかを判断

  31. 結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択
  32. 出典:http://playground.tensorflow.org/ ⾚赤いところを問題に合わせて いい感じに調整する

  33. 結果理理解とチューニング アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択
  34. 出典:http://playground.tensorflow.org/ あー、これじゃだめだ、 とそもそも違うアルゴリズムを 選ぶこともある

  35. 機械学習っぽいけど 急に難易易度度が上がりすぎじゃね? 出典:http://labaq.com/archives/51849423.html

  36. Step2までだと機械学習 やってる感がありません 機械学習やってる感が欲しい⼈人は Step3以降降を⽬目指すと 良良いかもしれません

  37. Step3以降降に進むには • 数学から逃げずに⽐比較的硬派な本などで地道に 知識識を蓄えていきましょう ※私もStp2と3の間をウロウロしている1⼈人な気がします… etc…

  38. ちなみに深層学習もこうなの? という疑問に関しては…

  39. いわゆる機械学習 アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択 ここをどれだけ頑張るが 結果に⼤大きく影響を与える
  40. 深層学習と⾔言われている領領域 アルゴリズムが取り扱える データフォーマットへの変換 機械学習の アルゴリズム 何らかの結果 ⼊入⼒力力 結果の解釈 パラメータ チューニング

    アルゴリズムの 再選択 層が深いためパラメータが すごくたくさんある
  41. 層がものすごくたくさん 各層毎に様々なパラメータが… 出典:http://playground.tensorflow.org/

  42. 例例:Inception-‐‑‒V3 出典:https://research.googleblog.com/2016/03/train-‐‑‒your-‐‑‒own-‐‑‒image-‐‑‒classifier-‐‑‒with.html ImageNetという画像分類のベンチマー クのためにGoogleが発案したモデル

  43. Step4以降降の話には⾏行行かずに TensorFlowのお話

  44. TensorFlowとは? • Googleによって2015年年11⽉月に公開されたオー プンソース – Google内部で多数の使⽤用実績があるらしい Google  Photo 画像の⾃自動分類 Google

     翻訳 翻訳の⾃自動学習 Gmail スパムフィルタ OK  Google ⾳音声認識識
  45. TensorFlowにありがちな勘違い TensorFlowは深層学習に 特化したツールである

  46. TensorFlowの正しい認識識 TensorFlowはデータフローグラフを 利利⽤用した数値計算のための オープンソースの ソフトウェアライブラリである TensorFlow™  is  an  open  source

     software  library   for  numerical  computation  using  data  flow  graphs. TensorFlow公式サイトより
  47. TensorFlowの超基本 OP Input Output OP OP Input グラフを意識識しながら処理理を記述して 最後にどびゃっと実⾏行行する

  48. TensorFlowのパラダイム • はじめにテンソルの演算グラフを作る • グラフの実⾏行行単位をセッションという • 定数、変数、プレースホルダーを宣⾔言できる • 作ったグラフはデバイス(CPUやGPU)に展開 して実⾏行行する

    • 分散処理理も可能である
  49. TensorFlowのパラダイム • はじめにテンソルの演算グラフを作る • グラフの実⾏行行単位をセッションという • 定数、変数、プレースホルダーを宣⾔言できる • 作ったグラフはデバイス(CPUやGPU)に展開 して実⾏行行する

    • 分散処理理も可能である ということを、Pythonをインターフェースとして ⾏行行っているフレームワーク 機械学習に関する便便利利なヘルパー関数がいっぱい あるのがポイント
  50. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  51. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  52. 1+2  =  3の⾜足し算

  53. 演算(Operation) x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant()

  54. 演算(Operation) x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant() 1 2

    3
  55. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  56. カウントアップ

  57. 変数(Variable) inc(定数) + cnt(変数) 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある tf.assign() tf.Variable() tf.constant() tf.add()

    1 0
  58. 変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 0

    1 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
  59. 変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 1

    2 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
  60. 変数(Variable) inc(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1 2

    3 通常のプログラミング⾔言語の変数などと同じように 代⼊入可能な箱として変数がある
  61. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  62. いろんな値を⼊入⼒力力する

  63. プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる

    1
  64. プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() feed_̲dict 1

    1 2 あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる
  65. プレースホルダー(Placeholder) y (プレースホルダ) x(定数) + tf.constant() tf.add() tf.placeholder() feed_̲dict 3

    1 4 あらかじめ箱を作っておいて 実⾏行行時に好きな値を⼊入⼒力力させる
  66. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  67. 実⾏行行環境を分ける

  68. セッション 1(定数) + cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() 1(定数) +

    cnt(変数) tf.assign() tf.Variable() tf.constant() tf.add() セッションにより グラフの実⾏行行環境が まるっと独⽴立立する 名前空間のようなもの tf.Session() tf.Session()
  69. ここだけ押さえればTensorFlowが 分かる簡単な例例 • 例例1:⾜足し算 – 演算(operation) • 例例2:カウントアップ – 変数(Variable)

    • 例例3:⼊入⼒力力値をいろいろと変える – プレースホルダー(Placeholder) • 例例4:セッションを使う – セッション(Session) • 例例5:⾼高ランクなテンソルの演算 – テンソル(Tensor)
  70. テンソル(Tensor) のランクを⼤大きくする ここまでの話を 多次元の値に拡張

  71. テンソル ランク どうなる 0 スカラ(要はただの数値) 1 ベクトル(配列列) 2 ⾏行行列列(2次元配列列) 3

    3次元配列列(⾏行行列列に厚みがある感じ) n n次元配列列(イメージできない世界) 要は取り扱うデータ構造のことだと思ってください 今までの話はここ
  72. 多次元版の⾜足し算

  73. ⼊入⼒力力となるテンソルが違うだけ x(定数) y(定数) + 演算がグラフのノードとなる(この場合は加算の演算) tf.add() tf.constant() tf.constant() [[1,2], [1,2]]

    [[3,4], [3,4]] [[4,6], [4,6]]
  74. TensorFlowで押さえるべき基本 は以上です このパラダイムに従って深層(機 械)学習のアルゴリズムを記述す る必要があります

  75. 深層学習について ディープラーニング、深層学習とは、多層構造の ニューラルネットワークを⽤用いた機械学習である。 Wikipediaより … … … … … …

    ⼊入⼒力力層 中間層 (本当はもっといっぱい) 出⼒力力層
  76. ニューラルネットワークの グラフのノード⼀一個⼀一個が TensorFlowの グラフのノードになって…

  77. と、思いがちなので 若若⼲干ややこしい

  78. TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値

    アルゴリズムへの フィードバック 情報の演算 … …
  79. 例例えば中間層が3層の ニューラルネットワークだと こうなる

  80. None
  81. None
  82. TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値

    アルゴリズムへの フィードバック 情報の演算 tf.placeholder() ヘルパー関数 ヘルパー関数 tf.placeholder() tf.variable() … …
  83. TensorFlowでやる場合の深層学習 (正確には機械学習全般) ⼊入⼒力力 途中の演算 アルゴリズム からの出⼒力力 … アルゴリズムの学習結果 理理想的な 出⼒力力値

    アルゴリズムへの フィードバック 情報の演算 tf.placeholder() ヘルパー関数 ヘルパー関数 tf.variable() tf.placeholder() tf.variable() … … つまり、学習と呼ばれて いるプロセスはここを決 めることに相当
  84. 学習とは… ・良良さげなtf.Variableの値を探索索すること 学習済みのモデルとは… ・グラフの構造そのもの ・グラフ構造に含まれるtf.Variableの値 学習済みのモデルの適⽤用とは… ・tf.Variableが決まった後のグラフに データを通すこと 深層(機械)学習は時間かかるけど 学習済みのモデルは⼩小さくなるし、

    新しいデータの適⽤用する時は早い云々… TensorFlowの⽂文脈では…
  85. いざ取り組もうとすると TensorFlowのパラダイムを意識識しつつ 使っているヘルパー関数の 意味を理理解した上で プログラミングする必要があり けっこう敷居が⾼高い

  86. TensorFlowに関する事実(再掲) Pythonをインターフェースとした深層学習に特化し た便便利利ツール Python版だと機械学習のためのヘルパー関数が多数 提供された機械学習と相性の良良いデータフロープロ グラミングのフレームワーク ※当然、深層学習もターゲットにしているので相性 は良良い

  87. Chainerとかと⽐比べて、セッショ ンとかよくわからない概念念が⼀一杯 出てきて使いにくいんですよね そもそも深層学習の⼀一般的な知識識 がないので、どんな⾵風にグラフを 構築したり、ヘルパー関数やパラ メータをどう選択すればいいかよ くわからないんですよね 結果、こういう評価になりがち データサイエンティスト評

    エンジニア評
  88. 逆にGoogleには エンジニアリング⼒力力の⾼高い数学 がバリバリできる超優秀な⽅方が 沢⼭山いらっしゃるということ 実はこれが今⽇日⾔言いた かったことの⼀一つ

  89. それはさておき 当然同じような問題を みんなが抱えているため こういう解決策が出ています

  90. tf.contrib.learn(旧skflow) • Pythonの機械学習ライブラリであるScikit-‐‑‒learn のように関数呼び出しの感覚でTensorFlowを使 いたい!として始まったプロジェクト – グラフなどを意識識しないで済む⾼高レベルAPIを提供 • TensorFlowのV0.8で本体に取り込まれた •

    ⼀一緒に深層学習以外のアルゴリズムも提供されて いる – 線形分類や線形回帰など
  91. 中間層が3層のニューラルネットワークのtf.contrib.learn版

  92. Keras • ニューラルネットワークに関する⾼高レイヤな記 述を⾏行行うことができるPythonのライブラリ – 要は深層学習⽤用のDSL的なもの – 記述スタイルはChainerっぽい • バックエンドとしてTheanoやTensorFlowを選

    択可能なのでTensorFlow専⽤用というわけではな い • TensorFlow特有の知識識は必要ない
  93. 中間層が3層のニューラルネットワークのKearas版

  94. ⼤大規模データも分散処理理で対応で きるし、深層学習の処理理の記述に 集中できます。(想像) 深層学習とかはよくわからないで すが、関数を呼び出す時のパラ メータを⾊色々いじるとなんとなく 動くところまでは持っていけるの で楽ですね。(想像) これなら、こういう評価になる?? データサイエンティスト評(想像)

    エンジニア評(想像)
  95. なんとなくこの流流れは Hadoopのときのトレンド が思い出されるのは 私だけでしょうか?

  96. MapReduceとHive MapReduceを意識識しないし 何より慣れ親しんだSQL ⽣生のMapReduceで 処理理を書くのは⾟辛い データサイエンティスト

  97. TensorFlowとKeras データサイエンティスト TensorFlowを意識識しないで アルゴリズムに集中できる ⽣生のTensorFlowを 書くのは⾟辛い

  98. 深層学習界隈で インターフェースのデ ファクトになるのはなん なんでしょうね・・・?

  99. TensorFlowの 話をするなら外せない CloudMLの話も少し

  100. 出典:https://cloud.google.com/blog/big-‐‑‒data/2016/09/google-‐‑‒cloud-‐‑‒machine-‐‑‒learning-‐‑‒now-‐‑‒open-‐‑‒to-‐‑‒all-‐‑‒with-‐‑‒new-‐‑‒professional-‐‑‒ services-‐‑‒and-‐‑‒education-‐‑‒programs 9/29にPublic  Betaに!

  101. CloudMLでできること • TensorFlowによる学習をクラウド上で実⾏行行できる – GCS経由でのデータのやり取りなどのお作法がある – マシンパワーがたくさん使えるので分散処理理やパラメー タの⾃自動チューニングなどができる! • 学習済みのモデルをサービスとしてクラウド上で

    提供できる – gcloud経由 – RestAPI経由
  102. CloudMLでできること • TensorFlowによる学習をクラウド上で実⾏行行できる – GCS経由でのデータのやり取りなどのお作法がある – マシンパワーがたくさん使えるので分散処理理やパラメー タの⾃自動チューニングなどができる! • 学習済みのモデルをサービスとしてクラウド上で

    提供できる – gcloud経由 – RestAPI経由 TensorFlowのチュートリアルを ⼿手元のPCで動かしてみると、この領領域での GPUやクラウドの重要性が分かります
  103. 出典:http://gadgetm.jp/I0000291 チュートリアルでこうなる

  104. CloudMLも絡めたワークフロー 学習済み モデル ① ①ローカルで動作チェック ②クラウドでドカンと計算 ③学習済みモデルをクラウド上、 サーバー、モバイル上で提供 ② ③

    ③ ③
  105. CloudMLに関しては、今後 ⼤大きな計算資源が必要になる 深層学習が普及していくと かなりのキラーコンテンツ となる可能性がありそうです

  106. 最後にもう⼀一度度 TensorFlow User  Group

  107. None
  108. None
  109. #2のMeetupも計画中

  110. Thank  You!