深層学習について何もわからないけどそういう系の勉強会に行った


深層学習のしの字も知らないようなWeb系のエンジニアが[この勉強会](https://airc.doorkeeper.jp/events/38799?utm_campaign=event_38799_32633&utm_medium=email&utm_source=registered_message)に参加したので備忘録を書いた。

# 深層学習に関するキーワードの整理

そもそも区別がついてないキーワードだらけなので調べた。

* 人工知能
  * 機械学習
      * 深層学習
          * ニューラルネットワーク


ニューラルネットワーク(NN)に時系列情報を含めたものはリカレントニューラルネットワークと呼ばれてる。言語や音楽など、xが来た後にyが来やすい！みたいなのを処理しやすい利点がある。
[ニューラルネットワークで時系列データの予測を行う](http://qiita.com/icoxfog417/items/2791ee878deee0d0fd9c#rnn%E3%81%AE%E6%A6%82%E8%A6%81)

RNNの一種としてLSTMってのがあるらしい。
[わかるLSTM ～ 最近の動向と共に](http://qiita.com/t_Signull/items/21b82be280b46f467d1b) ← ついていけない

ニューラルネットワーク(NN)の一種でConvolutional Neural Network(CNN)ってのもあるらしい。こっちは画像認識とかで使うみたい。



# 予備知識とか

### 深層学習って何

この記事の説明がわかりやすかった
[特にプログラマーでもデータサイエンティストでもないけど、Tensorflowを1ヶ月触ったので超分かりやすく解説](http://qiita.com/tawago/items/c977c79b76c5979874e8#1-deep-learning%E3%81%A3%E3%81%A6%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E4%BD%95%E3%81%97%E3%81%A6%E3%82%8B%E3%81%AE)

それと、深層学習は脳の学習モデルと捉えられがちだけどそうではないのだそうです。

### 歴史的なやつ

今までも機械学習は研究されてきてるけど、深層学習が流行ってきたのはここ最近。

* 1980~: ニューラルネットワークブーム
* 1990~: サポートベクターマシンブーム
* 2010~: ディープラーニング

近年のマシンの高速化が深層学習の流行に寄与してる。
流行に伴ってデータセットやオープンソースのフレームワーク等が増えてきたことで、研究しやすくなってる。

深層学習では学習には教師データを使用するが、優秀な教師データを持つ人が有利に研究を進められると言われている。いいパラメーターセットを持っていることが重要みたいな側面があるらしい。



# セッションがあった深層学習フレームワーク

## Chainer

Python。

### 計算グラフの構築

Chainerは計算グラフの構築に特徴があるらしい。

* 通常のフレームワークは計算グラフを構築し、データを流す(define-__and__-run)
* Chainerは処理をしながら計算グラフを構築する(define-__by__-run)

コンパイラとインタプリタのような関係で、Chainerのdefine-__by__-runには以下のような利点がある。

- 手法の自由度が高い
  - 様々な手法を試せるので研究スピードを上げることができる
- 値の変化を追いやすい
  - デバッグしやすい

### CuPy

ChainerはCuPyというNumPy互換のCUDA実装を取り入れることで行列計算を高速化している。
※ CUDA=GPU向け統合開発環境
※ NumPy=Pythonの計算ライブラリ
NumPyを使うのと同じような書き方で、GPUを利用することによる高速化の恩恵を受けられる。

深層学習は処理高速化のためにしばしばGPUを利用しなければいけない研究分野。
GPUを使う処理を書くのが大変だったので簡単に使えるようにCuPyを作ってChainerに導入した。

NumPy互換なので深層学習以外の用途でも利用できるそう。

## Torch

Lua。比較的歴史が長くて、10年くらい前からあるやつらしい。

OpenSourceコミュニティが活発。FacebookもTorch向けモジュールを公開してる。
https://github.com/facebook/fbcunn

最近話題に上がるalphagoを開発したDeepMindのチームでも最初はこれを使ってたそう。Googleに買収されたので今はTensorFlowに移行中。

## TensorFlow

python。

- define-__and__-runのほうだけど、[TensorBoard](https://www.tensorflow.org/versions/r0.7/how_tos/summaries_and_tensorboard/index.html)というデータの可視化ツールを使ってデバッグをサポートしてくれている
- 以前Google社内ではC++製のフレームワークを使ってたが、TensorFlowを使うことでモバイルへの展開が楽になったらしい。
- googleの最強のデータセンターと合わせて使うことで最高のパフォーマンスが出せるそう。単体ではそんな早くない。
  - JupiterNetworkとそれ用に作られたハード・ミドルウェアを用いることで、GPUサーバの分散化でμs単位でパフォーマンスにこだわることができる。



# その他

### 上記以外のフレームワーク

ここには名前の挙がっていない、他のフレームワークについてもこの記事で解説されていて参考になりました。
http://qiita.com/HirofumiYashima/items/6a5ef1d4b592c51eedba

###  CloudVisionAPI

http://visionapi.com/

機械学習をつかって画像認識してくれるAPI。学習済みなので深層学習フレームワークをつかって自前で学習させるよりも気軽に試すことができる。

当日発表してくれたかたのVisionAPIに関するQiitaの記事もありました。
http://qiita.com/kazunori279/items/768c7fdf96cdf45a9d16



# 当日の資料

スライド
[深層学習フレームワークChainerの特徴](http://www.slideshare.net/unnonouno/chainer-59664785)

TorchとTensorFlowのスライドはあとでアップロードされるかもだそうです。



# 所感

知らなかった知識をひたすら浴びせられることは刺激になってよかった。

VisionAPIのような手軽に機械学習の恩恵を受けられるようなものを触ってると自分で学習させたくなってくるので手段を知れたのも今後に活かせそう。

Web系な業界では深層学習を使ったプロダクトってそこまで多くないみたい。
[ネイル画像を深層学習](http://it.impressbm.co.jp/articles/-/12601)とか[百貨店のお客さんの導線解析](http://japan.cnet.com/marketers/interview/35065393/)とか。

もっといろいろできそう。未来を感じる