Slide 1

Slide 1 text

ゼロから作るオトナの DeepLearning 第2回 実践編 2017/3/1 矢野高宏

Slide 2

Slide 2 text

DeepLearningでやりたいこと • ある入力に対してある出力がほしい アヤメのデータ (花弁の広さ、長さ) アヤメの種類  セトサ?  バージカラー?  バージニカ? 顔画像 100人中の誰に似てる? とある人の 生体データ その人が糖尿病かどうか

Slide 3

Slide 3 text

今日用いるデータセット • Pima Indiain Diabetes – ある生体データを持ったが糖尿病であるかどうか? – 2値分類問題 • Iris Data Set – SepalとPetalという2種類の花弁の長さ、幅からアヤメの種類 を判別分類する – 多値分類問題 • Housing Data Set – 犯罪率などのその土地の様々なデータから、その土地の地価 を予測する – 回帰問題(数値予測問題)

Slide 4

Slide 4 text

DeepLearningのライブラリ Kerasを使おう • Kerasとは今最も人気のDeepLearningのライブラリの1つ • Tensorflowをバックエンドにして動く • 日本語のドキュメントある https://keras.io/ja/ • 【速報】KerasがTensorFlowにとりこまれた(2017.2.15) – http://forest.watch.impress.co.jp/docs/news/1044528.html 作者のCholletさん

Slide 5

Slide 5 text

01pima.py

Slide 6

Slide 6 text

Kerasの定石 30秒で入門 • プログラミングの手順は決まっているので覚える 1.学習用のデータを作る(入力データと正解データ) 2.モデルを作る model = Sequential() 3.モデルに層を積む model.add(Dense(...)) 4.モデルを初期化 model.compile(...) 5.モデルを学習 model.fit(...) 6.モデルを評価 model.evaluate() (オプション) 7.モデルを利用 model.predict() (オプション)

Slide 7

Slide 7 text

大体こうやっておけばOKなところ① • 活性化関数はReLUにする • ただし、最後の層だけは問題により以下のよ うに設定する – 2値分類問題/多値分類問題 Sigmoid – 回帰問題 活性化関数を利用しない

Slide 8

Slide 8 text

活性化関数の復習 –パーセプトロンの例 • ニューラルネットワークの一番単純なもの 。 はステップ関数になる 関数 、 パーセプトロンの場合 を活性化関数と呼ぶ。 関数 を出力する。 で を得る。 を入力して h h y a h y b x w x w a a x x ) ( ) 1 , , ( 2 2 1 1 2 1 = + + =

Slide 9

Slide 9 text

大体こうやっておけばOKなところ② • 問題によってloss関数は以下のように使い分ける – 2値分類問題 binary_crossentropy – 多値分類問題 categorical_crossentropy – 回帰問題 mean_squared_error

Slide 10

Slide 10 text

大体こうやっておけばOKなところ③ • 最適化方法はAdamにする、学習が進まなかったら 他の方法に変えてみる – SGD/Adagrad/Adadelta/Adamax/RMSProp... – https://keras.io/ja/optimizers/

Slide 11

Slide 11 text

model.fit(...)の中身(NNの学習) については詳しく触れません • model.fit(...)の中でNeuralNetworkの学習をやってる が… – 誤差逆伝搬でなんたら... (゚⊿゚)イラネ • DeepLearningを利用するために、DeepLearningが どうやってNeuralNetworkを学習するかを知る必要は ない! – 車の運転をするためにエンジンの中身を理解するようなもの 知りたかったら この本参照

Slide 12

Slide 12 text

model.fit(...)の中身(NNの学習) のざっくりとした説明 [ ] OR NAND OR 2 NAND 2 OR 1 NAND 1 b b w w w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ AND AND 2 AND 1 b w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ ( ) ⋯ , , , , 2 1 2 1 w w x x f y = 正解データ : y′ 2 y y loss − ′ = は予測データ y XORのNN y′ ) 比較(loss

Slide 13

Slide 13 text

model.fit(...)の中身(NNの学習) のざっくりとした説明 [ ] OR NAND OR 2 NAND 2 OR 1 NAND 1 b b w w w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ AND AND 2 AND 1 b w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ https://elix-tech.github.io/images/2016/kaggle_facial_keypoints/animation1.gif ( ) ⋯ , , , , 2 1 2 1 w w x x f y = 正解データ : y′ 2 y y loss − ′ = NNのパラメータ空間 等高線はlossをあらわす 転がってる球が現在のNNの状態 転がり方が最適化方法の違い は予測データ y 定数 定数 変数 XORのNN 2 w 1 w y′ ) 比較(loss

Slide 14

Slide 14 text

コードの内容を視覚的に把握してみる • 入力データ • ネットワーク形状 • データの流れ

Slide 15

Slide 15 text

02pima.py

Slide 16

Slide 16 text

学習データとテストデータに分ける • 学習データは「NNの学習に用いるデータ」のこと • テストデータは「学習によって得られたNNに、テスト として入力する未知の(学習に使ってない)データ」 • 分け方は3つある – 自力で分ける – scikit-learnのtrain_test_splitを利用する ←これを説明 – model.fitのvalidation_splitを利用する

Slide 17

Slide 17 text

大体こうやっておけばOKなところ④ • NNのパラメータの初期値にノイズを加える – ノイズを加えないと学習しないことが多い – 各層定義時の init でノイズの加え方を指定する – ノイズの加え方を変えてみる • ノイズの種類 • ランダム値のシード

Slide 18

Slide 18 text

03iris.py

Slide 19

Slide 19 text

大体こうやっておけばOKなところ⑤ • 高度な学習データの読み込みにはPandasを使う – データがスペースで区切られている場合 – データにラベルなどの文字列を含む場合 • カンマ(,)で区切られた数値だけのデータなら   numpy.loadtxt()でOK

Slide 20

Slide 20 text

大体こうやっておけばOKなところ⑥ • 多値分類問題の正解データはOne-hot encodingする

Slide 21

Slide 21 text

One-hot encoding • 「階調表現」→「次元を分けたバイナリ表現」に変換 • 一行で変換

Slide 22

Slide 22 text

04boston.py

Slide 23

Slide 23 text

その他のKerasのTips

Slide 24

Slide 24 text

学習履歴の保存方法 • 06tips_history.py

Slide 25

Slide 25 text

モデルのセーブ・ロード方法 • 07tips_modelsaveload • 構造はJSONで • 重みパラメータはHDF5で

Slide 26

Slide 26 text

ベストな学習結果だけ保存する方法 • 08tips_savebest • fitにコールバックを仕込む

Slide 27

Slide 27 text

本日の参考文献 • Kerasの実践的な教則本 オススメ! – https://machinelearningmastery.com/deep-learning-with-python2/ – より詳しい解説 • Cross Validation(交差検定) • Hyper ParameterのGrid Search • CNNを用いた画像データの解析 • LSTMを用いたテキストデータの解析 • あと、Keras公式のexamples – https://github.com/fchollet/keras/tree/master/examples

Slide 28

Slide 28 text

広大なDeepLearningの世界 まだやってないところ • 画像データのDeepLearning – CNN(Convolutional Neural Network) • テキストデータのDeepLearning – LSTM(Long Short Term Memory)、1次元CNN • モデルの層を深くした場合の調整方法 – Dropout、Pooling • さらに最前線の領域 – GAN、DNC、U-Net、ResNet、DQN、分岐したNN… • Kaggleチャレンジ • OpenAI Gym

Slide 29

Slide 29 text

画像データのCNNを見てみる • 09mnist_cnn • Mnistデータセットはディープラーニングの Hello World

Slide 30

Slide 30 text

END