SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
「TensorFlow Tutorialの数学的背景」クイックツアー
Ver1.1 中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
「TensorFlow Tutorialの数学的背景」
クイックツアー(パート1)
Open Cloud Campus
2
「TensorFlow Tutorialの数学的背景」クイックツアー
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
好評発売中!
「TensorFlow Tutorialの数学的背景」クイックツアー
「TensorFlow Tutorialの数学的背景」とは?
Open Cloud Campus
4
「TensorFlow Tutorialの数学的背景」クイックツアー
「TensorFlow Tutorialの数学的背景」シリーズ
http://enakai00.hatenablog.com/entry/2016/02/29/121321
Open Cloud Campus
5
「TensorFlow Tutorialの数学的背景」クイックツアー
このシリーズを書いた背景
 TensorFlow Tutorials
– 典型的なニューラルネットワーク(NN)のTensorFlowによるサンプル実装を解説したド
キュメント集
• https://www.tensorflow.org/versions/master/tutorials/index.html
– 例題の並び順が秀逸で、例題の中身を順番に勉強することで、CNNが段階的に理解できる
ようになっている
– ただし、コードの解説が中心で、理論的解説はやや軽め
 参考:CNN(Convolutional Neural Network)
– 右図のような構造を持つ、画像認識に特化したニューラルネット
ワーク
– 画像の判別問題で高い性能を発揮することが知られている
– Google Vision APIの基礎となる技術!
Tutorialの流れに沿って、NNの理論解説をしていけば、
ちょっとイケてるCNNの学習コースができるはず!
Open Cloud Campus
6
「TensorFlow Tutorialの数学的背景」クイックツアー
TensorFlowを使ってNNを学習するメリット
 前提となる数学知識の敷居が(ほんのちょっとだけ)下がります!
– 例:Back-propagationによるパラメータ最適化計算
• 機械学習では、「ある関数を最小にするパラメータ値を求める」という処理を定番で行います。
この処理を実現するアルゴリズムを導出するには、わりと高度な数学知識が必要となります。
• TensorFlowでは、このような最適化アルゴリズムはライブラリに組み込まれているので、「何を
最適化しているか」だけ理解しておけば、「どのように最適化するのか」は厳密に理解しなくて
も大丈夫です。
Open Cloud Campus
7
「TensorFlow Tutorialの数学的背景」クイックツアー
全体構成
 CNNを構成する個々のパーツの役割を段階的に学んでいきます。
No.1 〜 No.2: Softmax関数による多項分類器の仕組みを解説
No.3 〜 No.4 : 1層だけの最も単純なNNを解説
No.5: NNを多段にする目的(メリット)を解説
No.6〜7: 「畳込みフィルター」の仕組みと役割を解説
No.8: 「畳込みフィルター」を多段化して識別精度を向上
「TensorFlow Tutorialの数学的背景」クイックツアー
No.1〜No.2のダイジェスト
Open Cloud Campus
9
「TensorFlow Tutorialの数学的背景」クイックツアー
No.1:MNIST For ML Beginners(その1)
 ロジスティック回帰とは?
– 図のように直線的な境界でデータを分類する手法
(データが3次元の場合は「平面」による境界、4
次元以上の場合は「超平面」による分類)。
– 最適に分類する直線の方向をトレーニングデータ
から学習します。
– 右図の例では、青色のデータでトレーニングした
結果、赤色の直線が得られています。赤色のテス
トデータに対して、(あくまで偶然ですが)100%
の正解率を達成しています。
 ロジスティック回帰による「二項分類器」を解説しています。
 二項分類器とは?
– 「犬」か「猫」か「車」か「うまい棒」か「ガリガリ君」か・・・という多数の候補から判別するの
はややこしいので、まずは、「A」か「B」かという2種類の判別を行う仕組み
– 例として、図のような平面上のデータに対して、○か✕かを判定するサンプルを実装
Open Cloud Campus
10
「TensorFlow Tutorialの数学的背景」クイックツアー
No.1:MNIST For ML Beginners(その1)
 ロジスティック回帰の中身
