『ゼロから作るDeep Learning』読書メモ（8章「ディープラーニング」）＋その他の実用例

## 8章の内容
- 8.1 ネットワークをより深く
    - 認識精度を高めるためのテクニックを紹介
- 8.2 ディープラーニングの小歴史
    - 有名なネットワークを紹介
- 8.3 ディープラーニングの高速化
    - 高速化手法を紹介
- 8.4 ディープラーニングの実用例
    - 代表的なユースケースを紹介
- 8.5 ディープラーニングの未来
    - さらなる応用ユースケースを紹介
- 8.6 まとめ
    - 本章で学んだことのまとめ

---
## 認識精度を高める手法
- Data Augmentation
    - 回転や縦横移動をさせて画像データを増幅する
- 層を深くする
    - フィルタが小さくでき、パラメータが減る
    - 階層的に情報を抽出することで学習が効率化する

---
## DLを使った代表的な画像認識手法

---
### VGG
基本的なCNNだが、小さなフィルタによる畳み込み層が連続しているのが特徴
![vgg16.png](https://qiita-image-store.s3.amazonaws.com/0/22485/02e43407-5f85-42c6-b964-4f6a68a40320.png)
（[^文献22]より引用）

---
### GoogLeNet
同一階層が並列に存在しているのが特徴（**インセプション構造**）
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/e06faafe-4686-43cf-1c2e-f391296f13e9.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/7ce706e7-29a7-dd16-3314-f5b2d0525d31.png)
（[^文献23]より引用）

---
### Residual Network (ResNet)
層をまたいで出力に合算する**スキップ構造**が特徴
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/71df2e8e-9afc-f3ac-3030-cba060c392cf.png)
（[^文献24]より引用）

---
## ディープラーニングの高速化
- GPUによる高速化
- 分散学習
- 演算精度のビット削減
    - 通常の64ビットや32ビットの浮動小数点数ではなく、16ビットの**半浮動小数点数**を使う
    - Google TPUは8ビットの計算ユニットで計算を行う
    - 最近では重みや中間データを1ビットで表現する手法も提案されている[^文献31]

---
## 書籍で紹介されているディープラーニングの実用例

---
### 物体検出
画像中から物体の位置の特定を含めてクラス分類を行う問題（複数のクラスも検出する）
例として**R-CNN**は最初に物体と物体以外を識別する「候補領域抽出」を行い、抽出された領域に対してCNNでクラス分類を行っている
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/4e6302f0-decf-5086-8ddf-7a56b714661b.png)
（[^文献35]より引用）

---
### セグメンテーション
画像に対してピクセルレベルでクラス分類を行う
FCN (Fully Convolutional Network＝全てが畳み込み層のネットワーク)を用いることで1回のforward処理ですべてのピクセルに対してクラス分類を行い、中間データの空間ボリュームを保持したまま最後の出力まで処理する。
また、最後にバイリニア補間による拡大をデコンボリューション（逆畳み込み演算）によって実現する。
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/291f0f17-fcd8-b9ce-6806-7710aa878bfb.png)
（[^文献37]より引用）

---
### 画像キャプション生成
画像を与えると、その画像を説明する文章を自動で生成する
NIC (Neural Image Caption) ではCNNで画像認識、RNN（再帰的なネットワーク）で言語生成を行っている
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/bccc30ae-062e-f621-ebe3-47789eb1a653.png)
（[^文献38]より引用）

---
### 画像スタイル変換
2つの画像を入力し、新しい画像を生成する
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/2f626ebc-6ff9-07c2-0f1e-cadd9b2fc81e.png)
（[^文献40]より引用）

---
### 画像生成
学習データに存在しない画像を新規に生成する
DCGAN（Deep Convolutional Generative Adversarial Network）は画像生成を行うGenerator（生成器）と、画像が本物かどうかを判定するDiscriminator（識別器）が競い合うことで精度の高い画像を生成する（敵対的ネットワークとも呼ばれる）
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/7bc13b6d-2c1a-2804-9959-3a45e5b07be3.png)
（存在しない「ベッドルーム」画像を生成した例、[^文献41]より引用）

