オトナのプログラミング勉強会 オトナのdeep learning 2016-11
TRANSCRIPT
オトナのプログラミング勉強会
オトナのDeep Learning
2016-11-02と2017-12-07に熊本市の未来会議室で開催された勉強会の資料を改変@2017-03-21森下功啓
1
2
3
こんばんは
森下です。
今⽇は、私がDeep Learningについて浅く勉強した内容を私なりに分かりやすくしたつもりでお話します。もしかすると情報が古かったり、間違っている場合があるかもしれません。というか、何を⾔っているのか分からないかもしれません。気になることがあったらバシバシ指
摘・質問して下さい。もっと詳しい⼈が答えてくれるかもしれません。なにせ、勉強会ですから。
ちなみに、教育界にもディープラーニングなる⽤語がありますが、今⽇のテーマはソフトウェア⼯学のDeep Learningです。
今回の勉強会で⽬指すもの• Deep Learningの基本要素の感覚をつかむ• 参加者がDeep Learningのサンプルを動かせればとりあえずOK• チューニングとか深いところは次回に持越し• ⽮野⽒とか中村⽒とか召喚したいw
4
今⽇のお話• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
5
お試し環境の構築
6
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
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
(Option)本気の環境構築必要なもの• それなりに速いCPU(最低でもCore i7)• それなりに速いGPU(最低でもGeForce GTX960クラス)• NVIDIA社製のCUDA対応GPUでないと意味がない。
• それなりのRAM(最低でも16GB,32GB以上を推奨)• RAMもアクセス速度やキャッシュに差が有るので、財布に合わせて良
いものを買って下さい。
20万円あればとりあえずOK!
8
機械学習の⽬的
9
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
⽬的、それは…分類や回帰→予想活⽤例• 英語⇔⽇本語などの⾃然⾔語変換• 将棋ゲーム• クレームの電話対応• 健康診断結果からケアを⾃動判定• 株価情報から⾃動で投資判断• ⾵⼒や太陽光の発電量予測• 予想値とのズレを異常とみなして異常検知
10
問題と解答のパターンを学習させる
例:画像に何が写っているか調べる
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
例:ラフ画を線画に変換• http://gigazine.net/news/20160428-sketch-automatic-line-drawing/%E2%86%92/
12
例:線画に⾊付け• http://qiita.com/taizan/items/cf77fd37ec3a0bef5d9d
13
例:阿蘇に雲海が出るか予想
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
気象情報予報の
ツイート
うんかいったー
機械学習の種類
15
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
代表的な機械学習⼿法(と森下が思っているもの)
• HMM(Hidden Marcov Model:隠れマルコフモデル)• RF(Random Forest)• SVM(Support Vector Machine)• ANN(Artificial Neural Network:⼈⼯ニューラルネットワーク)• SOM(Self-Organizing Maps:⾃⼰組織化マップ)• GA(Genetic Algorithm:遺伝的アルゴリズム)• 強化学習• DQNなど⼿法は沢⼭あるらしいが、詳しくは知りません・・・
16*さらに、バージョン違いというか細かい違いのある数多の学習⼿法が提案されている。
⼿法と⽤途
17
回帰・分類
時系列データの分類・翻訳(⾳声・⾃然⾔語)
状況判断・振る舞いの学習(ゲーム・シミュレータ)
HMM
SVMRF
ANN
強化学習
SOM
教師なし学習
教師あり学習
*半教師あり学習もある
GA
RF(ランダムフォレスト)RFは、多数の決定⽊の多数決で結果を出す。教師データの正則化・正規化が必要ないので使うのが⼤変楽
18http://www.slideshare.net/mrtc0/machine-learning-41005650?next_slideshow=1
特徴量には役に⽴たないものやノイズの⼤きいものが含まれている。そこで、特徴をランダムに選択して決定⽊を多数学習させる。
決定⽊の例
ニューラルネットワーク
19
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
ニューラルネットワークニューラルネットワークは、神経細胞の信号伝達を模倣した機械学習アルゴリズムである。データが多数のニューロンを経由して出⼒値が決められる。シナプスの感度調整で性能を発揮する。層の数が増えると表現⼒が増え、チューニングするパラメータが減るという特徴がある。⼀⽅で、層の数が増えると学習が進まないという勾配消失問題も有る。
20http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/ieiri/img9.gif
⼊⼒デ
タ
出⼒デ
タ
中間層(隠れ層)
出⼒層⼊⼒層神経の構造
ANNの構造
勾配消失問題とは• ニューラルネットワークでは、誤差逆伝搬法において勾配降下
法を⽤いて出⼒誤差を縮⼩させていく。• ただし、(1)層の数が多い場合や(2)⼀度に学習する学習
データ数が多い場合に、勾配が消失し、学習が進まないという問題が⽣じる。「船頭多くして船⼭に登る」に近い。
21http://nineties.github.io/prml-seminar/fig/gradient-method.png
*誤差に勾配があれば、誤差を縮⼩させることができる。
誤差曲⾯
22
勾配消失問題をなんとかできれば素晴らしい世界が待っている。(かもしれない)
23
Deep Learningがニューラルネットワークの勾配消失問題をなんとかしました
24
それだけではなかった・・・
Deep Learningのすごいところ
25
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
Deep Learning(DL)って何がすごいの?特徴を⾃動的に獲得できるようになったことがすごい
• DL以前は、何が特徴になるか⼈が考えていた。• DLは画像認識分野で激的な性能向上をもたらした。• 通常のANNがせいぜい5層だったものを150層など実現した。
成果としては、例えば…• 画像に何が写っているか判断する分野で⼈の認識率を超えた。• プロの碁の棋⼠を破った。盤⾯評価関数を学習するという画期
的な⼿法が発明された。26
Deep Learningの向いているところ• 学習に使えるデータを数万〜数百万単位で⽤意できる場合• 特徴が単純すぎない場合• 特徴が明確でない場合
何はともあれ、既存の学習機でだめなら試す価値はある。ただし、チューニングは⼤変だ。
27
それぞれの分野でDL⼿法が提案されている分類・回帰• CNN
時系列• RNN
強化学習• DQN
28*CNN≠Deep Learningなのだが、うまい説明を思いつかない
29
Q だめなところは?
30
A 頭が痛くなるところ(体験談)
31
専⾨⽤語が多い・・・
+調整するパラメータがANNより増えた• グラフ構造(層数を含む)• 活性化関数の種類(シグモイド・ReLU・Maxout)• 学習係数の関数(定数・Adam・他)とそのパラメータ• Drop outの割合• Drop connectの設定• AEのPretrainingする/しない• 局所受容器の構成• 隠れ層のユニット数• Denoising AutoEncoder(DAE)のノイズ付加率• ミニバッチ処理のバッチサイズ
32
様々な⼯夫によって層を深くできたというこ
とだと思う。
+CNNでは更に• 畳み込み層• カーネルの数• フィルタサイズ• スライド量(ストライド)• チャンネル数
• プーリングの⽅法
33
34
ネットワーク構造
LeNet@1989
35http://4.bp.blogspot.com/-eAFL2rN9cm0/VRjBiJiecrI/AAAAAAAAN4E/2Q7LthaoLEY/s1600/lenet.png
AlexNet
36http://www.embedded-vision.com/sites/default/files/technical-articles/FPGAsNeuralNetworks/Figure1.jpg
VGG
37https://www.cs.toronto.edu/~frossard/post/vgg16/vgg16.png
単純な構造なのでよく使われている。
GoogleNet横⽅向への広がりを持っているのが特徴
38
http://www.marekrei.com/blog/wp-content/uploads/2015/06/googlenet_diagram.pngサイズの異なるフィルタを同時に使っている
ResNet
39
http://image.slidesharecdn.com/dl4nlp-160919091917/95/practical-deep-learning-for-nlp-23-638.jpg?cb=1474276927
⽤語解説
40
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
ホワイトボードを⽤いながら説明しました。
機械学習⽤語• 教師あり学習・教師なし学習• 教師データ• 学習データ• AUC、ROC曲線• 過学習• オンライン学習、バッチ学習、ミニバッチ学習• ソフトマックス関数
41
Deep Learning⽤語• AutoEncoder• プレトレーニング• ファイントレーニング• Drop out• Drop connect• 局所受容器• 活性化関数 ReLU• 学習係数の関数 Adam• Denoising AutoEncoder(DAE)
42
CNN⽤語• 畳み込み• 画像処理では伝統となっているフィルタ処理に似ている• 局所受容器で代⽤できる
• プーリング
43
ハンズオン
44
• お試し環境の構築• 機械学習の⽬的• 機械学習の種類• ニューラルネットワーク• Deep Learningのすごいところ• ⽤語解説• ハンズオン
ハンズオンの内容下記のサイトの内容をなぞって、サンプルコードを実⾏します。
• ⽣の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
付録参考⽂献などをつらつらとスライドにしています
46
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
Deep Learning本• ゼロから作るDeep Learning• https://goo.gl/sr8wqF• 基本のすべてを過不⾜無く押さえている。• 2015年時点での最新情報となっている。
• Chainerによる実践深層学習• https://goo.gl/2UkP9d• Chainerの使いやすさとRNNの触りが分かる。• 恐らく著者は⾃然⾔語処理系
48
論⽂ディープラーニングに⽤いる畳み込み演算による概念操作の表現
• http://www.jcss.gr.jp/meetings/jcss2015/proceedings/pdf/JCSS2015_P3-21.pdf• 2015年度⽇本認知科学会第32回⼤会
49
TensorFlow本
50
• TensorFlowはじめました• https://goo.gl/4CXorf• 本格的には情報が⾜りないのだが、検索に必要なキーワード
や感触はこれで⼗分• 表紙の漫画による解説が⼀切出てこないw
• TensorFlowで学ぶディープラーニング⼊⾨• https://goo.gl/TcUu0C• とりあえず買おう。• 層の意味とか分かりやすいと思う。
機械学習本
51
• Python機械学習プログラミング 達⼈データサイエンティストによる理論と実践• https://goo.gl/hdZ4s6• 機械学習全般を扱っている。内容が濃い。
参考⽂献(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
参考⽂献(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
参考⽂献(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
参考⽂献(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
Python本プログラミング⾃体が初めてという⼈向け• プログラミング超初⼼者が初⼼者になるためのPython⼊⾨(1〜3巻)
• https://goo.gl/7xSzfh• Kindle版のみ• C⾔語は学校で習ったという⼈にもお勧め
• しんせつなPython プログラミング超初⼼者が初⼼者になるための本• https://goo.gl/6BFxlP• 書籍版のみ(上と内容は異なる)• C⾔語は学校で習ったという⼈にもお勧め
56
Python本他の⾔語(C/VB以外)は知っているという⼈向けの⼊⾨書• みんなのPython 第3版
• https://goo.gl/xnYsIh
Pythonで科学計算に取り組みたい⼈向け• 科学技術計算のためのPython⼊⾨
• https://goo.gl/OC2tbC
57
Pythonの最新動向• まだ私はPython最新情報を扱うサイトを知らない。• Type Hint(型ヒント)とか、本に載っていない。• 東京で開催されるPythonの勉強会に顔を出すなどが良いかも• 例: http://startpython.connpass.com/
58
お勧めのDeep Learning環境構築⽅法Windows• Anaconda+Chainer• または、Anaconda+TensorFlow+keras
Mac• brew+pyenv+Python• 更にpipコマンドでnumpyとかscipyとかscikit-leranとか⼊れて、
さらにTensorFlow, keras, chainerを⼊れる。簡単
59
PythonのバージョンPythonには2系と3系があります。これからDeep Learningの勉強をしたいのであれば、3系のPython 3.6を選択しましょう。
ただしOpenCVを使う場合、最初はPython2.7が簡単です。
@2017-02
60
Python向けのお勧めのIDE・エディタIDE• PyCharm• Rodeo(RStudioに慣れた⽅には親和性が⾼い)
エディタ• Sublime Text
61
機械学習って、ノウハウの塊• データ構造、前処理(変なデータの排除・カーネル処理)、学
習時に加えるノイズの量、隠れ層の層数、元データを挟むとか、etc.• CNNにしたって、畳み込み+プーリング層はいくつとか、プー
リングで使う⼿法とか、畳込みフィルタのサイズとか• RNNになるとなにそれ状態• AIは遠い
62
機械学習で⼤事なのは般化能⼒• 学習に使ったデータに最⾼のパフォーマンスを⽰すこと≠良い• 物事をある程度抽象化して未知の出来事に対応できることが重要• 未知データを期待通りに回帰・識別できるようにチューニングしよう。
63
前処理は相変わらず⼤事• 画像なら輝度の平均を揃えるとか• 数値データなら、平均を1,標準偏差を1にするとか• 外れ値は除去• カーネル関数を利⽤して線形分離しやすい形に変形するとか
64