– 分割線を一次関数で定義します。
•    :分割線上の点
•        :分割線の両側の点
– ロジスティック関数で、 f の値を「○と判断する確率」
に変換します。
– 「トレーニングデータ全体に対して正解を与える確率」
を最大化するようにパラメータ      を最適化し
ます(最尤推定法)。
Open Cloud Campus
11
「TensorFlow Tutorialの数学的背景」クイックツアー
No.1:MNIST For ML Beginners(その1)
 数学的に計算するとこんな感じ
– n 番目のトレーニングデータを        とします。(○の時は    、✕の時は    )
–     の時、正解する確率は、
–     の時、正解する確率は、
– これらを1つにまとめると次のように書けます。
– したがって、すべてのトレーニングデータに正解する確率は、次式の通り。
– この値ができるだけ大きくなるように、パラメーター      を最適化すればOK!
※最適化のアルゴリズムは、TensorFlowが知っています。
Open Cloud Campus
12
「TensorFlow Tutorialの数学的背景」クイックツアー
No.2:MNIST For ML Beginners(その2)
 線形多項分類器の中身
– 例として、平面上のデータを3種類に分割する場合を考え
ます。この場合は、3種類の一次関数を用意します。
– この中で最も値が大きい物に分類すると、右図のように
直線で、3つの領域に平面が分割されます。
 ここでは、ソフトマックス関数による「線形多項分類器」を解説しています。
 線形多項分類器とは?
– 「犬」か「猫」か「車」か「うまい棒」か「ガリガリ君」か・・・という多数の候補からの判別を行
う仕組みです。
– 特に、直線/平面/超平面の境界線でデータを分類します。
Open Cloud Campus
13
「TensorFlow Tutorialの数学的背景」クイックツアー
No.2:MNIST For ML Beginners(その2)
 ハードな分類からソフトな分類(確率)への変換
–     の値によって、「各種別に分類する確率」を与えるようにしたい
– 次のソフトマックス関数でOK
 ※                    が成立しています。
 トレーニングデータに対するパラメータの最適化
– 個々のトレーニングデータついて上記の確率で種別を判定していった結果、「すべてに正解する確
率」を最大化するようにパラメータを最適化します。
※ 内容的には同じことですが、「上記の確率でデータを生成した結果、トレーニングセットと同じ
 データが得られる確率」を最大化する、という事もできます。
Open Cloud Campus
14
「TensorFlow Tutorialの数学的背景」クイックツアー
手書き数字分類器の実装
 ここまで理解できると、有名(?)な「MNIST手書き数字」の分類器をTensorFlowで実装す
ることができるようになります!
 「MNIST手書き数字」とは?
– 図のような28x28ピクセル(合計784ピクセル)の手書き数字のデータセット
– 各ピクセルは、色の濃度を示す数値が振られている
 先ほどの話と何の関係があるの?
– 各画像のデータは、濃度の数値を横一列に並べると「784
次元ベクトル」、つまり「784次元空間上の1つの点」と
見なせる
– したがって、784次元空間を「0」〜「9」の10種類の領
域に分割すればよい
※ 同じ数字の画像は、784次元空間上で近い場所に集まる
 という暗黙の想定をおいています。
Open Cloud Campus
15
「TensorFlow Tutorialの数学的背景」クイックツアー
手書き数字分類器の実装
 具体的な計算は次の通りです。
