深層学習 第6章 畳込みニューラルネット

[第5章](http://qiita.com/y_ujitoko/items/a271bbfa5d11d8c720de)に引き続き、深層学習(青イルカ本)の第6章を読み進めていきます。
本投稿(連載)を一緒に読めば事前知識なしでも読み進められる...といったものを目指しています。

# 本章の概要
本章では，畳込みネットワークを扱います．
はじめに，本手法の発想のもととなった神経科学の知見について触れ，次に構成要素である畳込み層とプーリング層を定義します．
本手法は画像認識に応用されており，関連して画像認識に用いられる正規化(局所コントラスト正規化)についても説明します．
次に順伝播型と同様，パラメータを最適化するために勾配を計算する方法を説明します．
最後に，本手法の適用例と効果について紹介しています．

# 本文詳細
## 6.3 畳込み
畳み込みの計算方法については[Standfordのwiki](http://deeplearning.stanford.edu/wiki/index.php/File:Convolution_schematic.gif)のアニメーションから入ると良いかもしれません．
![畳込み計算](http://deeplearning.stanford.edu/wiki/images/6/6c/Convolution_schematic.gif)

## 6.4 畳み込み層
畳込み層に重み共有が出現することについて説明します．本文の次の内容に対応する解説です．

> 畳込み計算の局所性を反映して，出力層のユニット1つ(チャネル$m$の1つの画素)は，入力層の$H \times H \times K$個のユニットのみと結合します．その結合の重みがフィルタの係数$h_{pqkm}$です($m$は今考えているチャネル)．この重みは，出力層の同一チャネルの全ユニットで同じである(共有される)ことに注意します．このことは重み共有(weight sharing, weight typing)と呼ばれます．このような結合の局所性と重みを共有することが，畳込み層の特徴です．

言葉だけだと分かりにくいので，畳込みを順伝播で計算する過程をアニメーションにしてみました．
入力画像が3x2x2でフィルタが2x2x2x2とします．ストライド，パディングは考えません．

まずはチャネルが1つで，フィルタの数が1つの，一番単純な畳込みの定義の場合です．
![cnn_1.gif](https://qiita-image-store.s3.amazonaws.com/0/158509/9d538d32-b834-d436-6d49-c5bdf261e279.gif)

次にチャネルが2つで，フィルタの数が1つの場合です．
![cnn_2.gif](https://qiita-image-store.s3.amazonaws.com/0/158509/3f0c100c-d180-fa8c-0d7f-04af3eea2560.gif)

最後にチャネルが2つで，フィルタの数が2つの場合です．
![cnn_3.gif](https://qiita-image-store.s3.amazonaws.com/0/158509/35723d04-16c2-63ea-3d50-bc5eebf4f985.gif)

フレーム1と2間，3と4間で重みが共有されていることと，また通常の全結合と違い，結合に局所性があることを確認しましょう．

## 6.5 プーリング層

### Lpプーリング
Lpプーリングで$P$が無限大の時に最大プーリングとなることの導出過程を補足します:

```math
\lim_{P \to \infty} \left( \frac{1}{H^2} \sum_{(p, q) \in P_{ij}} z^P_{pqk} \right)^{\frac{1}{P}} = \lim_{P \to \infty} \left( \frac{1}{H^2} \right)^{\frac{1}{P}}
\lim_{P \to \infty} \left( \sum_{(p, q) \in P_{ij}} z^P_{pqk} \right)^{\frac{1}{P}} \\
```

$\lim_{P \to \infty} \left( \frac{1}{H^2} \right)^{\frac{1}{P}}$は明らかに1です．
次に，$z^P_{pqk}$に関する和を展開し，その項が$t$で最大値をとなるとします．

```math
\begin{eqnarray}
\left(  \sum_{(p, q) \in P_{ij}} z^P_{pqk} \right) ^{\frac{1}{P}}
&\Rightarrow& \frac{1}{P} \log \left (z^P_0 + ... + z^P_{t} + ... + z^P_n \right) \\
&=& \frac{1}{P} \log \left( {z^P_{t}} (\frac{z^P_0}{z^P_{t}} + ... + \frac{z^P_{t}}{z^P_{t}} + ... + \frac{z^P_n}{z^P_{t}}) \right) \\
&=& \frac{1}{P} \log {z^P_{t}} \log \left( \frac{z^P_0}{z^P_{t}} + ... + \frac{z^P_{t}}{z^P_{t}} + ... + \frac{z^P_n}{z^P_{t}} \right) \\
&=& \log z_{t} \log \left( \frac{z^P_0}{z^P_{t}} + ... + \frac{z^P_{t}}{z^P_{t}} + ... + \frac{z^P_n}{z^P_{t}} \right) \\
\end{eqnarray}
```

この式は$P \to \infty$の極限をとれば$\log z_t$であり，logをとらなければ$z_t$(最大値)です．

## 6.6 正規化層

### 除算正規化での定数c

除算正規化$z_{ij} = \frac{x_{ij} - \tilde{x_{ij}}}{\sigma_{ij}}$において定数 $c$ を導入する理由。本文にある次の文の解説．

> この計算をそのまま行うと，濃淡変化が少ない(コントラストが小さい)局所領域ほど濃淡が増幅してしまい，例えば画像のノイズが強調されるようになってしまいます．

周囲の濃淡が少ないと，標準偏差$\sigma_{ij}$が小さくなり，大きい数になってしまいます．これを防ぐために閾値$c$を設け，標準偏差がそれを下回るようであれば$c$を採用とするようにしています．

## 6.7 勾配の計算
$\boldsymbol t _{ji}$と$\boldsymbol T_r$が読み取りづらいため解説します．はじめに本文を抜粋しておきます．

> $\boldsymbol t_{ji}$は高々1つの成分が1をとりそれ以外は$\boldsymbol{0}$となるベクトルです. そして$\boldsymbol t_{ji}$の成分を $\boldsymbol t_{jir}$と書き，$r$ を固定した $\boldsymbol t_{jir}$ を $(j, i)$ 成分に持つ行列を $\boldsymbol T_r$ と書きます．

6.4節でフィルタ$\boldsymbol h$が重み$w_{ji}$に相当するものであることが分かりました．しかし，$\boldsymbol h$はあくまで重みの要素を1次元的に書き並べたものであり，直接行列計算に使うことができません．これを可能にする操作について考えます．

重み$w_{ji}$が$\boldsymbol h$の要素のうち，$r$番目のものに該当する状況を考えます．

---

さて，次は7章の再帰型ニューラルネットです．引き続きy_ujitokoが丁寧に解説してくれるはずです．