オトナのプログラミング勉強会 オトナのdeep learning 2016-11

64
Deep Learning 2016-11-02と2017-12-07に熊本市の未来会議室で開催された勉強会の資料を改変@2017-03-21 森下功啓 1

Upload: katsuhiro-morishita

Post on 13-Apr-2017

148 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

オトナのプログラミング勉強会

オトナのDeep Learning

2016-11-02と2017-12-07に熊本市の未来会議室で開催された勉強会の資料を改変@2017-03-21森下功啓

1

Page 2: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

2

Page 3: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

3

こんばんは

森下です。

今⽇は、私がDeep Learningについて浅く勉強した内容を私なりに分かりやすくしたつもりでお話します。もしかすると情報が古かったり、間違っている場合があるかもしれません。というか、何を⾔っているのか分からないかもしれません。気になることがあったらバシバシ指

摘・質問して下さい。もっと詳しい⼈が答えてくれるかもしれません。なにせ、勉強会ですから。

ちなみに、教育界にもディープラーニングなる⽤語がありますが、今⽇のテーマはソフトウェア⼯学のDeep Learningです。

Page 4: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

今回の勉強会で⽬指すもの• Deep Learningの基本要素の感覚をつかむ• 参加者がDeep Learningのサンプルを動かせればとりあえずOK• チューニングとか深いところは次回に持越し• ⽮野⽒とか中村⽒とか召喚したいw

4

Page 5: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

今⽇のお話• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

5

Page 6: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

お試し環境の構築

6

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 7: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Cloud9上に環境を作りますTenosrFlow, Chainer, kerasの環境を作ります。Cloud9のHDD容量は5GBが必要です。

• インストール順• https://github.com/y-sama/cloud9• sudo pip install h5py • https://keras.io/ja/• http://chainer.org/

7

Page 8: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

(Option)本気の環境構築必要なもの• それなりに速いCPU(最低でもCore i7)• それなりに速いGPU(最低でもGeForce GTX960クラス)• NVIDIA社製のCUDA対応GPUでないと意味がない。

• それなりのRAM(最低でも16GB,32GB以上を推奨)• RAMもアクセス速度やキャッシュに差が有るので、財布に合わせて良

いものを買って下さい。

20万円あればとりあえずOK!

8

Page 9: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習の⽬的

9

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 10: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

⽬的、それは…分類や回帰→予想活⽤例• 英語⇔⽇本語などの⾃然⾔語変換• 将棋ゲーム• クレームの電話対応• 健康診断結果からケアを⾃動判定• 株価情報から⾃動で投資判断• ⾵⼒や太陽光の発電量予測• 予想値とのズレを異常とみなして異常検知

10

問題と解答のパターンを学習させる

Page 11: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

例:画像に何が写っているか調べる

11"a group of people sitting at a table with a laptop"

http://www.python.jp/events/pyconjp-2016-tutorial-sphinx.html

Microsoft Computer Vision APIhttps://www.microsoft.com/cognitive-services/en-us/computer-vision-api

Page 12: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

例:ラフ画を線画に変換• http://gigazine.net/news/20160428-sketch-automatic-line-drawing/%E2%86%92/

12

Page 13: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

例:線画に⾊付け• http://qiita.com/taizan/items/cf77fd37ec3a0bef5d9d

13

Page 14: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

例:阿蘇に雲海が出るか予想

14

https://twitter.com/unkaitterhttp://otennki.com/%E3%82%A2%E3%83%A1%E3%83%80%E3%82%B9%E3%81%A8%E3%81%AF%EF%BC%9F%E9%9B%A8%E5%87%BA%E3%81%99%E3%81%8B%E3%82%89%E3%82%A2%E3%83%A1%E3%83%80%E3%82%B9%E3%81%98%E3%82%83%E3%81%AA%E3%81%8B

アメダス Twitter

気象情報予報の

ツイート

うんかいったー

Page 15: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習の種類

15

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 16: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

代表的な機械学習⼿法(と森下が思っているもの)

• HMM(Hidden Marcov Model:隠れマルコフモデル)• RF(Random Forest)• SVM(Support Vector Machine)• ANN(Artificial Neural Network:⼈⼯ニューラルネットワーク)• SOM(Self-Organizing Maps:⾃⼰組織化マップ)• GA(Genetic Algorithm:遺伝的アルゴリズム)• 強化学習• DQNなど⼿法は沢⼭あるらしいが、詳しくは知りません・・・

16*さらに、バージョン違いというか細かい違いのある数多の学習⼿法が提案されている。

