雑感等

音楽,数学,語学,その他に関するメモを記す.

CNNでのBatch Normalizationの平均・分散

畳み込みニューラルネットを使ってるときにバッチ正規化したら, 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に含まれる全要素を「全体」として, 平均・分散を計算する.