– 「0」〜「9」に分類するために10個の一次関数       を定義します。
– それぞれに分類される確率をソフトマックス関数で計算します。
– この時、n 番目のトレーニングデータの「正解ラベル」を次のようなベクトルで表現すると・・・
– この確率を用いてトレーニングデータを予測した際に、n 番目のデータに正解を与える確率は次式に
なります。
正解を「r」として、r+1 番目の値のみが1
Open Cloud Campus
16
「TensorFlow Tutorialの数学的背景」クイックツアー
手書き数字分類器の実装
– したがって、すべてのトレーニングセットに正解する確率は次式の通り。
– これを最大にするようにパラメータ(最初の一次関数の係数 w, b)を最適化すればOK!
※未知の手書き数字を判別する際は、ソフトマックス関数による確率が最大のものと判定します。
– 実際にTensorFlowに最適化させる際は、(内部的な)計算を簡単にするために、「Pの対数の符号違
い」(ロス関数)を与えて、これを最小にするパラメータを探していきます。
Open Cloud Campus
17
「TensorFlow Tutorialの数学的背景」クイックツアー
サンプルコードの解説
 Tutorialのサンプルコードを見ると、前述の計算式が、ほぼそのままコード化されているこ
とがわかります。
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py
# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# Train
tf.initialize_all_variables().run()
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs, y_: batch_ys})
# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))
トレーニングデータ          を入れる箱
トレーニングデータ             を入れる箱
「勾配降下法」を用いて
パラメータを最適化
Open Cloud Campus
18
「TensorFlow Tutorialの数学的背景」クイックツアー
サンプルコードの解説
 実行結果・・・。
 正答率をさらに上げるには何が必要・・・?
# time python mnist_softmax.py
Extracting /tmp/data/train-images-idx3-ubyte.gz
Extracting /tmp/data/train-labels-idx1-ubyte.gz
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 16
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 16
0.9135
real 0m5.911s
user 0m7.010s
sys 0m4.650s
テストセットに対して91%の正答率
Open Cloud Campus
19
「TensorFlow Tutorialの数学的背景」クイックツアー
続きはまた次回!
「TensorFlow Tutorialの数学的背景」クイックツアー
「TensorFlow Tutorialの数
学的背景」クイックツアー
20
おまけ: Jupyterの紹介
Open Cloud Campus
21
「TensorFlow Tutorialの数学的背景」クイックツアー
Jupyterとは
 Python(IPython)による対話的なデータ分析処理をWebブラウザ上の「ノートブック」で
実施するツール
– Markdownで記述した文章とコード、実行結果が記録されていきます。
– ノートブック上のコードは、自由に修正して再実行可能
⇒ データ分析コードとその説明をノートブックにまとめておけば、「実行できる教科書」が実現!
Open Cloud Campus
22
「TensorFlow Tutorialの数学的背景」クイックツアー
JupyterからTensorFlowを利用する方法
 TensorFlowとJupyterを導入したサーバーを用意する
– 環境セットアップ済みのDockerイメージを公開しています。
• JupyterでTensorFlowが使えるDockerイメージ
• http://enakai00.hatenablog.com/entry/2016/03/28/131157
 Google Cloud Datalabを利用する
– GCEのVMインスタンスで環境を自動セットアップ
– TensorFlowに加えて、BigQueryなども実行可能
「TensorFlow Tutorialの数学的背景」クイックツアー
中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
TensorFlowで楽しく
機械学習を学びましょう!

Más contenido relacionado

La actualidad más candente

仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎
Etsuji Nakai
 

La actualidad más candente (20)

TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
 
ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法
 
Dropout Distillation
Dropout DistillationDropout Distillation
Dropout Distillation
 
TensorFlowで逆強化学習
TensorFlowで逆強化学習TensorFlowで逆強化学習
TensorFlowで逆強化学習
 
Meta-Learning with Memory Augmented Neural Network
Meta-Learning with Memory Augmented Neural NetworkMeta-Learning with Memory Augmented Neural Network
Meta-Learning with Memory Augmented Neural Network
 
TensorFlow 入門
TensorFlow 入門TensorFlow 入門
TensorFlow 入門
 
輪読資料 Xception: Deep Learning with Depthwise Separable Convolutions
輪読資料 Xception: Deep Learning with Depthwise Separable Convolutions輪読資料 Xception: Deep Learning with Depthwise Separable Convolutions
輪読資料 Xception: Deep Learning with Depthwise Separable Convolutions
 
