【CNN】DeepLearningで用いられる正規化 〜バッチ正規化、グループ正規化〜

バッチ正規化(batch normalization)のような正規化処理はMLP(Multi Layer Perceptron)に限らず広く用いられます。当記事ではCNN(Convolutional Neural Network)の学習にあたって用いられるバッチ正規化やグループ正規化などについて取りまとめました。
当記事の作成にあたっては、Group Normalization論文や「深層学習 第$2$版」の$5.5$節「畳み込み層の出力の正規化」の内容などを参考にしました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

MLPにおける正規化

下記で詳しく取り扱った。

CNNにおける正規化

Group Normalizationの論文とCNNにおける正規化の体系化

CNN(Convolutional Neural Network)における正規化を把握するにあたってはグループ正規化(Group Normalization)論文の図を元に確認すると良い。

Group Normalization論文 Figure$\, 2$

上図に基づいてCNNにおける「バッチ正規化(Batch Normalization)」、「レイヤー正規化(Layer Normalization)」、「インスタンス正規化(Instance Normalization)」、「グループ正規化(Group Normalization)」をそれぞれ理解することが可能である。

図の$C$は畳み込みにおけるチャネル数、$N$は同時に処理するバッチに含まれるサンプル数にそれぞれ対応する。また、$H,W$は画像の高さ$H$と幅$W$を$2$次元から$1$次元に変換したものであると理解すると良い1

以下、「バッチ正規化」、「レイヤー正規化」、「インスタンス正規化」、「グループ正規化」のそれぞれの詳細について確認を行う。

バッチ正規化

バッチ正規化(Batch Normalization)はチャネル毎に「バッチに含まれる全てのサンプルの全ての位置の値の平均・分散を計算」し、正規化処理を行う手法である。チャネル毎に平均$\mu_{c}$を計算することを下記のような式で表すこともできる。
$$
\large
\begin{align}
\mu_{c} = \frac{1}{NWH} \sum_{i,j,n} u_{ijc}^{(n)} \quad (1)
\end{align}
$$

$(1)$式における$u_{ijc}^{(n)}$は$n$番目のサンプルの$c$番目のチャネルにおける位置$(i,j)$の値に対応する。また、$\displaystyle \sum_{i,j,n}$は下記のように置き換えて理解すれば良い。
$$
\large
\begin{align}
\sum_{i,j,n} \longrightarrow \sum_{n=1}^{N} \sum_{i=1}^{W} \sum_{j=1}^{H}
\end{align}
$$

レイヤー正規化

レイヤー正規化(Layer Normalization)はバッチに含まれるサンプル毎に「全てのチャネルの全ての位置の値の平均・分散を計算」し、正規化処理を行う手法である。チャネル毎に平均$\mu_{n}$を計算することを下記のような式で表すこともできる。
$$
\large
\begin{align}
\mu_{c} = \frac{1}{CWH} \sum_{i,j,c} u_{ijc}^{(n)} \quad (2)
\end{align}
$$

$(2)$式の$\displaystyle \sum_{i,j,c}$は下記のように置き換えて理解すれば良い。
$$
\large
\begin{align}
\sum_{i,j,n} \longrightarrow \sum_{c=1}^{C} \sum_{i=1}^{W} \sum_{j=1}^{H}
\end{align}
$$

グループ正規化

グループ正規化(Group Normalization)はレイヤー正規化をチャネル方向にいくつかグループを作成し、正規化を行う手法である。チャネル群の$k$番目のグループのチャネルのインデックスの集合を$\mathcal{S}_{k}$とおくと、サンプル$n$、グループ$k$の平均$\mu_{k}^{(n)}$は下記のように計算できる。
$$
\large
\begin{align}
\mu_{c} = \frac{1}{|\mathcal{S}_{k}|WH} \sum_{c \in \mathcal{S}_{k}} \sum_{i,j} u_{ijc}^{(n)} \quad (3)
\end{align}
$$

上記の$|\mathcal{S}_{k}|$は$\mathcal{S}_{k}$に含まれるチャネルのインデックスの数に対応する。$(3)$式の$\displaystyle \sum_{i,j}$は下記のように置き換えて理解すれば良い。
$$
\large
\begin{align}
\sum_{i,j} \longrightarrow \sum_{i=1}^{W} \sum_{j=1}^{H}
\end{align}
$$

参考

・Group Normalization論文
・バッチ正規化(Batch Normalization)論文

  1. CNNの入力は$(N, C, W, H)$のような$4$次元で表されるが、行列の積に基づく演算の場合は$2$次元、図で表す場合は$3$次元表記が基本となるので、ここで取り扱ったような行列の変換はよく行われることは抑えておくと良い。 ↩︎