オトナのプログラミング勉強会
オトナの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 API
https://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
SVM
RF
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)
• 学習係数の関数(定数・Adam・他)とそのパラメータ
• Drop outの割合
• Drop connectの設定
• AEのPretrainingする/しない
• 局所受容器の構成
• 隠れ層のユニット数
• Denoising AutoEncoder(DAE)のノイズ付加率
• ミニバッチ処理のバッチサイズ
32
様々な工夫によって層
を深くできたというこ
とだと思う。
+CNNでは更に
• 畳み込み層
• カーネルの数
• フィルタサイズ
• スライド量(ストライド)
• チャンネル数
• プーリング層
• Maxoutなど
33
34
ネットワーク構造
LeNet@1989
35http://4.bp.blogspot.com/-eAFL2rN9cm0/VRjBiJiecrI/AAAAAAAAN4E/2Q7LthaoLEY/s1600/lenet.png
AlexNet
36
http://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

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