Page 17: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

⼿法と⽤途

17

回帰・分類

時系列データの分類・翻訳(⾳声・⾃然⾔語)

状況判断・振る舞いの学習(ゲーム・シミュレータ)

HMM

SVMRF

ANN

強化学習

SOM

教師なし学習

教師あり学習

*半教師あり学習もある

GA

Page 18: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

RF(ランダムフォレスト)RFは、多数の決定⽊の多数決で結果を出す。教師データの正則化・正規化が必要ないので使うのが⼤変楽

18http://www.slideshare.net/mrtc0/machine-learning-41005650?next_slideshow=1

特徴量には役に⽴たないものやノイズの⼤きいものが含まれている。そこで、特徴をランダムに選択して決定⽊を多数学習させる。

決定⽊の例

Page 19: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

ニューラルネットワーク

19

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 20: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

ニューラルネットワークニューラルネットワークは、神経細胞の信号伝達を模倣した機械学習アルゴリズムである。データが多数のニューロンを経由して出⼒値が決められる。シナプスの感度調整で性能を発揮する。層の数が増えると表現⼒が増え、チューニングするパラメータが減るという特徴がある。⼀⽅で、層の数が増えると学習が進まないという勾配消失問題も有る。

20http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/ieiri/img9.gif

⼊⼒デ

出⼒デ

中間層(隠れ層)

出⼒層⼊⼒層神経の構造

ANNの構造

Page 21: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

勾配消失問題とは• ニューラルネットワークでは、誤差逆伝搬法において勾配降下

法を⽤いて出⼒誤差を縮⼩させていく。• ただし、(1)層の数が多い場合や(2)⼀度に学習する学習

データ数が多い場合に、勾配が消失し、学習が進まないという問題が⽣じる。「船頭多くして船⼭に登る」に近い。

21http://nineties.github.io/prml-seminar/fig/gradient-method.png

*誤差に勾配があれば、誤差を縮⼩させることができる。

誤差曲⾯

Page 22: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

22

勾配消失問題をなんとかできれば素晴らしい世界が待っている。(かもしれない)

Page 23: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

23

Deep Learningがニューラルネットワークの勾配消失問題をなんとかしました

Page 24: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

24

それだけではなかった・・・

Page 25: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learningのすごいところ

25

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 26: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learning(DL)って何がすごいの?特徴を⾃動的に獲得できるようになったことがすごい

• DL以前は、何が特徴になるか⼈が考えていた。• DLは画像認識分野で激的な性能向上をもたらした。• 通常のANNがせいぜい5層だったものを150層など実現した。

成果としては、例えば…• 画像に何が写っているか判断する分野で⼈の認識率を超えた。• プロの碁の棋⼠を破った。盤⾯評価関数を学習するという画期

的な⼿法が発明された。26

Page 27: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learningの向いているところ• 学習に使えるデータを数万〜数百万単位で⽤意できる場合• 特徴が単純すぎない場合• 特徴が明確でない場合

何はともあれ、既存の学習機でだめなら試す価値はある。ただし、チューニングは⼤変だ。

27

Page 28: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

それぞれの分野でDL⼿法が提案されている分類・回帰• CNN

時系列• RNN

強化学習• DQN

28*CNN≠Deep Learningなのだが、うまい説明を思いつかない

Page 29: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

29

Q だめなところは?

Page 30: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

30

A 頭が痛くなるところ(体験談)

Page 31: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

31

専⾨⽤語が多い・・・

Page 32: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

+調整するパラメータがANNより増えた• グラフ構造(層数を含む)• 活性化関数の種類(シグモイド・ReLU・Maxout)• 学習係数の関数(定数・Adam・他)とそのパラメータ• Drop outの割合• Drop connectの設定• AEのPretrainingする/しない• 局所受容器の構成• 隠れ層のユニット数• Denoising AutoEncoder(DAE)のノイズ付加率• ミニバッチ処理のバッチサイズ

32

様々な⼯夫によって層を深くできたというこ

とだと思う。

Page 33: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

+CNNでは更に• 畳み込み層• カーネルの数• フィルタサイズ• スライド量(ストライド)• チャンネル数

• プーリングの⽅法

33

Page 34: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

34

ネットワーク構造

Page 35: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

LeNet@1989

35http://4.bp.blogspot.com/-eAFL2rN9cm0/VRjBiJiecrI/AAAAAAAAN4E/2Q7LthaoLEY/s1600/lenet.png

Page 36: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

AlexNet

36http://www.embedded-vision.com/sites/default/files/technical-articles/FPGAsNeuralNetworks/Figure1.jpg

