Batch Normalization 被認(rèn)為是一種加速網(wǎng)絡(luò)收斂速度的很好的方法丑婿。關(guān)于BN的原理在原論文中有很詳細(xì)的介紹朽们。網(wǎng)上也有很多介紹的博客的烁。
簡單來說,BN是對feature按照空間位置進(jìn)行規(guī)范化迟赃。但是需要注意的是脯倒,對于CNN網(wǎng)絡(luò),BN的操作是比較特殊的捺氢。具體說來,對于卷積層剪撬,我們希望BN能夠和卷積一樣摄乒,對于feature的不同空間位置處的值具有同樣的效果。為了做到這一點(diǎn)残黑,我們在規(guī)范化時(shí)馍佑,對每一個(gè)feature map的所有位置進(jìn)行同樣的規(guī)范化操作,也就是說梨水,對每一個(gè)feature map拭荤,我們只學(xué)習(xí)一對 alpha, beta 參數(shù)。
在實(shí)現(xiàn)網(wǎng)絡(luò)時(shí)疫诽,TensorFlow 和 Keras的?Batch Normalization API 都有一個(gè)axis參數(shù)舅世,這個(gè)軸就是說我們想往哪個(gè)軸上面進(jìn)行BN操作。TF和Keras的官方文檔說這個(gè)軸應(yīng)該是數(shù)據(jù)的Channel奇徒。For instance, after a?Conv2D?layer with data_format="channels_first", set?axis=1?in?BatchNormalization雏亚。