---
### 自動運転
CNNベースのSegNetは走路環境のセグメンテーションを高精度で行う。
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/f9b75573-90f7-f4f5-446d-c3facc26aa3a.png)
（[^文献43]より引用）

なお、自動運転には4つのレベルがある。
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/f78da007-3307-e235-49ee-449f3f6af2ec.png)
（出典）官民ITS構想・ロードマップ（案）（平成26年）[^参考1]

---
### 強化学習（Deep Q-Network）
DQNは、動作に対する価値観数をCNNで近似することで、画像に対しての動作を最適化する学習を行う
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/c3f438d1-1349-f858-2498-fcd7dd9788df.png)
（[^文献44]より引用）

---

## その他の実用例

---
### 画像から画像生成（pix2pix[^参考11], CycleGAN[^参考12]）
航空画像から地図生成、線画から物品画像生成、白黒写真からカラー写真生成など
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/9f16f5db-8796-e542-54b5-b7deacea4288.png)
![image](https://github.com/junyanz/CycleGAN/raw/master/imgs/horse2zebra.gif)

---
### アニメへの応用
ラフスケッチの自動線画化、線画着色、白黒アニメのカラー化、アニメキャラクター生成など[^参考13]
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/333ee500-872a-91a3-380b-5f20cdfdd928.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/c8fb0088-ca12-1f5a-eea3-d317511c6dff.png)

---
### アイテムピッキングの強化学習
Googleはロボットフィンガーでものを掴む動作を人間よりも速い速度で学習させる実験を公開している[^参考2]
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/264cf554-3134-f497-2c84-efc82e6eb28b.png)
（[14台のロボットアームに分散自己学習させて人間が数年かけて覚える動作を爆速で経験して身につけさせる恐るべきムービーをGoogleが公開 - GIGAZINE](http://gigazine.net/news/20160310-google-deep-learning-robot/)）

---
### 音声認識
音声テキスト変換や、複数話者のセグメンテーションなど音声データに対してもディープラーニングが採用されている
時系列データなのでRNNがよく使われるが、CNNが使われるケースも多い

---
### 自然言語処理（形態素解析、構文解析など）
自然言語の基盤処理である形態素解析（単語分割＆品詞判定）や係り受け構文解析などでもディープラーニングが使われているものは精度が高いとの評判がある

- 形態素解析: JUMAN++[^参考3]
- 構文解析: SyntaxNet[^参考4]
- 単語ベクトル化: Word2Vec[^参考15]
- サブワード分割: SentencePiece[^参考14]

---
### 機械翻訳
Google翻訳が最近end-to-endのニューラルネットワークベースのもの（NMT: Neural Machine Translation）になったため話題となった
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/ed81e462-0cb8-b0d4-e005-3ccf9f87cbe0.png)
([^参考5]より引用)

Attentionメカニズムを用いると、単語と単語の対応関係（アラインメント）を明示的に与える必要がない
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/30c596c6-d65b-d453-27ff-c2324fc9cad9.png)
([^参考6]より引用)

---
### メール返信文生成
Google Smart Replyはメールの内容をRNN(LSTM)で「読み」、簡単な返信文候補を3つ生成する[^参考8]
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/4908c86f-626b-c510-8e29-891be0d508c0.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/a61e7a1d-a360-6e11-21b9-3e2dcaf1a7ee.png)

