深層学習・機械学習と
TensorFlow
TFUG Kagoshima
自己紹介
新村 拓也(Takuya Shimmura)
・鹿児島県姶良市出身
・シンギュラリティ株式会社 CTO
・著書「TensorFlowではじめるDeepLearning実装入門」
機械学習とか深層学習
でちょいちょいってやって
よ!いつものお仕事
・・・
お客様のビジネス課題を機械学習などを
駆使してちょいちょいっと解決するお仕事
これから話すこと
• 巷で話題の機械学習、深層学習とは何か?
• よく用いられる深層学習の手法、モデル
• TensorFlowに関する横断的な解説
機械学習とは?
Wikipediaによると・・・
人間が自然に行っている学習能力と同様の機能を
コンピュータで実現しようとする技術・手法のことである。
機械学習とは?
明示的にプログラムしなくても学習する能力を
コンピュータに与える研究分野
by アーサー・サミュエル
機械学習とは?
コンピュータプログラムが、ある種のタスクTと評価尺度Pにおいて、
経験Eから学習するとは、タスクTにおけるその性能をPによって
評価した際に、経験Eによってそれが改善されている場合である。
トム・M・ミッチェル
機械学習とは?
• 推論と正解の誤差を用いてモデルを構成するパラメータを自動更新
するシステム
入力 モデル
部屋の広さ: 80m^2
駅からの距離: 100m
築年数: 3年
階数: 10階 5000万円!
推論 正解
9000万円
誤差
4000万円
モデル更新(学習)
機械学習のモデル
• 機械学習のモデルにもいろいろなものがある
 決定木法
 線形回帰、ロジスティック回帰
 SVM
 ニューラルネットワーク
 K-means,階層型クラスタリング, MeanShift
 pLSI, NMF, LDA
 PFM
 混合ガウス分布
 Lasso回帰、Ridge回帰、Elastic Net