Page 37: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

VGG

37https://www.cs.toronto.edu/~frossard/post/vgg16/vgg16.png

単純な構造なのでよく使われている。

Page 38: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

GoogleNet横⽅向への広がりを持っているのが特徴

38

http://www.marekrei.com/blog/wp-content/uploads/2015/06/googlenet_diagram.pngサイズの異なるフィルタを同時に使っている

Page 39: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

ResNet

39

http://image.slidesharecdn.com/dl4nlp-160919091917/95/practical-deep-learning-for-nlp-23-638.jpg?cb=1474276927

Page 40: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

⽤語解説

40

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

ホワイトボードを⽤いながら説明しました。

Page 41: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習⽤語• 教師あり学習・教師なし学習• 教師データ• 学習データ• AUC、ROC曲線• 過学習• オンライン学習、バッチ学習、ミニバッチ学習• ソフトマックス関数

41

Page 42: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learning⽤語• AutoEncoder• プレトレーニング• ファイントレーニング• Drop out• Drop connect• 局所受容器• 活性化関数 ReLU• 学習係数の関数 Adam• Denoising AutoEncoder(DAE)

42

Page 43: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

CNN⽤語• 畳み込み• 画像処理では伝統となっているフィルタ処理に似ている• 局所受容器で代⽤できる

• プーリング

43

Page 44: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

ハンズオン

44

• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン

Page 45: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

ハンズオンの内容下記のサイトの内容をなぞって、サンプルコードを実⾏します。

• ⽣のTensorFlowとtf.contrib.learnとKerasを⽐較してみよう• http://qiita.com/rindai87/items/546991f5ecae0ef7cde3

• はじめての Deep Learning - Keras で MLP for MNIST• http://m0t0k1ch1st0ry.com/blog/2016/07/15/keras/

45

Page 46: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

付録参考⽂献などをつらつらとスライドにしています

46

Page 47: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learningツール• Theano(テアーノ) ⼤御所• http://deeplearning.net/software/theano/

• keras TheanoとTensorFlowに対応した便利なラッパー• https://keras.io/ja/

• Deel ドワンゴ製。まだ未知数。• https://github.com/uei/deel

• Chainer(チェイナー) ⽇本で⼤⼈気。Mac, Win対応• http://chainer.org/

• TensorFlow Google社製。⼤規模サーバに向く。Mac, Win対応• https://www.tensorflow.org

• Caffe 以前から有名だが、落ち⽬• http://caffe.berkeleyvision.org/ 47

Page 48: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Deep Learning本• ゼロから作るDeep Learning• https://goo.gl/sr8wqF• 基本のすべてを過不⾜無く押さえている。• 2015年時点での最新情報となっている。

• Chainerによる実践深層学習• https://goo.gl/2UkP9d• Chainerの使いやすさとRNNの触りが分かる。• 恐らく著者は⾃然⾔語処理系

48

Page 49: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

論⽂ディープラーニングに⽤いる畳み込み演算による概念操作の表現

• http://www.jcss.gr.jp/meetings/jcss2015/proceedings/pdf/JCSS2015_P3-21.pdf• 2015年度⽇本認知科学会第32回⼤会

49

Page 50: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

TensorFlow本

50

• TensorFlowはじめました• https://goo.gl/4CXorf• 本格的には情報が⾜りないのだが、検索に必要なキーワード

や感触はこれで⼗分• 表紙の漫画による解説が⼀切出てこないw

• TensorFlowで学ぶディープラーニング⼊⾨• https://goo.gl/TcUu0C• とりあえず買おう。• 層の意味とか分かりやすいと思う。

Page 51: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習本

51

• Python機械学習プログラミング 達⼈データサイエンティストによる理論と実践• https://goo.gl/hdZ4s6• 機械学習全般を扱っている。内容が濃い。

Page 52: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

参考⽂献(Web)• Deep LearningとConvolutional Neural Network

• CNNについて詳しい• Chainerの書籍で謎だった⽤語も解説してある• http://vaaaaaanquish.hatenablog.com/entry/2015/01/26/060622

• ディープラーニングチュートリアル もしくは研究動向報告• Deep Learningの概要と歴史について詳しい• http://www.vision.is.tohoku.ac.jp/files/9313/6601/7876/CVIM_tutorial_deep_learning.pdf

• TensorFlowのチュートリアルを通して、⼈⼯知能の原理について学習する• 特段詳しいわけではない• 任意関数を近似可能であることを⽰している点は良い• http://qiita.com/jintaka1989/items/3b70b5c5541620536fa2

