如何進行 batch normalization 2d 的計算?

Batch Noramlization 基本算是深度學習的標準配置了。
原文鏈接

在看文章時,關於如何計算有一點疑惑。
在這裏插入圖片描述
雖然就是上面這個公式,但是這個均值和方差到底是啥,或許有人和我一樣還是有一點疑惑。

準確來說,這個均值和方差的維度是什麼?

以二維batch Normalization 爲例,結合 pytorch 程序,本文說一下相關內容。

pytorch的 Batch Normalization 官網

具體來說,輸入是一個4維tensor,N,C,H,WN, C, H, W 分別表示 batch size, channels,Height,Width。
那麼對應的,均值的維度就是 CC.

我們必須要解釋一下 這個均值的 CC 維度到底是什麼意思。
Batch Noramlization 是想讓輸入滿足同一個分佈, 那麼是讓輸入的什麼特徵滿足同一分佈呢?這麼說有點暈,可以這麼理解,這裏我就只說正確答案了。那就是讓每張圖片的相同通道的所有像素值的均值和方差相同。比如我們有兩張圖片(都爲3通道),我們現在只說R通道,我們希望第一張圖片的R通道的均值 和 第二張圖片R通道的均值相同,方差同理

這樣我們也就知道了實際運行過程中均值是如何計算的,可以有兩種方法,把所有圖片的相同通道的值相加,然後求平均數,也可以先求出每一個圖片此通道的均值,然後再求所有圖片此通道均值的均值。

以上也就解釋了爲什麼batch Normalization在 batch size較小的時候會出現的問題,我們可以考慮當batch size就是1的時候,batch Normalization就沒有意義了,不發揮什麼作用,因爲這時就相當於對一張圖片的某通道歸一化(當然,這也有一定作用,不會使某些數過大或過小,從而導致梯度飽和)。

以上問題也就引發了很多其他的Normalization方法,比如當batch size較小時我們怎麼辦?

回過頭來,我們注意到,所謂的batch normalization 2d是對很多二維矩陣求一個均值和方差,請在腦中想象分別取出每一張圖片的R通道 並 疊放在一起,然後對這所有元素求均值和方差。當我們圖片是3通道的時候,我們就會有3個均值和方差。

再把通道擴展到feature maps, batch Normalization 就是希望處理相同分佈的feature。

從以上分析中,我還想再說一句,那就是batch Normalization 不只是爲抑制梯度飽和,而是爲了使每一個卷積處理相同的分佈。畢竟,如果只是爲了抑制梯度飽和,我們只需要對每一次輸入都做一次歸一化(僅對一張圖片)。因此,batch normalization 叫做 批歸一化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章