Batch Normalization的细致理解
最近讀論文遇見很多對BN的優化,例如MoCo當中的shuffling BN、Domain Generalization。連原來是什么東西都不知道,怎么看優化呢?
1.不就是歸一化嗎?其實并不是
可能大家覺得這個東西不就是一個歸一化的過程嗎?其實并不是這樣的一個過程。
我們假定我們直接使用一個歸一化,也就是我們本來天馬行空的數據直接我們將其拉到均值為0方差為1,那么這樣就出現一個問題:在BN層之后的模型必須是接收均值為0方差為1的模型,這可能不太符合普遍規律。
所以BN的作者在這上面加入了一個新的內容就是一個線性變換層。這樣就能將本身均值在0方差在1的輸出數據做一個適當地變換,讓數據的限制不那么死板。所以取得了較好的效果。
大致的過程如下:
說了這么多主要是讓大家理解這個BN層最后的線性變換的作用。
2.測試的時候如何處理?
這時出現另外的一個問題,就是我們在訓練的時候,數據是一個batch一個batch的通過網絡,并且回傳。這也就導致了BN(Batch Normalization)中的batch的來源,為什么是針對一個batch做標準化,其實是來自于這里。
這時候一個新的問題產生了,在我們訓練的時候存在batch的概念,但是,當我們test(或者描述為evaluate)的時候并沒有這個概念。只是一個數據一個數據的輸入,并沒有batch的概念。那么這個時候我們在向前傳播的時候我們用什么做normalization呢?
所以作者就提出了一種解決方案,也就是使用所有batch的均值的平均值和所有batch方差的無偏估計。
分開理解一下:
這里的均值的平均值:其實就相當于全部數據的均值,也相當于每個batch均值的無偏估計。
這里的bacth的方差的無偏估計:其實只是全部batch的方差加和再除以(全部的batch數再減去1),這個是個概率問題。另外,需要注意的是這個batch的方差的無偏估計和全部數據的方差并不是一個東西。
3.還有什么影響?
3.1在BN層之前還有一個線性變換會怎樣?
不難發現這個線性變化(x=wx+b)的+b被完全吞沒了,因為你均值變回0,加不加b其實都完全一樣。但是那個w還是有作用的。
那么這個b失效可怎么辦?
其實BN層結束的線性變換,完全可以取代這里進行的變換。
總結
以上是生活随笔為你收集整理的Batch Normalization的细致理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MoCo论文中的Algorithm 1伪
- 下一篇: 对比学习系列论文MoCo v1(二):M