SlideShare a Scribd company logo
「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で楽しく
機械学習を学びましょう!

More Related Content

PDF
TensorFlowで学ぶDQN
PDF
Tensorflow
PDF
TensorFlowによるCNNアーキテクチャ構築
PDF
機械学習ライブラリ : TensorFlow
PPTX
Androidで動かすはじめてのDeepLearning
PDF
Life with jupyter
PPTX
ディープラーニングゼミ TensorFlowで学ぶ理論と実践
PDF
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
TensorFlowで学ぶDQN
Tensorflow
TensorFlowによるCNNアーキテクチャ構築
機械学習ライブラリ : TensorFlow
Androidで動かすはじめてのDeepLearning
Life with jupyter
ディープラーニングゼミ TensorFlowで学ぶ理論と実践
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜

What's hot (20)

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

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

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

More from Etsuji Nakai (20)

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