DevFest Tokyo 2016での発表資料 http://gdg-tokyo.connpass.com/event/38927/
エンジニアとして知っておくと幸せになれる(かも知れない)機械学習とTensorFlowのことby Norhiro Shimoda
View Slide
⾃自⼰己紹介• 下⽥田倫倫⼤大(@rindai87)• データ分析専業の会社で⾊色々やってます。• 職歴的にはエンジニアになりますが、何故かデータサイエンス的な話で露露出させていただく機会が多めです。
• つい⼀一昨⽇日の2016年年10⽉月8⽇日に発⾜足しました(させました)• 先⾏行行して動いているいくつかの勉強会とも合流流予定• CloudMLなどもスコープに活動していく予定TensorFlow User Groupについて公開資料料ではカット
#2のMeetupも計画中
最近、機械学習とか⼈人⼯工知能がものすごいブームですね出典:https://www.coursera.org/learn/machine-‐‑‒learning
⼈人⼯工知能すごい!というイメージ出典:https://www.google.com/selfdrivingcar/where/出典:https://gogameguru.com/i/2016/03/AlphaGo-‐‑‒Lee-‐‑‒Sedol-‐‑‒game-‐‑‒3-‐‑‒game-‐‑‒over.jpg⾃自動運転AlphaGO⼈人が運転するより事故率率率が低いらしい囲碁のプロ棋⼠士に勝利利した
⼈人⼯工知能使えそう!というイメージ出典:https://cloud.google.com/products/超すごいGoogleの⼈人⼯工知能の要素技術をクラウドで簡単に使えそうな雰囲気!!!
結果、こういう流流れができつつあります
クラウドで⼈人⼯工知能関連のAPIあるじゃない↓APIを使ってみる↓ビジネスニーズに微妙にフィットしない↓スクラッチでやるしか↓機械学習むずい\(^o^)/
エンジニアを取り巻く環境機械学習が使えそうな案件⼈人⼯工知能がキーワードになっている新規案件⼈人⼯工知能やりたまえという謎のプレッシャー⼈人⼯工知能や機械学習への興味数年年前まではなかった機械学習や⼈人⼯工知能というキーワードが⾒見見え隠れする今⽇日このごろ
エンジニアも機械学習っぽい話が分かった⽅方が良良さそう??
本⽇日お話すること誰でも⼤大体理理解した気になれる機械学習とTensorFlowの話
まずは機械学習のお話
弊社でもよくある話機械学習とか分析を勉強したいんですよね社内にいるデータサイエンティストに聞いたり⾃自分で勉強すればいいんじゃないですか?それがどうしたら良良いかよくわからないんですよーエンジニア 私
機械学習理理解のstep別イメージ• Step1– 賢いブラックボックスとして使う• Step2– ⽤用途別に呼び出す⼿手法を判断できる• Step3– 得られた結果の判断とパラメータのチューニング• Step4– 機械学習のアルゴリズムを実装できる• etc…
ブラックボックスとしての機械学習アルゴリズムが取り扱えるデータフォーマット機械学習のアルゴリズム何らかの結果⼊入⼒力力⼊入出⼒力力の変換だけしてライブラリ呼び出し
⾔言ってることはわかるけど⾯面⽩白くない著作者:dice-‐‑‒kt 出典:http://free-‐‑‒photos.gatag.net/2014/05/15/180000.html
⽤用途別のアルゴリズムの選択出典:http://scikit-‐‑‒learn.org/stable/tutorial/machine_̲learning_̲map/
やっぱり⾔言ってることはわかるけどやりたかった機械学習ではない著作者:Gwen241 出典:http://free-‐‑‒photos.gatag.net/2014/07/20/060000.html
結果理理解とチューニングアルゴリズムが取り扱えるデータフォーマットへの変換機械学習のアルゴリズム何らかの結果⼊入⼒力力結果の解釈パラメータチューニングアルゴリズムの再選択
出典:http://playground.tensorflow.org/
出典:http://playground.tensorflow.org/アルゴリズムや使っているツールに合わせ、いい感じの結果が出るように⼊入⼒力力を加⼯工する
出典:http://playground.tensorflow.org/結果を⾒見見て今のパラメータで良良いかかどうかを判断
出典:http://playground.tensorflow.org/⾚赤いところを問題に合わせていい感じに調整する
出典:http://playground.tensorflow.org/あー、これじゃだめだ、とそもそも違うアルゴリズムを選ぶこともある
機械学習っぽいけど急に難易易度度が上がりすぎじゃね?出典:http://labaq.com/archives/51849423.html
Step2までだと機械学習やってる感がありません機械学習やってる感が欲しい⼈人はStep3以降降を⽬目指すと良良いかもしれません
Step3以降降に進むには• 数学から逃げずに⽐比較的硬派な本などで地道に知識識を蓄えていきましょう※私もStp2と3の間をウロウロしている1⼈人な気がします…etc…
ちなみに深層学習もこうなの?という疑問に関しては…
いわゆる機械学習アルゴリズムが取り扱えるデータフォーマットへの変換機械学習のアルゴリズム何らかの結果⼊入⼒力力結果の解釈パラメータチューニングアルゴリズムの再選択ここをどれだけ頑張るが結果に⼤大きく影響を与える
深層学習と⾔言われている領領域アルゴリズムが取り扱えるデータフォーマットへの変換機械学習のアルゴリズム何らかの結果⼊入⼒力力結果の解釈パラメータチューニングアルゴリズムの再選択層が深いためパラメータがすごくたくさんある
層がものすごくたくさん各層毎に様々なパラメータが…出典:http://playground.tensorflow.org/
例例:Inception-‐‑‒V3出典:https://research.googleblog.com/2016/03/train-‐‑‒your-‐‑‒own-‐‑‒image-‐‑‒classifier-‐‑‒with.htmlImageNetという画像分類のベンチマークのためにGoogleが発案したモデル
Step4以降降の話には⾏行行かずにTensorFlowのお話
TensorFlowとは?• Googleによって2015年年11⽉月に公開されたオープンソース– Google内部で多数の使⽤用実績があるらしいGoogle Photo画像の⾃自動分類Google 翻訳翻訳の⾃自動学習GmailスパムフィルタOK Google⾳音声認識識
TensorFlowにありがちな勘違いTensorFlowは深層学習に特化したツールである
TensorFlowの正しい認識識TensorFlowはデータフローグラフを利利⽤用した数値計算のためのオープンソースのソフトウェアライブラリであるTensorFlow™ is an open source software library for numerical computation using data flow graphs.TensorFlow公式サイトより
TensorFlowの超基本OPInput OutputOPOPInputグラフを意識識しながら処理理を記述して最後にどびゃっと実⾏行行する
TensorFlowのパラダイム• はじめにテンソルの演算グラフを作る• グラフの実⾏行行単位をセッションという• 定数、変数、プレースホルダーを宣⾔言できる• 作ったグラフはデバイス(CPUやGPU)に展開して実⾏行行する• 分散処理理も可能である
TensorFlowのパラダイム• はじめにテンソルの演算グラフを作る• グラフの実⾏行行単位をセッションという• 定数、変数、プレースホルダーを宣⾔言できる• 作ったグラフはデバイス(CPUやGPU)に展開して実⾏行行する• 分散処理理も可能であるということを、Pythonをインターフェースとして⾏行行っているフレームワーク機械学習に関する便便利利なヘルパー関数がいっぱいあるのがポイント
ここだけ押さえればTensorFlowが分かる簡単な例例• 例例1:⾜足し算– 演算(operation)• 例例2:カウントアップ– 変数(Variable)• 例例3:⼊入⼒力力値をいろいろと変える– プレースホルダー(Placeholder)• 例例4:セッションを使う– セッション(Session)• 例例5:⾼高ランクなテンソルの演算– テンソル(Tensor)
1+2 = 3の⾜足し算
演算(Operation)x(定数)y(定数)+演算がグラフのノードとなる(この場合は加算の演算)tf.add()tf.constant()tf.constant()
演算(Operation)x(定数)y(定数)+演算がグラフのノードとなる(この場合は加算の演算)tf.add()tf.constant()tf.constant()123
カウントアップ
変数(Variable)inc(定数) +cnt(変数)通常のプログラミング⾔言語の変数などと同じように代⼊入可能な箱として変数があるtf.assign()tf.Variable()tf.constant()tf.add()10
変数(Variable)inc(定数) +cnt(変数)tf.assign()tf.Variable()tf.constant()tf.add()101通常のプログラミング⾔言語の変数などと同じように代⼊入可能な箱として変数がある
変数(Variable)inc(定数) +cnt(変数)tf.assign()tf.Variable()tf.constant()tf.add()112通常のプログラミング⾔言語の変数などと同じように代⼊入可能な箱として変数がある
変数(Variable)inc(定数) +cnt(変数)tf.assign()tf.Variable()tf.constant()tf.add()123通常のプログラミング⾔言語の変数などと同じように代⼊入可能な箱として変数がある
いろんな値を⼊入⼒力力する
プレースホルダー(Placeholder)y(プレースホルダ)x(定数) +tf.constant()tf.add()tf.placeholder()あらかじめ箱を作っておいて実⾏行行時に好きな値を⼊入⼒力力させる1
プレースホルダー(Placeholder)y(プレースホルダ)x(定数) +tf.constant()tf.add()tf.placeholder()feed_̲dict11 2あらかじめ箱を作っておいて実⾏行行時に好きな値を⼊入⼒力力させる
プレースホルダー(Placeholder)y(プレースホルダ)x(定数) +tf.constant()tf.add()tf.placeholder()feed_̲dict314あらかじめ箱を作っておいて実⾏行行時に好きな値を⼊入⼒力力させる
実⾏行行環境を分ける
セッション1(定数) +cnt(変数)tf.assign()tf.Variable()tf.constant()tf.add()1(定数) +cnt(変数)tf.assign()tf.Variable()tf.constant() tf.add()セッションによりグラフの実⾏行行環境がまるっと独⽴立立する名前空間のようなものtf.Session()tf.Session()
テンソル(Tensor)のランクを⼤大きくするここまでの話を多次元の値に拡張
テンソルランク どうなる0 スカラ(要はただの数値)1 ベクトル(配列列)2 ⾏行行列列(2次元配列列)3 3次元配列列(⾏行行列列に厚みがある感じ)n n次元配列列(イメージできない世界)要は取り扱うデータ構造のことだと思ってください今までの話はここ
多次元版の⾜足し算
⼊入⼒力力となるテンソルが違うだけx(定数)y(定数)+演算がグラフのノードとなる(この場合は加算の演算)tf.add()tf.constant()tf.constant()[[1,2],[1,2]][[3,4],[3,4]][[4,6],[4,6]]
TensorFlowで押さえるべき基本は以上ですこのパラダイムに従って深層(機械)学習のアルゴリズムを記述する必要があります
深層学習についてディープラーニング、深層学習とは、多層構造のニューラルネットワークを⽤用いた機械学習である。Wikipediaより………………⼊入⼒力力層中間層(本当はもっといっぱい) 出⼒力力層
ニューラルネットワークのグラフのノード⼀一個⼀一個がTensorFlowのグラフのノードになって…
と、思いがちなので若若⼲干ややこしい
TensorFlowでやる場合の深層学習(正確には機械学習全般)⼊入⼒力力途中の演算アルゴリズムからの出⼒力力…アルゴリズムの学習結果理理想的な出⼒力力値アルゴリズムへのフィードバック情報の演算……
例例えば中間層が3層のニューラルネットワークだとこうなる
TensorFlowでやる場合の深層学習(正確には機械学習全般)⼊入⼒力力途中の演算アルゴリズムからの出⼒力力…アルゴリズムの学習結果理理想的な出⼒力力値アルゴリズムへのフィードバック情報の演算tf.placeholder()ヘルパー関数ヘルパー関数tf.placeholder()tf.variable()……
TensorFlowでやる場合の深層学習(正確には機械学習全般)⼊入⼒力力途中の演算アルゴリズムからの出⼒力力…アルゴリズムの学習結果理理想的な出⼒力力値アルゴリズムへのフィードバック情報の演算tf.placeholder()ヘルパー関数ヘルパー関数tf.variable() tf.placeholder()tf.variable()……つまり、学習と呼ばれているプロセスはここを決めることに相当
学習とは…・良良さげなtf.Variableの値を探索索すること学習済みのモデルとは…・グラフの構造そのもの・グラフ構造に含まれるtf.Variableの値学習済みのモデルの適⽤用とは…・tf.Variableが決まった後のグラフにデータを通すこと深層(機械)学習は時間かかるけど学習済みのモデルは⼩小さくなるし、新しいデータの適⽤用する時は早い云々…TensorFlowの⽂文脈では…
いざ取り組もうとするとTensorFlowのパラダイムを意識識しつつ使っているヘルパー関数の意味を理理解した上でプログラミングする必要がありけっこう敷居が⾼高い
TensorFlowに関する事実(再掲)Pythonをインターフェースとした深層学習に特化した便便利利ツールPython版だと機械学習のためのヘルパー関数が多数提供された機械学習と相性の良良いデータフロープログラミングのフレームワーク※当然、深層学習もターゲットにしているので相性は良良い
Chainerとかと⽐比べて、セッションとかよくわからない概念念が⼀一杯出てきて使いにくいんですよねそもそも深層学習の⼀一般的な知識識がないので、どんな⾵風にグラフを構築したり、ヘルパー関数やパラメータをどう選択すればいいかよくわからないんですよね結果、こういう評価になりがちデータサイエンティスト評エンジニア評
逆にGoogleにはエンジニアリング⼒力力の⾼高い数学がバリバリできる超優秀な⽅方が沢⼭山いらっしゃるということ実はこれが今⽇日⾔言いたかったことの⼀一つ
それはさておき当然同じような問題をみんなが抱えているためこういう解決策が出ています
tf.contrib.learn(旧skflow)• Pythonの機械学習ライブラリであるScikit-‐‑‒learnのように関数呼び出しの感覚でTensorFlowを使いたい!として始まったプロジェクト– グラフなどを意識識しないで済む⾼高レベルAPIを提供• TensorFlowのV0.8で本体に取り込まれた• ⼀一緒に深層学習以外のアルゴリズムも提供されている– 線形分類や線形回帰など
中間層が3層のニューラルネットワークのtf.contrib.learn版
Keras• ニューラルネットワークに関する⾼高レイヤな記述を⾏行行うことができるPythonのライブラリ– 要は深層学習⽤用のDSL的なもの– 記述スタイルはChainerっぽい• バックエンドとしてTheanoやTensorFlowを選択可能なのでTensorFlow専⽤用というわけではない• TensorFlow特有の知識識は必要ない
中間層が3層のニューラルネットワークのKearas版
⼤大規模データも分散処理理で対応できるし、深層学習の処理理の記述に集中できます。(想像)深層学習とかはよくわからないですが、関数を呼び出す時のパラメータを⾊色々いじるとなんとなく動くところまでは持っていけるので楽ですね。(想像)これなら、こういう評価になる??データサイエンティスト評(想像)エンジニア評(想像)
なんとなくこの流流れはHadoopのときのトレンドが思い出されるのは私だけでしょうか?
MapReduceとHiveMapReduceを意識識しないし何より慣れ親しんだSQL⽣生のMapReduceで処理理を書くのは⾟辛いデータサイエンティスト
TensorFlowとKerasデータサイエンティストTensorFlowを意識識しないでアルゴリズムに集中できる⽣生のTensorFlowを書くのは⾟辛い
深層学習界隈でインターフェースのデファクトになるのはなんなんでしょうね・・・?
TensorFlowの話をするなら外せないCloudMLの話も少し
出典:https://cloud.google.com/blog/big-‐‑‒data/2016/09/google-‐‑‒cloud-‐‑‒machine-‐‑‒learning-‐‑‒now-‐‑‒open-‐‑‒to-‐‑‒all-‐‑‒with-‐‑‒new-‐‑‒professional-‐‑‒services-‐‑‒and-‐‑‒education-‐‑‒programs9/29にPublic Betaに!
CloudMLでできること• TensorFlowによる学習をクラウド上で実⾏行行できる– GCS経由でのデータのやり取りなどのお作法がある– マシンパワーがたくさん使えるので分散処理理やパラメータの⾃自動チューニングなどができる!• 学習済みのモデルをサービスとしてクラウド上で提供できる– gcloud経由– RestAPI経由
CloudMLでできること• TensorFlowによる学習をクラウド上で実⾏行行できる– GCS経由でのデータのやり取りなどのお作法がある– マシンパワーがたくさん使えるので分散処理理やパラメータの⾃自動チューニングなどができる!• 学習済みのモデルをサービスとしてクラウド上で提供できる– gcloud経由– RestAPI経由TensorFlowのチュートリアルを⼿手元のPCで動かしてみると、この領領域でのGPUやクラウドの重要性が分かります
出典:http://gadgetm.jp/I0000291チュートリアルでこうなる
CloudMLも絡めたワークフロー学習済みモデル①①ローカルで動作チェック②クラウドでドカンと計算③学習済みモデルをクラウド上、サーバー、モバイル上で提供②③③③
CloudMLに関しては、今後⼤大きな計算資源が必要になる深層学習が普及していくとかなりのキラーコンテンツとなる可能性がありそうです
最後にもう⼀一度度TensorFlow User Group
Thank You!