Deep Learningとはなにか

凄い凄いと言われてもピンとこない人向け。(という体の社内勉強会資料)
機械学習からの橋渡しです。

# Deep Learning とは (as TL;DR)
- 機械学習(Machine Learning)の一種
- 多層(Deep)のニューラルネットワークを使う
- 特徴量抽出を自動化できる
- 学習コストは高いが、人間の労力を抑えられる
 - ただし、訓練データは依然として手作業で作成する必要がある

# 機械学習の中での位置づけ
## 機械学習の構成要素
- 学習データ
- 特徴量
- アルゴリズム

## 「学習」方法は３通りある
- 教師あり学習(Supervised learning)
- 教師なし学習(Unsupervised learning)
 - Deep Learningは主にこれ
- 強化学習(Reinforcement learning)

## 代表的なアルゴリズム
- 決定木
- サポートベクターマシン
- クラスタリング
- ニューラルネットワーク
 - Deep Learningはこの一角
- ベイジアンネットワーク 
- 強化学習
- 遺伝的アルゴリズム

# ニューラルネットワークをもっと細かく
## 構成要素
- 入力層
- 隠れ層
- 出力層

## 層間の繋ぎ方
- 全結合

![fullConnect.png](https://qiita-image-store.s3.amazonaws.com/0/31245/d130a304-6e9f-c419-273d-571e4ca51cee.png)

- 局所結合

![localConnect.png](https://qiita-image-store.s3.amazonaws.com/0/31245/04879879-f637-81f4-d170-381aa3fa5c7e.png)

※図はあくまで大雑把な概念です

## 代表的なアプローチ
- 畳み込みニューラルネットワーク(CNN)
 - 画像認識に非常によく使われる
 - 局所結合
- 再帰的ニューラルネットワーク(RNN)
 - 音声認識によく使われる
 - 全結合
- 長・短期記憶(LSTM)(RNNの一種)
- ボルツマンマシン

## 代表的なテクニック
- パーセプトロン(順伝播法)
 - 直感的だが、計算量が膨大になりやすい
- 勾配降下法
- 誤差逆伝播法
- 事前学習
 - いい塩梅の初期パラメータを設定する手法
- プルーニング
 - 学習済みネットワークの結合を削って計算量を減らす

# 畳み込みニューラルネットワーク(Deep Learningの例として)
- Deep Learningとして世に広く知れ渡るきっかけになったアプローチ。
 - 隠れ層が多い(深い)ネットワークの利用により、画像認識の成功率が飛躍的に向上した
- 画像認識に非常によく使われる
- (隠れ層で)異なるフィルターを次々に適用して画像処理をするイメージ

# Deep Learningのメリット・デメリット
## メリット
- 特徴量抽出をしなくてもよい
- 学習済みのモデルを認識に使うのは計算コストが小さい

## デメリット
- 大量の学習データが必要
- 学習の計算コストが大きい
- 層が多いほどブラックボックス化しやすい

# 小ネタ
## 本当にブラックボックスなのか
CNNについては多少の意味づけが可能。

- 学習済みのネットワークが、人間が物を見る時の認識と酷似している
 - (入力層に近い層が)視覚野のV2の活性化パターンと似ている

学習済みのパターンの例
https://devblogs.nvidia.com/parallelforall/deep-learning-computer-vision-caffe-cudnn/

# Deep Learningを始めるには
## ハードウェアが必要
- TESLA(NVIDIAのGPGPU)
- NVIDIAのGPUを使えるAWS
- <a href="http://googlecloudplatform-japan.blogspot.jp/2016/05/tpu.html">TPU</a>(Tensor Processing Unit)

GPUはAMDも出しているが、Deep LearningはCUDAの独壇場となっている。
TPUの利用が一般ユーザ向けに開放されるかは2016/06時点では不明。

## ソフトウェアも必要
### (学習用の)フレームワーク
- TensorFlow(C/Python)
 - スケーラビリティ重視
- Chainer(Python)
 - 柔軟性重視
- Torch7(Lua/C)
 - 高速
- Caffe(C/Python/Matlab)
 - CNN特化

### 学習済みネットワーク(実機用推論エンジン)
- 自身で学習を実施したネットワーク
- <a href="https://cloud.google.com/vision/">CLOUD VISION API(Google)</a>(有償)

## まずは入門から体験したい！
### NVIDIA Deep Learning学習コース
- 日本語コンテンツ
 - https://nvidia.qwiklab.com/focuses/preview/223 (登録ページだけは英語)
- 基本プレイ無料
 - AWS上のGPUを無料で使える学習コース。
 - フレームワークを選んで実際にDeep Learningを動かしてみるところまでが無料。
 - もっと細かい内容は有償提供(だが、実質AWS利用料だけで学習できるとのこと)

# 参考
- 「はじめるDeep learning」
http://qiita.com/icoxfog417/items/65e800c3a2094457c3a0

- 「Deep learning」
http://www.slideshare.net/kazoo04/deep-learning-15097274

- 「いまさら聞けないDeep Learning超入門（1）」
http://www.atmarkit.co.jp/ait/articles/1510/27/news008.html

- 「そもそもディープラーニングとは何か？」
https://thinkit.co.jp/story/2015/08/31/6364

- 「Deep learning」(wikipedia英語)
https://en.wikipedia.org/wiki/Deep_learning

- 「機械学習」(wikipedia英語)
https://en.wikipedia.org/wiki/Machine_learning

- 「一般向けのDeep Learning」
http://www.slideshare.net/pfi/deep-learning-22350063

- マルレク2016「Convolutional Neural Network入門」
https://drive.google.com/file/d/0B04ol8GVySUuMUx2MHJUWjVGQ2s/view

- 「NVIDIA Deep Learning Day 2016 Spring の個人的まとめ」
http://qiita.com/it__ssei/items/822101c25568229fd3cd

- 「深層学習」(講談社　機械学習プロフェッショナルシリーズ)
http://www.kspub.co.jp/book/detail/1529021.html