ディープラーニング温故知新・AlexNet編

# はじめに
思う所あり、大規模画像認識コンテストにおける畳み込みニューラル・ネットワークの最初の成功例であるAlexNetについて、少し調べてみることにしました。

# ブームの導火線
AlexNetは画像認識の認識率を競うImageNet Large Scale Visual Recognition Challenge(ILSVRC)2012年のチャンピオンとしてその名を轟かすことになったもので、この年以降、ILSVRCではディープ・ニューラル・ネットワークが幅を利かせるようになりました。
これ以前にも畳み込みニューラル・ネットワークはすでに存在してましたが、AlexNetは大規模データセットでのCNNアプリケーションとして最初の成功例と言われています。
上位5クラスの誤認識率は15.3%で、これは第二位のものよりも10.9ポイント低かったと言われています。

## 特徴
比較的シンプルなアーキテクチャで、以下のようなレイアウトを持ちます。
「ディープ」といっても、全8層のニューラル・ネットワークです。

- 5つの畳み込み層
- 3つの全結合層
- マックス・プーリング層
- ドロップアウト層

当時として比較的目新しい技術としては、ドロップアウトがここで利用されていたことです。
この手法は現在でもよく使用される正則化手法です。

## 使用されたデータセット
**ImageNet**

- 15000000以上のレベル付き高解像度画像
- 22000のカテゴリー

**ImageNetのサブセット**

- 一カテゴリにつき約1000枚の画像
- 1000カテゴリ
- 120万枚の訓練用画像、5万枚の検証用画像、150000枚の評価用画像

**AlexNet**

 - これらの画像は256x256ピクセルの画像へと低解像度処理し、部分的に切り取る(cropped)
 - Per-pixel Mean Substraction: ピクセル・チャンネルごとに平均を出し入力から差し引く。つまり、256×256×3個の平均値を出し、各入力画像から差し引く。

# オリジナル論文(のAbstract)を読む
オリジナル論文のアブストラクトだけ訳出しました[^1]。


ImageNet LSVRC-2010コンテストにおいて使用される120万枚の高解像度画像を、1000種の異なるクラスに分類するために、我々は大規模かつ深い畳み込みニューラル・ネットワークを学習をすることにした。
検証用データでは上位1クラス誤認識率は37.5%、上位5クラス誤認識率は17.0%で、これは以前まで最新と見られていたものよりかなりいい。
このニューラル・ネットワークは6千万個のパラメータと65万個のニューロンを持ち、5つの畳み込み層があり、いくつかのマックス・プーリング層が結合されていて、３つの全結合層は最終的には1000個の出力を持つソフトマックス層に結合されるよう構成されている。
学習をより素早くするために我々は非飽和ニューロン(non-saturating neurons [^2])と、畳み込み操作に非常に効果的なGPUによる実装を使用した。全結合層における過学習を減少させるために、効果的と実証された「ドロップアウト」と呼ばれる最近開発された正則化手法も使用している。
我々はこのモデルのヴァリアントでILSVRC-2012に参加し、二位の参加者の上位5クラス誤認識率が26.2%のところ、15.3%というスコアで勝利した。





# より詳細なアーキテクチャ
最初の層の入力は、論文では[224x224x3]となっていますが、
実際には[227x227x3]が正しいようです。

このときある畳み込み層に入力されたデータは、以下のようなサイズで出力されます。


```math
O=\frac{H+2P-F}{S} + 1
```

この畳み込み層では、フィルタは11x11、ストライドは4、ゼロパディングはなし、フィルタ数は96
出力される特徴マップの大きさは$\frac{227-11}{4}+1$ で**55**と計算されます。
このときConv層のdepthは96で、出力は[55x55x96]となります。

次に正規化層(norm layer)にて正規化されますが、出力サイズは変わらず[55x55x96]
プーリング層(マックス・プーリング)においてはフィルタ[3x3x1]、ストライドは2なので、
出力は$\frac{55-3}{2}+1$ で**27**、つまり[27x27x96]になります。

以下のような構造になります。

| Layer   | フイルタサイズ | ストライド | アウトプットサイズ |
|---------|----------------|------------|--------------------|
| input   |                |            | 227,227,3          |
| conv    | 11,11          | 4,4        | 55,55,96           |
| maxpool | 3,3            | 2,2        | 27,27,96           |
| conv    | 5,5            | 1,1        | 13,13,256          |
| maxpool | 3,3            | 2,2        | 13,13,256          |
| conv    | 3,3            | 1,1        | 13,13,384          |
| conv    | 3,3            | 1,1        | 13,13,384          |
| conv    | 3,3            | 1,1        | 13,13,256          |
| maxpool | 3,3            | 2,2        | 6,6,256            |
| fc      |                |            | 4096               |
| fc      |                |            | 4096               |
| fc      |                |            | 1000               |



# 参考文献・リンク
[Deep Learning with Tensorflow AlexNet](http://cvml.ist.ac.at/courses/DLWT_W17/material/AlexNet.pdf)
[ImageNet Classification with Deep Convolutional Neural Networks(Alex Krizhevsky et al.)](http://starpentagon.net/analytics/alex_net_paper/)
[[ディープラーニング] AlexNet](http://tecmemo.wpblog.jp/2017/03/19/dl_alexnet/)
内田祐介,山下隆義「畳み込みニューラルネットワークの研究動向」([PDF](http://www.vision.cs.chubu.ac.jp/MPRG/F_group/F188_uchida2017.pdf))



[^1]: Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton,*"Imagenet classification with deep convolutional neural networks"*,Advances in neural information processing systems, 2012[[pdf](https://www.cs.toronto.edu/~kriz/imagenet_classification_with_deep_convolutional.pdf)]
[^2]: これが何なのかよく分からず。ご存知の方ご教示頂けると助かります。