常用 Normalization 方法的總結(jié)與思考:BN、LN、IN、GN
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
本文轉(zhuǎn)自|深度學(xué)習(xí)這件小事
我們將輸入的 feature map shape 記為[N, C, H, W],其中N表示batch size,即N個樣本;C表示通道數(shù);H、W分別表示特征圖的高度、寬度。這幾個方法主要的區(qū)別就是在:
1. BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。BN適用于固定深度的前向神經(jīng)網(wǎng)絡(luò),如CNN,不適用于RNN;
2. LN在通道方向上,對C、H、W歸一化,主要對RNN效果明顯;
3. IN在圖像像素上,對H、W做歸一化,用在風(fēng)格化遷移;
4. GN將channel分組,然后再做歸一化。

1. BN 求均值時,相當(dāng)于把這些書按頁碼一一對應(yīng)地加起來(例如第1本書第36頁,第2本書第36頁......),再除以每個頁碼下的字符總數(shù):N×H×W,因此可以把 BN 看成求“平均書”的操作(注意這個“平均書”每頁只有一個字),求標(biāo)準(zhǔn)差時也是同理。
2. LN 求均值時,相當(dāng)于把每一本書的所有字加起來,再除以這本書的字符總數(shù):C×H×W,即求整本書的“平均字”,求標(biāo)準(zhǔn)差時也是同理。
3. IN 求均值時,相當(dāng)于把一頁書中所有字加起來,再除以該頁的總字?jǐn)?shù):H×W,即求每頁書的“平均字”,求標(biāo)準(zhǔn)差時也是同理。
4. GN 相當(dāng)于把一本 C 頁的書平均分成 G 份,每份成為有 C/G 頁的小冊子,求每個小冊子的“平均字”和字的“標(biāo)準(zhǔn)差”。
一、 Batch Normalization, BN
(1)在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程中,通常以輸入網(wǎng)絡(luò)的每一個mini-batch進(jìn)行訓(xùn)練,這樣每個batch具有不同的分布,使模型訓(xùn)練起來特別困難。
BN算法過程:
沿著通道計算每個batch的均值 沿著通道計算每個batch的方差 做歸一化 加入縮放和平移變量 和

(1)允許較大的學(xué)習(xí)率;
(2)減弱對初始化的強(qiáng)依賴性
(3)保持隱藏層中數(shù)值的均值、方差不變,讓數(shù)值更穩(wěn)定,為后面網(wǎng)絡(luò)提供堅實的基礎(chǔ);
(4)有輕微的正則化作用(相當(dāng)于給隱藏層加入噪聲,類似Dropout)
BN存在的問題:
(1)每次是在一個batch上計算均值、方差,如果batch size太小,則計算的均值、方差不足以代表整個數(shù)據(jù)分布。
(2)batch size太大:會超過內(nèi)存容量;需要跑更多的epoch,導(dǎo)致總訓(xùn)練時間變長;會直接固定梯度下降的方向,導(dǎo)致很難更新。
二、 Layer Normalization, LN


三、 Instance Normalization, IN

四、 Group Normalization, GN


def GroupNorm(x, gamma, beta, G=16):
# x_shape:[N, C, H, W]
results = 0.
eps = 1e-5
x = np.reshape(x, (x.shape[0], G, x.shape[1]/16, x.shape[2], x.shape[3]))
x_mean = np.mean(x, axis=(2, 3, 4), keepdims=True)
x_var = np.var(x, axis=(2, 3, 4), keepdims=True0)
x_normalized = (x - x_mean) / np.sqrt(x_var + eps)
results = gamma * x_normalized + beta
return results
總結(jié)

momentum和track_running_stats來獲得在整體數(shù)據(jù)上更準(zhǔn)確的均值和標(biāo)準(zhǔn)差。LN 和 GN 只能計算當(dāng)前 batch 內(nèi)數(shù)據(jù)的真實均值和標(biāo)準(zhǔn)差。—完—
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