[DL輪読会]Xception: Deep Learning with Depthwise Separable Convolutions
[DL輪読会]Xception: Deep Learning with Depthwise Separable Convolutions[DL輪読会]Xception: Deep Learning with Depthwise Separable Convolutions
[DL輪読会]Xception: Deep Learning with Depthwise Separable Convolutions
 
ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)
 
20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来
20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来
20171212 gtc pfn海野裕也_chainerで加速する深層学習とフレームワークの未来
 
仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎
 
Chainer meetup2016 03-19pub
Chainer meetup2016 03-19pubChainer meetup2016 03-19pub
Chainer meetup2016 03-19pub
 
進化するChainer
進化するChainer進化するChainer
進化するChainer
 
Getting Started with Deep Learning using Scala
Getting Started with Deep Learning using ScalaGetting Started with Deep Learning using Scala
Getting Started with Deep Learning using Scala
 
20150930
2015093020150930
20150930
 
Learning to forget continual prediction with lstm
Learning to forget continual prediction with lstmLearning to forget continual prediction with lstm
Learning to forget continual prediction with lstm
 
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
 
[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計
[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計
[量子コンピューター勉強会資料] マヨラナ粒子によるスケーラブルな量子コンピューターの設計
 
Image net classification with Deep Convolutional Neural Networks
Image net classification with Deep Convolutional Neural NetworksImage net classification with Deep Convolutional Neural Networks
Image net classification with Deep Convolutional Neural Networks
 

Similar a 「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)

もう学習は機械に任せたい2 -ディープラーニングの逆襲-
もう学習は機械に任せたい2 -ディープラーニングの逆襲-もう学習は機械に任せたい2 -ディープラーニングの逆襲-
もう学習は機械に任せたい2 -ディープラーニングの逆襲-
Kosuke Sugahara
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Yuya Unno
 

Similar a 「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1) (20)

いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成
 
Proof summit2014mizar
Proof summit2014mizarProof summit2014mizar
Proof summit2014mizar
 
HTML5 Conference LT TensorFlow
HTML5 Conference LT TensorFlowHTML5 Conference LT TensorFlow
HTML5 Conference LT TensorFlow
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
もう学習は機械に任せたい2 -ディープラーニングの逆襲-
もう学習は機械に任せたい2 -ディープラーニングの逆襲-もう学習は機械に任せたい2 -ディープラーニングの逆襲-
もう学習は機械に任せたい2 -ディープラーニングの逆襲-
 
データサイエンス概論第一=2-1 データ間の距離と類似度
データサイエンス概論第一=2-1 データ間の距離と類似度データサイエンス概論第一=2-1 データ間の距離と類似度
データサイエンス概論第一=2-1 データ間の距離と類似度
 
分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要分散ストレージソフトウェアCeph・アーキテクチャー概要
分散ストレージソフトウェアCeph・アーキテクチャー概要
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
 
Mesh tensorflow
Mesh tensorflowMesh tensorflow
Mesh tensorflow
 
NLP2017 NMT Tutorial
NLP2017 NMT TutorialNLP2017 NMT Tutorial
NLP2017 NMT Tutorial
 
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますAI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
 
Basic deep learning_framework
Basic deep learning_frameworkBasic deep learning_framework
Basic deep learning_framework
 
Dataflow140711
Dataflow140711Dataflow140711
Dataflow140711
 
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座
 
学術情報XML推進協議会 第5回総会・講演会(2016) : XML Scholarly Publishing Association; XSPA
学術情報XML推進協議会 第5回総会・講演会(2016) : XML Scholarly Publishing Association; XSPA学術情報XML推進協議会 第5回総会・講演会(2016) : XML Scholarly Publishing Association; XSPA
学術情報XML推進協議会 第5回総会・講演会(2016) : XML Scholarly Publishing Association; XSPA
 
