[FRN] Filter Response Normalization

背景

BN依賴于Batch做歸一化,在小批量上會出現(xiàn)性能退化恢恼;GN雖然通過將特征在Channel上分組來擺脫Batch的 依賴,但是在大批量上性能不如BN。

BN 到GN

<span style='color: red'>機器學(xué)習(xí)最重要的任務(wù)</span>

根據(jù)一些以觀察到的證據(jù)來對感興趣的位置變量進行估計和推測蕉拢。

概率模型提高了一種描述框架,將學(xué)習(xí)任務(wù)歸結(jié)于計算變量。

歸一化處理有助于模型的優(yōu)化晕换。

BN

BN?通過計算batch中所有樣本的每個channel上的均值和方差來進行歸一化午乓。

計算方式偽代碼:

FRN計算步驟偽代碼
  1. 計算在(B, H, W)維度上的均值\mu和方差\sigma^2
  2. 在各個通道上進行標(biāo)準(zhǔn)歸一化
  3. 對歸一化的特征進行放縮 \gamma 和平移 \beta,其中兩個參數(shù)是可學(xué)習(xí)的

問題

  1. 訓(xùn)練時batch較大闸准,預(yù)測時batch通常為1益愈,造成訓(xùn)練和預(yù)測時均值 \gamma 和方差 \sigma^2 的計算分布不一致。

    BN的解決方案是 在訓(xùn)練時估計一個均值和方差量來作為測試時的歸一化參數(shù)夷家,一般對每次mini-batch的均值和方差進行指數(shù)加權(quán)平均來得到蒸其。

  2. BN對batch的大小敏感,如果batch太小库快,模型性能會明顯惡化摸袁,且受限于顯存大小,當(dāng)前很多模型的batch難以很大义屏。

解決BN問題

1. 避免在batch維度歸一化

由上述靠汁,我們知道如果避免在batch維度上進行歸一化可以避免batch帶來的問題。BN的兩個主要問題 <span style='color: blue'>訓(xùn)練和與測試均值和方差計算分布不一致</span> 和 <span style='color: blue'>batch太小模型性能惡化</span> 都是batch維度帶來的湿蛔,顯然不在batch上進行歸一化膀曾,上述問題就迎刃而解了。

基于這一觀點阳啥,衍生出一系列方法:

Layer Normalization添谊,Instance NormalizationGroup Normalization

LN察迟,IN斩狱,GN,BN的區(qū)別
BN LN IN GN
處理維度 (B, H, W) (H, W, C) (H, W) (H, W, G)

GN在歸一化時需要對C分組扎瓶,即特征從 [B, H, W, C] 轉(zhuǎn)換成 [B, H, W, G, C/G]

LN所踊,IN,GN都沒有在batch維度上進行歸一化概荷,所以不會有BN的問題秕岛。相比之下,GN更為常用误证。

GN 和 BN 性能對比
2. 降低訓(xùn)練和測試之間的不一致性

Batch Renomalization

限制訓(xùn)練過程中batch統(tǒng)計量的值范圍

3. 多卡BN方法訓(xùn)練

相當(dāng)于增大batch size继薛。

FRN

FRN層包括 FRN歸一化層FRN (Filter Response Normalization)激活層TLU (Threshold Linear Unit)

FRN不僅消除了訓(xùn)練時對batch的依賴愈捅,而且當(dāng)batch size較大時性能由于BN遏考。

FRN結(jié)構(gòu)示意圖

原理? FRN的操作是在 (H, W) 維度上的,即對每個樣本的每個channel單獨進行歸一化蓝谨,這里x就是一個N維度(H \times W)的向量灌具,所以沒有對batch依賴的問題青团。FRN沒有采樣高斯分布進行歸一化,而是除以x的二次范數(shù)的平均值咖楣。這種歸一化方式類似BN可以消除中間操作(卷積和非線性激活)帶來的尺度問題督笆,有助于模型訓(xùn)練。

\epsilon ? 防止除0的小正常量截歉。FRN 是在 H胖腾,W 兩個維度歸一化,一般情況下網(wǎng)絡(luò)的特征圖大小 N=H\times W 較大瘪松,但有時候會出現(xiàn) 1 \times 1的情況咸作。

