第2回 ゼロから作るオトナのDeep Learning

第2回 ゼロから作るオトナのDeep Learning

4d8c732195d7beca7a2ea743e164245e?s=128

Takahiro Yano

March 01, 2017
Tweet

Transcript

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

  2. DeepLearningでやりたいこと • ある入力に対してある出力がほしい アヤメのデータ (花弁の広さ、長さ) アヤメの種類  セトサ?  バージカラー?  バージニカ? 顔画像

    100人中の誰に似てる? とある人の 生体データ その人が糖尿病かどうか
  3. 今日用いるデータセット • Pima Indiain Diabetes – ある生体データを持ったが糖尿病であるかどうか? – 2値分類問題 •

    Iris Data Set – SepalとPetalという2種類の花弁の長さ、幅からアヤメの種類 を判別分類する – 多値分類問題 • Housing Data Set – 犯罪率などのその土地の様々なデータから、その土地の地価 を予測する – 回帰問題(数値予測問題)
  4. 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さん
  5. 01pima.py

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

    5.モデルを学習 model.fit(...) 6.モデルを評価 model.evaluate() (オプション) 7.モデルを利用 model.predict() (オプション)
  7. 大体こうやっておけばOKなところ① • 活性化関数はReLUにする • ただし、最後の層だけは問題により以下のよ うに設定する – 2値分類問題/多値分類問題 Sigmoid –

    回帰問題 活性化関数を利用しない
  8. 活性化関数の復習 –パーセプトロンの例 • ニューラルネットワークの一番単純なもの 。 はステップ関数になる 関数 、 パーセプトロンの場合 を活性化関数と呼ぶ。

    関数 を出力する。 で を得る。 を入力して h h y a h y b x w x w a a x x ) ( ) 1 , , ( 2 2 1 1 2 1 = + + =
  9. 大体こうやっておけばOKなところ② • 問題によってloss関数は以下のように使い分ける – 2値分類問題 binary_crossentropy – 多値分類問題 categorical_crossentropy –

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

  11. model.fit(...)の中身(NNの学習) については詳しく触れません • model.fit(...)の中でNeuralNetworkの学習をやってる が… – 誤差逆伝搬でなんたら... (゚⊿゚)イラネ • DeepLearningを利用するために、DeepLearningが どうやってNeuralNetworkを学習するかを知る必要は

    ない! – 車の運転をするためにエンジンの中身を理解するようなもの 知りたかったら この本参照
  12. 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
  13. 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
  14. コードの内容を視覚的に把握してみる • 入力データ • ネットワーク形状 • データの流れ

  15. 02pima.py

  16. 学習データとテストデータに分ける • 学習データは「NNの学習に用いるデータ」のこと • テストデータは「学習によって得られたNNに、テスト として入力する未知の(学習に使ってない)データ」 • 分け方は3つある – 自力で分ける

    – scikit-learnのtrain_test_splitを利用する ←これを説明 – model.fitのvalidation_splitを利用する
  17. 大体こうやっておけばOKなところ④ • NNのパラメータの初期値にノイズを加える – ノイズを加えないと学習しないことが多い – 各層定義時の init でノイズの加え方を指定する –

    ノイズの加え方を変えてみる • ノイズの種類 • ランダム値のシード
  18. 03iris.py

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

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

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

  22. 04boston.py

  23. その他のKerasのTips

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

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

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

  27. 本日の参考文献 • 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
  28. 広大な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
  29. 画像データのCNNを見てみる • 09mnist_cnn • Mnistデータセットはディープラーニングの Hello World

  30. END