畳み込みニューラルネットを使ってるときにバッチ正規化したら, BN層のパラメータが(ch数×4)になった.
これはchごとに正規化していて,各chに含まれる各要素(各画素や各時刻の電圧)をそれぞれ正規化しているわけではない.
BNの解説では,ミニバッチに含まれるデータの「対応する要素」を全体として,その全体の平均・分散を取る.
しかし,チャンネルごとに正規化するなら,どこを「全体」とするかがわからなかった.
CNNでのBNはchごとに正規化するというのは正しい.
また,BNの平均・分散を計算する際の「全体」は下記のページのソースコードが示すように,
http://d2l.ai/chapter_convolutional-modern/batch-norm.html#implementation-from-scratch
#When using a two-dimensional convolutional layer, calculate the #mean and variance on the channel dimension (axis=1). Here we #need to maintain the shape of `X`, so that the broadcasting #operation can be carried out later mean = X.mean(axis=(0, 2, 3), keepdims=True) var = ((X - mean) ** 2).mean(axis=(0, 2, 3), keepdims=True)
引用部分の"mean = X.mean(axis=(0, 2, 3), "が示すように,ミニバッチ方向とあるchに含まれる全要素を「全体」として, 平均・分散を計算する.