日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Batch Normalization的细致理解

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Batch Normalization的细致理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近讀論文遇見很多對BN的優化,例如MoCo當中的shuffling BN、Domain Generalization。連原來是什么東西都不知道,怎么看優化呢?

1.不就是歸一化嗎?其實并不是

可能大家覺得這個東西不就是一個歸一化的過程嗎?其實并不是這樣的一個過程。
我們假定我們直接使用一個歸一化,也就是我們本來天馬行空的數據直接我們將其拉到均值為0方差為1,那么這樣就出現一個問題:在BN層之后的模型必須是接收均值為0方差為1的模型,這可能不太符合普遍規律。
所以BN的作者在這上面加入了一個新的內容就是一個線性變換層。這樣就能將本身均值在0方差在1的輸出數據做一個適當地變換,讓數據的限制不那么死板。所以取得了較好的效果。
大致的過程如下:

m = K.mean(X, axis=-1, keepdims=True)#計算均值 std = K.std(X, axis=-1, keepdims=True)#計算標準差 X_normed = (X - m) / (std + self.epsilon)#歸一化 out = self.gamma * X_normed + self.beta#重構變換

說了這么多主要是讓大家理解這個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的细致理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。