<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【深度學(xué)習(xí)】聊聊Batch Normalization在網(wǎng)絡(luò)結(jié)構(gòu)中的位置

          共 1713字,需瀏覽 4分鐘

           ·

          2021-05-24 16:35


          煉丹知識點

          Knowledge Points of alchemy

          “葡萄是一點一點成熟的,知識是一天一天積累的。”


          Batch Normalization




          1. 什么是Batch Normalization?

          谷歌在2015年就提出了Batch Normalization(BN),該方法對每個mini-batch都進(jìn)行normalize,下圖是BN的計算方式,會把mini-batch中的數(shù)據(jù)正規(guī)化到均值為0,標(biāo)準(zhǔn)差為1,同時還引入了兩個可以學(xué)的參數(shù),分別為scale和shift,讓模型學(xué)習(xí)其適合的分布。

          那么為什么在做過正規(guī)化后,又要scale和shift呢?當(dāng)通過正規(guī)化后,把尺度縮放到0均值,再scale和shift,不是有可能把數(shù)據(jù)變回"原樣"?因為scale和shift是模型自動學(xué)習(xí)的,神經(jīng)網(wǎng)絡(luò)可以自己琢磨前面的正規(guī)化有沒有起到優(yōu)化作用,沒有的話就"反"正規(guī)化,抵消之前的正規(guī)化操作帶來的影響。


          2. 為什么要用Batch Normalization?

          (1) 解決梯度消失問題

          拿sigmoid激活函數(shù)距離,從圖中,我們很容易知道,數(shù)據(jù)值越靠近0梯度越大,越遠(yuǎn)離0梯度越接近0,我們通過BN改變數(shù)據(jù)分布到0附近,從而解決梯度消失問題。

          (2) 解決了Internal Covariate Shift(ICS)問題

          先看看paper里對ICS的定義:

          由于訓(xùn)練過程中參數(shù)的變化,導(dǎo)致各層數(shù)據(jù)分布變化較大,神經(jīng)網(wǎng)絡(luò)就要學(xué)習(xí)新的分布,隨著層數(shù)的加深,學(xué)習(xí)過程就變的愈加困難,要解決這個問題需要使用較低的學(xué)習(xí)率,由此又產(chǎn)生收斂速度慢,因此引入BN可以很有效的解決這個問題。

          (3)加速了模型的收斂

          和對原始特征做歸一化類似,BN使得每一維數(shù)據(jù)對結(jié)果的影響是相同的,由此就能加速模型的收斂速度。

          (4)具有正則化效果

          BN層和正規(guī)化/歸一化不同,BN層是在mini-batch中計算均值方差,因此會帶來一些較小的噪聲,在神經(jīng)網(wǎng)絡(luò)中添加隨機(jī)噪聲可以帶來正則化的效果。


          3. Batch Normalization添加在哪?

          所以實際使用上,BatchNorm層應(yīng)該放在哪呢?層與層直接都要加嗎?加在激活函數(shù)前還是激活函數(shù)后?卷積層和pooling層要不要加?有人說這個應(yīng)該加在非線性層后,如下順序。

          Linear->Relu->BatchNorm->Dropout

          論文里有提到,BN層常常被加到Relu之前,但是沒有明確的標(biāo)準(zhǔn),需要嘗試不同配置,通過實驗得出結(jié)論(很多實驗結(jié)果偏向于Relu在BN之前)。


          那BN層和dropout層的順序呢?

          我們可以看到這樣的代碼,BN在dropout之后。

          也可以看到這樣的代碼,BN在dropout之前。

          實際上,BN消除了對dropout的依賴,因為BN也有和dropout本質(zhì)一樣的正則化的效果,像是ResNet, DenseNet等等并沒有使用dropout,如果要用并用BN和dropout,還是建議BN放在dropout之前。


          注:對BN和dropout感興趣的可以看下這篇論文《Understanding the Disharmony between Dropout and Batch Normalization by Variance Shif》

          https://arxiv.org/pdf/1801.05134.pdf


          敲黑板,記重點!

          1、BN層可以緩解梯度消失,解決ICS問題,加速模型的收斂,并且具有正則化效果。

          2、 BN層往往添加在Relu層后,Dropout層之前。



          往期精彩回顧





          本站qq群851320808,加入微信群請掃碼:

          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狠狠狠狠狠狠狠狠狠狠狠狠狠 | 96精品久久久久久久久久 | 人人妻人人摸 | 艹逼网止 | 婷婷五月天激情交配操逼视频 |