Combinatorial optimization with graph convolutional networks and guided ver20...
Combinatorial optimization with graph convolutional networks and guided ver20...Combinatorial optimization with graph convolutional networks and guided ver20...
Combinatorial optimization with graph convolutional networks and guided ver20...
 
Combinatorial optimization with graph convolutional networks and guided
Combinatorial optimization with graph convolutional networks and guidedCombinatorial optimization with graph convolutional networks and guided
Combinatorial optimization with graph convolutional networks and guided
 
CG Image Recognition with Deep Learning
CG Image Recognition with Deep LearningCG Image Recognition with Deep Learning
CG Image Recognition with Deep Learning
 

Más de Etsuji Nakai

TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
Etsuji Nakai
 

Más de Etsuji Nakai (20)

PRML11.2-11.3
PRML11.2-11.3PRML11.2-11.3
PRML11.2-11.3
 
「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlow
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービス
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモ
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English Learning
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with Jupyter
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginners
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
PRML7.2
PRML7.2PRML7.2
PRML7.2
 
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShiftExploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
 
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
 

「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)

  • 1. 「TensorFlow Tutorialの数学的背景」クイックツアー Ver1.1 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス 「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
  • 2. Open Cloud Campus 2 「TensorFlow Tutorialの数学的背景」クイックツアー 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 好評発売中!
  • 4. Open Cloud Campus 4 「TensorFlow Tutorialの数学的背景」クイックツアー 「TensorFlow Tutorialの数学的背景」シリーズ http://enakai00.hatenablog.com/entry/2016/02/29/121321
  • 5. Open Cloud Campus 5 「TensorFlow Tutorialの数学的背景」クイックツアー このシリーズを書いた背景  TensorFlow Tutorials – 典型的なニューラルネットワーク(NN)のTensorFlowによるサンプル実装を解説したド キュメント集 • https://www.tensorflow.org/versions/master/tutorials/index.html – 例題の並び順が秀逸で、例題の中身を順番に勉強することで、CNNが段階的に理解できる ようになっている – ただし、コードの解説が中心で、理論的解説はやや軽め  参考:CNN(Convolutional Neural Network) – 右図のような構造を持つ、画像認識に特化したニューラルネット ワーク – 画像の判別問題で高い性能を発揮することが知られている – Google Vision APIの基礎となる技術! Tutorialの流れに沿って、NNの理論解説をしていけば、 ちょっとイケてるCNNの学習コースができるはず!
  • 6. Open Cloud Campus 6 「TensorFlow Tutorialの数学的背景」クイックツアー TensorFlowを使ってNNを学習するメリット  前提となる数学知識の敷居が(ほんのちょっとだけ)下がります! – 例:Back-propagationによるパラメータ最適化計算 • 機械学習では、「ある関数を最小にするパラメータ値を求める」という処理を定番で行います。 この処理を実現するアルゴリズムを導出するには、わりと高度な数学知識が必要となります。 • TensorFlowでは、このような最適化アルゴリズムはライブラリに組み込まれているので、「何を 最適化しているか」だけ理解しておけば、「どのように最適化するのか」は厳密に理解しなくて も大丈夫です。
  • 7. Open Cloud Campus 7 「TensorFlow Tutorialの数学的背景」クイックツアー 全体構成  CNNを構成する個々のパーツの役割を段階的に学んでいきます。 No.1 〜 No.2: Softmax関数による多項分類器の仕組みを解説 No.3 〜 No.4 : 1層だけの最も単純なNNを解説 No.5: NNを多段にする目的(メリット)を解説 No.6〜7: 「畳込みフィルター」の仕組みと役割を解説 No.8: 「畳込みフィルター」を多段化して識別精度を向上
  • 9. Open Cloud Campus 9 「TensorFlow Tutorialの数学的背景」クイックツアー No.1:MNIST For ML Beginners(その1)  ロジスティック回帰とは? – 図のように直線的な境界でデータを分類する手法 (データが3次元の場合は「平面」による境界、4 次元以上の場合は「超平面」による分類)。 – 最適に分類する直線の方向をトレーニングデータ から学習します。 – 右図の例では、青色のデータでトレーニングした 結果、赤色の直線が得られています。赤色のテス トデータに対して、(あくまで偶然ですが)100% の正解率を達成しています。  ロジスティック回帰による「二項分類器」を解説しています。  二項分類器とは? – 「犬」か「猫」か「車」か「うまい棒」か「ガリガリ君」か・・・という多数の候補から判別するの はややこしいので、まずは、「A」か「B」かという2種類の判別を行う仕組み – 例として、図のような平面上のデータに対して、○か✕かを判定するサンプルを実装
  • 10. Open Cloud Campus 10 「TensorFlow Tutorialの数学的背景」クイックツアー No.1:MNIST For ML Beginners(その1)  ロジスティック回帰の中身 – 分割線を一次関数で定義します。 •    :分割線上の点 •        :分割線の両側の点 – ロジスティック関数で、 f の値を「○と判断する確率」 に変換します。 – 「トレーニングデータ全体に対して正解を与える確率」 を最大化するようにパラメータ      を最適化し ます(最尤推定法)。
  • 11. Open Cloud Campus 11 「TensorFlow Tutorialの数学的背景」クイックツアー No.1:MNIST For ML Beginners(その1)  数学的に計算するとこんな感じ – n 番目のトレーニングデータを        とします。(○の時は    、✕の時は    ) –     の時、正解する確率は、 –     の時、正解する確率は、 – これらを1つにまとめると次のように書けます。 – したがって、すべてのトレーニングデータに正解する確率は、次式の通り。 – この値ができるだけ大きくなるように、パラメーター      を最適化すればOK! ※最適化のアルゴリズムは、TensorFlowが知っています。
  • 12. Open Cloud Campus 12 「TensorFlow Tutorialの数学的背景」クイックツアー No.2:MNIST For ML Beginners(その2)  線形多項分類器の中身 – 例として、平面上のデータを3種類に分割する場合を考え ます。この場合は、3種類の一次関数を用意します。 – この中で最も値が大きい物に分類すると、右図のように 直線で、3つの領域に平面が分割されます。  ここでは、ソフトマックス関数による「線形多項分類器」を解説しています。  線形多項分類器とは? – 「犬」か「猫」か「車」か「うまい棒」か「ガリガリ君」か・・・という多数の候補からの判別を行 う仕組みです。 – 特に、直線/平面/超平面の境界線でデータを分類します。
  • 13. Open Cloud Campus 13 「TensorFlow Tutorialの数学的背景」クイックツアー No.2:MNIST For ML Beginners(その2)  ハードな分類からソフトな分類(確率)への変換 –     の値によって、「各種別に分類する確率」を与えるようにしたい – 次のソフトマックス関数でOK  ※                    が成立しています。  トレーニングデータに対するパラメータの最適化 – 個々のトレーニングデータついて上記の確率で種別を判定していった結果、「すべてに正解する確 率」を最大化するようにパラメータを最適化します。 ※ 内容的には同じことですが、「上記の確率でデータを生成した結果、トレーニングセットと同じ  データが得られる確率」を最大化する、という事もできます。
  • 14. Open Cloud Campus 14 「TensorFlow Tutorialの数学的背景」クイックツアー 手書き数字分類器の実装  ここまで理解できると、有名(?)な「MNIST手書き数字」の分類器をTensorFlowで実装す ることができるようになります!  「MNIST手書き数字」とは? – 図のような28x28ピクセル(合計784ピクセル)の手書き数字のデータセット – 各ピクセルは、色の濃度を示す数値が振られている  先ほどの話と何の関係があるの? – 各画像のデータは、濃度の数値を横一列に並べると「784 次元ベクトル」、つまり「784次元空間上の1つの点」と 見なせる – したがって、784次元空間を「0」〜「9」の10種類の領 域に分割すればよい ※ 同じ数字の画像は、784次元空間上で近い場所に集まる  という暗黙の想定をおいています。
  • 15. Open Cloud Campus 15 「TensorFlow Tutorialの数学的背景」クイックツアー 手書き数字分類器の実装  具体的な計算は次の通りです。 – 「0」〜「9」に分類するために10個の一次関数       を定義します。 – それぞれに分類される確率をソフトマックス関数で計算します。 – この時、n 番目のトレーニングデータの「正解ラベル」を次のようなベクトルで表現すると・・・ – この確率を用いてトレーニングデータを予測した際に、n 番目のデータに正解を与える確率は次式に なります。 正解を「r」として、r+1 番目の値のみが1
  • 16. Open Cloud Campus 16 「TensorFlow Tutorialの数学的背景」クイックツアー 手書き数字分類器の実装 – したがって、すべてのトレーニングセットに正解する確率は次式の通り。 – これを最大にするようにパラメータ(最初の一次関数の係数 w, b)を最適化すればOK! ※未知の手書き数字を判別する際は、ソフトマックス関数による確率が最大のものと判定します。 – 実際にTensorFlowに最適化させる際は、(内部的な)計算を簡単にするために、「Pの対数の符号違 い」(ロス関数)を与えて、これを最小にするパラメータを探していきます。
  • 17. Open Cloud Campus 17 「TensorFlow Tutorialの数学的背景」クイックツアー サンプルコードの解説  Tutorialのサンプルコードを見ると、前述の計算式が、ほぼそのままコード化されているこ とがわかります。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py # Create the model x = tf.placeholder(tf.float32, [None, 784]) W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) y = tf.nn.softmax(tf.matmul(x, W) + b) # Define loss and optimizer y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) # Train tf.initialize_all_variables().run() for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) train_step.run({x: batch_xs, y_: batch_ys}) # Test trained model correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels})) トレーニングデータ          を入れる箱 トレーニングデータ             を入れる箱 「勾配降下法」を用いて パラメータを最適化
  • 18. Open Cloud Campus 18 「TensorFlow Tutorialの数学的背景」クイックツアー サンプルコードの解説  実行結果・・・。  正答率をさらに上げるには何が必要・・・? # time python mnist_softmax.py Extracting /tmp/data/train-images-idx3-ubyte.gz Extracting /tmp/data/train-labels-idx1-ubyte.gz Extracting /tmp/data/t10k-images-idx3-ubyte.gz Extracting /tmp/data/t10k-labels-idx1-ubyte.gz I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 16 I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 16 0.9135 real 0m5.911s user 0m7.010s sys 0m4.650s テストセットに対して91%の正答率
  • 19. Open Cloud Campus 19 「TensorFlow Tutorialの数学的背景」クイックツアー 続きはまた次回!
  • 21. Open Cloud Campus 21 「TensorFlow Tutorialの数学的背景」クイックツアー Jupyterとは  Python(IPython)による対話的なデータ分析処理をWebブラウザ上の「ノートブック」で 実施するツール – Markdownで記述した文章とコード、実行結果が記録されていきます。 – ノートブック上のコードは、自由に修正して再実行可能 ⇒ データ分析コードとその説明をノートブックにまとめておけば、「実行できる教科書」が実現!
  • 22. Open Cloud Campus 22 「TensorFlow Tutorialの数学的背景」クイックツアー JupyterからTensorFlowを利用する方法  TensorFlowとJupyterを導入したサーバーを用意する – 環境セットアップ済みのDockerイメージを公開しています。 • JupyterでTensorFlowが使えるDockerイメージ • http://enakai00.hatenablog.com/entry/2016/03/28/131157  Google Cloud Datalabを利用する – GCEのVMインスタンスで環境を自動セットアップ – TensorFlowに加えて、BigQueryなども実行可能