---
### その他の文生成
近年の研究では、数値予報データからの天気予報文の生成[^参考9]や日経平均株価チャートからの概況文の生成[^参考10]など、限定されたドメインでの文生成にディープラーニングが用いられている
![image](https://qiita-image-store.s3.amazonaws.com/0/22485/5a58657b-9620-ac81-19fc-8deabcc79a94.png)
（[^参考9]より引用）

---
## まとめ

- 認識精度を高める手法として、データの機械的な増幅や層を深くすることが挙げられる
- GPU利用や分散学習、ビット精度の削減によって計算速度を高速化できる
- ディープラーニングを用いたアプリケーションとして、物体検出やセグメンテーション、画像スタイル変換や生成のほか、自動運転、アイテムピッキングの強化学習、音声認識、自然言語処理タスク（形態素解析や係り受け構文解析など）、機械翻訳、メール返信文生成などが挙げられる

---
## ディープラーニングのまとめサイト

- [DeepLearningに関する投稿 - Qiita](http://qiita.com/tags/DeepLearning)
- [arXivTimes](https://github.com/arXivTimes/arXivTimes)
- [Create with AI](http://createwith.ai/)

---

## 参考文献

- [GoogleのAI開発を支えるディープラーニング専用プロセッサ「TPU」 - ISCA論文レビュー版から、その仕組みを読み解く (1) ニューラルネット需要を支えるために開発された専用チップ | マイナビニュース](http://news.mynavi.jp/articles/2017/04/11/tpu/)
- [最近のDQN(SlideShare)](https://www.slideshare.net/mooopan/dqn-58511529)
- [Deep Learningの基礎と応用(SlideShare)](https://www.slideshare.net/beam2d/deep-learning-52872945)
- [Girl Friend Factory - 機械学習で彼女を創る - - Qiita](http://qiita.com/Hiroshiba/items/d5749d8896613e6f0b48)
- [自然言語処理における畳み込みニューラルネットワークを用いたモデル - Qiita](http://qiita.com/Hironsan/items/63d255fd038acbcdf95b)
- [リカレントニューラルネットワークの理不尽な効力（翻訳） - Qiita](http://qiita.com/KojiOhki/items/397f157342e0def06a9b)
- [seq2seq で長い文の学習をうまくやるための Attention Mechanism について - Qiita](http://qiita.com/halhorn/items/614f8fe1ec7663e04bea)
- [Inside of Deep Learning あるいは深層学習は何を変えるのか - Qiita](http://qiita.com/jiny2001/items/85af7dd163a63b3a152a)
- [PaintsChainer -線画自動着色サービス-](http://paintschainer.preferred.tech/index_ja.html)

---

[^文献22]: [Karen Simonyan and Andrew Zisserman（2014）：Very Deep Convolutional Networks for Large-Scale Image Recognition. arXiv:1409.1556［cs］(September 2014).](https://arxiv.org/abs/1409.1556)
[^文献23]: [Christian Szegedy et al（2015）：Going Deeper With Convolutions. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR).](https://arxiv.org/abs/1409.4842)
[^文献24]: [Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun（2015）：Deep Residual Learning for Image Recognition. arXiv:1512.03385［cs］(December 2015).](https://arxiv.org/abs/1512.03385)
[^文献31]: [Matthieu Courbariaux and Yoshua Bengio（2016）：Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1. arXiv preprint arXiv:1602.02830 (2016).](https://arxiv.org/abs/1602.02830)
[^文献32]: [Rodrigo Benenson's blog "Classification datasets results"](http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html)
[^文献33]: [Li Wan, Matthew Zeiler, Sixin Zhang, Yann L. Cun, and Rob Fergus（2013）：Regularization of Neural Networks using DropConnect. In Sanjoy Dasgupta & David McAllester, eds. Proceedings of the 30th International Conference on Machine Learning (ICML2013). JMLR Workshop and Conference Proceedings, 1058–1066.](http://proceedings.mlr.press/v28/wan13.pdf)
[^文献34]: [Visual Object Classes Challenge 2012 (VOC2012)](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/)
[^文献35]: [Ross Girshick, Jeff Donahue, Trevor Darrell, and Jitendra Malik（2014）：Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation. In 580–587.](https://arxiv.org/abs/1311.2524)
[^文献36]: [Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun（2015）：Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. In C. Cortes, N. D. Lawrence, D. D. Lee, M. Sugiyama, & R. Garnett, eds. Advances in Neural Information Processing Systems 28. Curran Associates, Inc., 91–99.]()
[^文献37]: [Jonathan Long, Evan Shelhamer, and Trevor Darrell（2015）：Fully Convolutional Networks for Semantic Segmentation. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR).](https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf)
[^文献38]: [Oriol Vinyals, Alexander Toshev, Samy Bengio, and Dumitru Erhan（2015）：Show and Tell: A Neural Image Caption Generator. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR).](https://arxiv.org/abs/1411.4555)
[^文献39]: [Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge（2015）：A Neural Algorithm of Artistic Style. arXiv:1508.06576［cs, q-bio］(August 2015).](https://arxiv.org/abs/1508.06576)
[^文献40]: [neural-style "Torch implementation of neural style algorithm"](https://github.com/jcjohnson/neural-style/)
[^文献41]: [Alec Radford, Luke Metz, and Soumith Chintala（2015）：Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks. arXiv:1511.06434［cs］(November 2015).](https://arxiv.org/abs/1511.06434)
[^文献42]: [Vijay Badrinarayanan, Kendall, and Roberto Cipolla（2015）：SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation. arXiv preprint arXiv:1511.00561 (2015).](https://arxiv.org/abs/1511.00561)
[^文献43]: [SegNet Demo page](http://mi.eng.cam.ac.uk/projects/segnet/)
[^文献44]: [Volodymyr Mnih et al（2015）：Human-level control through deep reinforcement learning. Nature 518, 7540 (2015), 529–533.](http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html)
[^文献45]: [David Silver et al（2016）：Mastering the game of Go with deep neural networks and tree search. Nature 529, 7587 (2016), 484–489.](https://gogameguru.com/i/2016/03/deepmind-mastering-go.pdf)
[^参考1]: [官民ITS構想・ロードマップ（案）（平成26年）](http://www.kantei.go.jp/jp/singi/it2/dai64/siryou4_2.pdf)
[^参考2]: [14台のロボットアームに分散自己学習させて人間が数年かけて覚える動作を爆速で経験して身につけさせる恐るべきムービーをGoogleが公開 - GIGAZINE](http://gigazine.net/news/20160310-google-deep-learning-robot/)
[^参考3]: [JUMAN++](http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++)
[^参考4]: [SyntaxNet](https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html)
[^参考5]: [Wu et al., Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation, 2016](https://arxiv.org/abs/1609.08144)
[^参考6]: [Bahdanau et al, Neural Machine Translation by Jointly Learning to Align and Translate, ICLR, 2015](https://arxiv.org/abs/1409.0473)
[^参考7]: [Differentiable neural computers | DeepMind](https://deepmind.com/blog/differentiable-neural-computers/)
[^参考8]: [Research Blog: Computer, respond to this email.](https://research.googleblog.com/2015/11/computer-respond-to-this-email.html)
[^参考9]: [村上聡一朗ほか, 数値予報マップからの天気予報コメントの自動生成, 言語処理学会, 2017](http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/B7-2.pdf)
[^参考10]: [村上聡一朗ほか, 時系列数値データからの概況テキストの自動生成, 言語処理学会, 2017](http://www.anlp.jp/proceedings/annual_meeting/2017/pdf_dir/B7-1.pdf)
[^参考11]: [phillipi/pix2pix: Image-to-image translation using conditional adversarial nets](https://github.com/phillipi/pix2pix)
[^参考12]: [junyanz/CycleGAN: Software that can generate photos from paintings, turn horses into zebras, perform style transfer, and more (from UC Berkeley)](https://github.com/junyanz/CycleGAN)
[^参考13]: [DeepLearningはアニメを変えるのか？ - Qiita](http://qiita.com/nonbiri15/items/518562c515f68d496a80)
[^参考14]: [Sentencepiece : ニューラル言語処理向けトークナイザ - Qiita](http://qiita.com/taku910/items/7e52f1e58d0ea6e7859c)
[^参考15]: [絵で理解するWord2vecの仕組み - Qiita](http://qiita.com/Hironsan/items/11b388575a058dc8a46a)