52

Page 53: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

参考⽂献(Web)• RBMから考えるDeep Learning 〜⿊魔術を添えて〜• http://qiita.com/t_Signull/items/f776aecb4909b7c5c116• 確率的ニューラルネットワークについて詳しい。• Deep Learningに対する注意事項についても参考になる。

• やる夫で学ぶ機械学習シリーズ• http://tkengo.github.io/blog/2016/06/06/yaruo-machine-learning0/• 機械学習以前の統計学付近。分かりやすいかも。

53

Page 54: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

参考⽂献(Web)オートエンコーダーについて• オートエンコーダ:抽象的な特徴を⾃⼰学習するディープラーニングの⼈気者

• https://deepage.net/deep_learning/2016/10/09/deeplearning_autoencoder.html• 層毎の学習の進め⽅が⽐較的分かりやすい

• Theano で Deep Learning <4> : Denoising オートエンコーダ• http://sinhrks.hatenablog.com/entry/2014/12/15/081113• オートエンコーダの実際と、⼯夫、効果についてわかり易い。

54

Page 55: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

参考⽂献(Web)• Cloud9上にChainerの実⾏環境を作る⽅法• http://qiita.com/supersaiakujin/items/e4c7a90f933703df587f

• Cloud9で簡単Jupyter環境構築• http://qiita.com/y__sama/items/58419e85f39265fe6df8

• Windows上でTensorFlowを使⽤する環境構築• http://qiita.com/AfricaUmare/items/33d0a5edaa0a9b4b9f36

55

Page 56: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Python本プログラミング⾃体が初めてという⼈向け• プログラミング超初⼼者が初⼼者になるためのPython⼊⾨(1〜3巻)

• https://goo.gl/7xSzfh• Kindle版のみ• C⾔語は学校で習ったという⼈にもお勧め

• しんせつなPython プログラミング超初⼼者が初⼼者になるための本• https://goo.gl/6BFxlP• 書籍版のみ(上と内容は異なる)• C⾔語は学校で習ったという⼈にもお勧め

56

Page 57: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Python本他の⾔語(C/VB以外)は知っているという⼈向けの⼊⾨書• みんなのPython 第3版

• https://goo.gl/xnYsIh

Pythonで科学計算に取り組みたい⼈向け• 科学技術計算のためのPython⼊⾨

• https://goo.gl/OC2tbC

57

Page 58: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Pythonの最新動向• まだ私はPython最新情報を扱うサイトを知らない。• Type Hint(型ヒント)とか、本に載っていない。• 東京で開催されるPythonの勉強会に顔を出すなどが良いかも• 例: http://startpython.connpass.com/

58

Page 59: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

お勧めのDeep Learning環境構築⽅法Windows• Anaconda+Chainer• または、Anaconda+TensorFlow+keras

Mac• brew+pyenv+Python• 更にpipコマンドでnumpyとかscipyとかscikit-leranとか⼊れて、

さらにTensorFlow, keras, chainerを⼊れる。簡単

59

Page 60: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

PythonのバージョンPythonには2系と3系があります。これからDeep Learningの勉強をしたいのであれば、3系のPython 3.6を選択しましょう。

ただしOpenCVを使う場合、最初はPython2.7が簡単です。

@2017-02

60

Page 61: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

Python向けのお勧めのIDE・エディタIDE• PyCharm• Rodeo(RStudioに慣れた⽅には親和性が⾼い)

エディタ• Sublime Text

61

Page 62: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習って、ノウハウの塊• データ構造、前処理(変なデータの排除・カーネル処理)、学

習時に加えるノイズの量、隠れ層の層数、元データを挟むとか、etc.• CNNにしたって、畳み込み+プーリング層はいくつとか、プー

リングで使う⼿法とか、畳込みフィルタのサイズとか• RNNになるとなにそれ状態• AIは遠い

62

Page 63: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

機械学習で⼤事なのは般化能⼒• 学習に使ったデータに最⾼のパフォーマンスを⽰すこと≠良い• 物事をある程度抽象化して未知の出来事に対応できることが重要• 未知データを期待通りに回帰・識別できるようにチューニングしよう。

63

Page 64: オトナのプログラミング勉強会 オトナのDeep Learning 2016-11

前処理は相変わらず⼤事• 画像なら輝度の平均を揃えるとか• 数値データなら、平均を1,標準偏差を1にするとか• 外れ値は除去• カーネル関数を利⽤して線形分離しやすい形に変形するとか

64