scikit-learn チートシート
ニューラルネットワークとは?
• 形式ニューロンを用いてモデルを構築した機械学習手法
𝑥1
𝑥2
𝑥3
入力 出力 y
𝑤3
𝑏
𝑤2
活性化関数
𝑤1
𝑦 = 𝑓(𝑤1 𝑥1 + 𝑤2 𝑥2 + 𝑤3 𝑥3 + 𝑏)
ニューラルネットワーク
部屋の広さ
80m^2
駅からの距離
100m
築年数
3年
入力層 中間層 出力層
予想価格
5000万
正解価格
9000万
誤差4000万
誤差を元にで学習!
学習対象は重みとバイアス
誤差逆伝播法+確率的勾配降下法
深層学習とは?
• 入力層・中間層1・中間層2・出力層のように4層以上のニューラル
ネットワークで行う学習のこと
多層ニューラルネットワークの問題点
• データ数に対してモデルパラメータが多すぎることによる過学習
• 勾配消失により入力層に近い層が学習できない
• 計算コストが高い
深層学習
• 近年では様々な手法や技術の進歩により多層ニューラルネットワー
クの問題点が解決されている
データセットの充実
GPUを用いた高速演算
研究によって生み出された新手法
畳み込みニューラルネットワーク(CNN)
• 画像のフィルタ処理におけるフィルタの値をニューラルネットワーク
のパラメータとして学習する
http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
様々な画像分類ネットワーク
GoogLeNet
ResNet
SENet
DCGAN
• 画像の生成やスタイル変換を行うことも可能
D
G
Z (noise)
G(Z)X
real
fake
Vanilla GAN
X Y
G F
Z (noise)
G(Z)
Z’ (noise)
G(Z)
Dy
real
fake
real
fake
Dx
Cycle GAN
再帰的ニューラルネットワーク(RNN)
• 時系列を自然に扱えるニューラルネットワーク
翻訳エンジンなどにも採用されている
RNNの手法
h
c
x
U
W
・ 中間層入力(   )
・ 中間層出力(   )
・ 中間状態(   )
の 3 つがそれぞれのゲート を制御
h
c
x
Long Short Term Memory (LSTM)
Attention
Mechanism
Bi-directional RNN
深層強化学習
• Deep Q Network
• A3C
• PPO
AutoML
• ニューラルネットワークの構造をRNN+強化学習で生成
• 現在Google Cloud Platformでα版リリース
TensorFlow入門
TensorFlowとは?
• Googleより2015年11月に公開されたOSS
• 高性能数値演算ライブラリ
• 様々な言語やプラットフォームで動作
• 2018年5月現在v1.8.0
Tensorとは?
• 多次元配列のこと
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
計算グラフ
• 計算過程をノードとエッジによるグラフで表したもの
• ノードが演算処理(Operation)を表す
• エッジがやりとりされる数値(Tensor)を表す
const1 val1
add
定数:4 変数:初期値0
加算の結果
a = tf.constant(4)
b = tf.Variable(0)
add = tf.add(a, b)
・どのTensorがどのオペレーションへの入力である
・出力に対する入力の勾配式
のような、各種メタ情報を保持している。
Why 計算グラフ?
• 自動微分の効率化
• 局所計算ができる
勾配計算のたびに lim
ℎ→0
𝑓 𝑥+ℎ −𝑓(𝑥)
ℎ
をパラメータの数計算する
局所的に微分計算をしておき、それを伝播させることで算出
𝑥 𝑦
𝐸
𝜕𝑦
𝜕𝑥
𝐸
VS
宣言型プログラミング
• Define and Runともいう
• 対義語は命令型プログラミング(Define by Run)
命令型 宣言型
処理の記述は計算グラフを構築しているだけであり計算は行わない。
5
出力
Why 宣言型?
• 計算の最適化
• こういうモデルにしてということだけ記述して、最適化はTFにお任せ
• 分散処理も記述しやすい
• 欠点
• 動的なモデルが組めない
• デバッグが困難
Eager Execution
• 以下のように書くだけで命令型になる
パフォーマンスは若干悪くなる
まだ全部のAPIが対応しているわけではない
例)
5
出力
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
様々なAPI
• メリット:ニューラルネットワーク以外にも様々な計算が行える
• tf.distributions・・・確率分布を用いた計算
• tf.spectral・・・フーリエ変換
• tf.contrib.learn.SVM・・・サポートベクトルマシーン
• デメリット:同じようなAPIがありどれを使えばいいのか分からない
• tf.layer.conv2d と tf.contrib.layers.conv2d
• TFのWrapperの「Keras」 と tf.keras
API概要
一番低レベルなAPI
tf.nn パッケージなど
低レベルなAPIで書くと
• 一つの層を書くだけでこのような感じ
低レベルなAPIで書くと
ソースコード全文
全てのパラメータや計算処理を記述するため、詳細なloggingや
モデル構築が可能。
ただし書いてて辛い
TFが出てきた当初はこれしかなかった!
API概要
すこし高レベルなAPI
tf.layers パッケージ
tf.layersパッケージで書くと
• 一つの層は1行で記述可能
しかし重みやバイアスの情報が消えているため、重みのログを取る場合などに
工夫する必要がある。
低レベルの場合
API概要
高レベルなAPI
Keras, tf.keras パッケージ
tf.kerasで書くと
• 1層を1行で書くのはもちろん訓練プロセスや実行も1行で記述可能
API概要
もっとも高レベルなAPI
Estimatorパッケージ
Estimatorパッケージで
• ネットワーク構築も1ステップで可能
4層で、中間層のユニット10, 10, クラス数3
EstimatorはPre-made EstimatorとCustomEstimatorの2種類
どのAPIを使えばいいの?
• Estimator
• 簡単なモデルですぐに試したい
• GCPのCloudMLと連携
• Keras
• 標準的なログや成果物を出力して楽に開発
• tf.layers
• 訓練自体の制御を行いたい(ログの選定など)
• 低レベルAPI
• 独自レイヤー開発
その他のAPI
• DatasetAPI(tf.data)
• データセットの整形、バッチ化をサポートしてくれる超便利API
• Contrib (tf.contrib)
• 超便利だけどバグとかあったらゴメンね!
• ちゃんと確認したら正式版に移行するかもしれないAPI群
訓練
バッ チ処理
キュ ーに追加
データ 取得
整形・ バッ チ作成
訓練用のスレッ ド Qu eu e( 待ち行列) データ セッ ト 作成用のスレッ ド
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
TFX(TensorFlow Extended)
• MLはただ学習する以外にもやることが多い
Configuration
Data Collection
Data
Verification
Feature Extraction
Process Management
Tools
Analysis Tools
Machine
Resource
Management
Serving
Infrastructure
Monitoring
ML
Code
TensorFlow Serving
TensorFlow Transform
TensorFlow Model Analysis
TFを基盤として周辺機能開発をサポート
TensorBoard
• Webベースの各種ログ可視化ツール
デバッグや結果の考察に利用
することにより機械学習のイテ
レーションをサポートする非常に
強力なツール
TensorFlowHub
• 訓練済みモデルを提供するプラットフォーム
簡単に様々なモデルをダウンロードしてきて、実行・転移学習などが可能。
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
様々な言語で動作
Go
様々なデバイスで動作
iOS
CPU GPU
Android
Cloud TPU
Embedded
Devices
TensorFlow Lite/Mobile
• スマホ上で動作するような軽量なモデル構築プラットフォーム
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
Distributed TensorFlow
モデルパラレル
GPU1 で実行 GPU2 で実行
データパラレル
• 複数のサーバー、複数のデバイスで分散して処理を行うことが可能。
TensorFlowの特徴
• 計算グラフを用いた宣言型プログラミング(命令型もサポート)
• 低レベルなものから高レベルなものまで様々なAPIを提供
• 充実したエコシステム
• 様々な言語やデバイスで動作
• 大規模分散処理のための様々な機能
• その知名度がために圧倒的な利用ユーザ数、活発なコミュニティ
活発なオープンソースコミュニティ
開発速度の速さ
1,400+
開発に貢献した人数
200+
平均コミット数/週
エコシステムの充実度
8,000+
Stack Overflow の質問に対する回答数
100+
コミュニティが報告した GitHub
issues に対するレスポンス数/週
ユーザ数の多さ
98,000+
GitHub のスターの数
33,000+
「TensorFlow」でヒットする
GitHub レポジトリの数
TFUGとは?
TFUGはTensorFlow User Groupの
略でTensorFlowのユーザーグルー
プです。
2016年10月に立ち上がり、活動を
続けています
TFUG
可能な限り過去のスライドは公開!
Youtubeによるライブ配信もやってます!
分科会/地域TFUG
分科会 地域TFUG
● 論文を読む会
● ハード部
● モバイル部
● Aizu
● Utsunomiya
● Kansai
その他にも初心者向けハンズオンやアイディアソン、ハッカソンも開催
まとめ
• TensorFlowは開発が盛んなオープンソースプロジェクト
• TensorFlowの目指すところ
• Googleと同じレベルの機械学習を実現できるツール
• 大規模データを使った分散学習への対応
• 研究開発に使えるレベルの柔軟性
• プロダクションへの投入
• 様々なデバイスで動作/ 強力な可視化ツール/ 様々なレベルのAPI
• 皆さんもどんどん使ってTFUG鹿児島を盛り上げていきましょう!

tfug-kagoshima