對于特征圖為 1 \times 1 的情況,\epsilon 就比較關(guān)鍵宵睦,不同的 \epsilon 正則化效果區(qū)別很大记罚。當(dāng) \epsilon 值較小時,歸一化相當(dāng)于符號函數(shù)壳嚎,這時候梯度幾乎為0桐智,嚴(yán)重影響模型訓(xùn)練;當(dāng) \epsilon 值較大時烟馅,曲線變得更圓滑说庭,此時梯度有助于學(xué)習(xí)。對于這種情況郑趁,論文建議采用一個可學(xué)習(xí)的 \epsilon 刊驴。

不同eps的梯度對比

IN 也是在 H, W維度上進行歸一化,但是會減去均值寡润,對于 N=1 的情況歸一化結(jié)果是 0捆憎,但FRN可以避免這個問題。

歸一化之后同樣需要進行縮放和平移變換梭纹,這里 \gamma\beta 也是可學(xué)習(xí)的參數(shù):
y = \gamma \hat{x} + \beta
FRN缺少減均值的操作躲惰,可能使得歸一化的結(jié)果任意地偏移0,如果FRN之后是ReLU激活層变抽,可能產(chǎn)生很多0值础拨,這對于模型訓(xùn)練和性能是不利地。

為了解決這個問題绍载,F(xiàn)RN之后采用閾值化的ReLU太伊,即TLU:
z = max(y, \tau) = ReLU(y - \tau) + \tau
其中 \tau 是可學(xué)習(xí)參數(shù)。

實驗結(jié)果

實驗結(jié)果

代碼實現(xiàn)

class FilterResponseNormNd(nn.Module):
    def __init__(self, ndim, num_features, eps=1e-6, learnable_eps=False):
        assert ndim in [3,4,5], \
            'FilterResponseNorm only support 3d, 4d or 5d inputs'
        super(FilterResponseNormNd, self).__init__()
        shape = (1, num_features) + (1, ) * (ndim - 2)
        self.eps = nn.Parameter(torch.ones(*shape) * eps)
        if not learnable_eps:
            self.eps.required_grad_(False)
        self.gamma = nn.Parameter(torch.Tensor(*shape))
        self.beta = nn.Parameter(torch.Tensor(*shape))
        self.tau = nn.Parameter(torch.Tensor(*shape))
        self.reset_parameters()
    def forward(self, x):
        avg_dims = tuple(range(2, x.dim()))
        nu2 = torch.pow(x, 2).mean(dim=avg_dims, keepdim=True)
        x = x * torch.rsqrt(nu2 + torch.abs(self.eps))
        return torch.max(self.gamma * x + self.bata, self.tau)
    def reset_parameters(self):
        nn.init.ones_(self.gamma)
        nn.init.zeros_(self.beta)
        nn.init.zeros_(self.tau)
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逛钻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锰提,更是在濱河造成了極大的恐慌曙痘,老刑警劉巖芳悲,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異边坤,居然都是意外死亡名扛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門茧痒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肮韧,“玉大人,你說我怎么就攤上這事旺订∨螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵区拳,是天一觀的道長拘领。 經(jīng)常有香客問我,道長樱调,這世上最難降的妖魔是什么约素? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮笆凌,結(jié)果婚禮上圣猎,老公的妹妹穿的比我還像新娘。我一直安慰自己乞而,他們只是感情好送悔,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晦闰,像睡著了一般放祟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呻右,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天跪妥,我揣著相機與錄音,去河邊找鬼声滥。 笑死眉撵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的落塑。 我是一名探鬼主播纽疟,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼憾赁!你這毒婦竟也來了污朽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龙考,失蹤者是張志新(化名)和其女友劉穎蟆肆,沒想到半個月后矾睦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡炎功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年枚冗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇损。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赁温,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淤齐,到底是詐尸還是另有隱情股囊,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布床玻,位于F島的核電站毁涉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锈死。R本人自食惡果不足惜贫堰,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望待牵。 院中可真熱鬧其屏,春花似錦、人聲如沸缨该。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膨更。三九已至,卻和暖如春珍德,著一層夾襖步出監(jiān)牢的瞬間矗漾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工泵琳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虑稼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像溯壶,于是被迫代替她去往敵國和親甫男。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容