也是深度學(xué)習(xí)面試??嫉臇|西,BN、LN、GN、IN等各種N,參考文章:https://zhuanlan.zhihu.com/p/115949091
定義其實(shí)一張圖基本就能說(shuō)明白,但是還有各種細(xì)節(jié),先放圖吧,然后后面講到的時(shí)候再對(duì)著圖講:

1.BN
BN就是一個(gè)Batch算一個(gè)均值和方差,再做一個(gè)歸一,為什么要這么做,學(xué)術(shù)一點(diǎn)是因?yàn)橐鉀QInternal Covariate Shift問(wèn)題,對(duì)隱層狀態(tài)進(jìn)行規(guī)范化使得神經(jīng)元狀態(tài)處理在匹配的量級(jí)上,加速和穩(wěn)定模型的收斂;白話一點(diǎn)我覺(jué)得就是激活函數(shù)的激活區(qū)間在靠近y軸的區(qū)域,但是也不一定這樣做就會(huì)是想要的,所以還會(huì)乘以縮放系數(shù)再加上偏置;
對(duì)于全連接層來(lái)說(shuō)就是對(duì)一個(gè)Batch內(nèi)的數(shù)做均值方差歸一比較簡(jiǎn)單;那對(duì)于卷積層來(lái)說(shuō)就是上面圖最左的表示,一個(gè)batch(可以想象成B個(gè)C*H*W的小方塊)出一個(gè)C*H*W的map,每一個(gè)方塊都要和這個(gè)方塊作用;
BN除了在FC和CNN上有區(qū)別,還在訓(xùn)練和預(yù)測(cè)時(shí)也有區(qū)別。訓(xùn)練時(shí)是按batch算均值和方差,預(yù)測(cè)肯定不能這樣,就得有一個(gè)定值在那用于做BN,定值怎么得到呢:滑動(dòng)平均(https://blog.csdn.net/s_sunnyy/article/details/79896273),blog中說(shuō)沒(méi)什么道理為什么前面的要衰減,這本身也就是個(gè)次優(yōu)值;那還有一個(gè)問(wèn)題為什么訓(xùn)練的時(shí)候不用全量訓(xùn)練數(shù)據(jù)的均值和方差常量呢,因?yàn)閎atch間差別可能比較大,這個(gè)差別能增強(qiáng)模型魯棒性,使用全量數(shù)據(jù)可能會(huì)加劇過(guò)擬合。
2.LN
LN的提出主要是因?yàn)锽N太依賴(lài)batch_size了,如果batch_size較小,均值和方差就很不穩(wěn)定,容易學(xué)崩;上次我設(shè)了batch_size=1還error了,有可能是有的特征沒(méi)有數(shù)據(jù)。
LN就是上面左數(shù)第二個(gè),在C的維度去歸一的,會(huì)得到B個(gè)W*H的map,每個(gè)方塊都有對(duì)應(yīng)的一個(gè)要拿去歸一的map;
LN適用于小batch和RNN,大batch還是看BN
3.IN
IN是左數(shù)第三個(gè),用于圖像風(fēng)格化任務(wù),在H*W上歸一,得到B個(gè)C*1的方塊
4.GN
GN是左數(shù)第四個(gè),LN的變種,先對(duì)C分組,再用這個(gè)組里的C來(lái)做LN,與batch_size無(wú)關(guān),也不會(huì)用到全部的C(因?yàn)閳D像任務(wù)里用到全部的C確實(shí)很奇怪)
5.CBN
將前幾次BN的參數(shù)保存起來(lái),和這一次的一起去做一個(gè)推導(dǎo)得到這次用到的BN參數(shù)(可能是做一個(gè)滑動(dòng)平均)
cp一下總結(jié):BN是最傳統(tǒng)的,如果batchsize允許夠大的話,用在CNN中的效果依然是最好的;LN適合RNN;IN適合圖像風(fēng)格化任務(wù);GN更適合小batchsize的CNN訓(xùn)練