請問batch_normalization做了normalization後為什麼要變回來?

為什麼batch_normalization再做了0均值1方差的標準化後,最後還有一部將標準化的結果拉伸平移,說為了儘可能保證輸出特徵與原來一致,但是這樣不就打回原形了嗎?怎麼起到normalization的效果呢?


看圖說話

Note that simply normalizing each input of a layer may change what the layer can represent. For instance, normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity. To address this, we make sure thatthe transformation inserted in the network can represent the identity transform. To accomplish this, we introduce, for each activation x (k) , a pair of parameters γ (k) , β(k) , which scale and shift the normalized value

這就是Batch Normalization強大的地方,如果只做normalize在某些情況下會出現問題,比如對象是Sigmoid函數的output,而且output是分布在Sigmoid函數的兩側,normalize會強制把output分布在Sigmoid函數的中間的非飽和區域,這樣會導致這層網路所學習到的特徵分布被normalize破壞。而上面演算法的最後一步,scale and shift可以令零均值單位方差的分布(normalize之後的分布)通過調節gamma和beta變成任意更好的分布(對於餵給下一層網路來說)。因為這個gamma和beta是在訓練過程中可以學習得到參數。

最極端的情況就是當gamma = sqrt(var(x)) 和 beta = mean(x)的時候,就是題主所說的「打回原形」了,這種原來的論文中,Sergey說的是至少能夠使特徵分布回到normalize之前的分布,並不是每一層學習到的gamma和beta都會抵消之前的normalize的操作。我的理解是完整的BN通過normalize和scale shift兩步的操作提供更高的flexibility,對於每層的output既可以是零均值單位方差的分布,也可以是分布於Sigmoid兩端飽和區域的分布,或者其他任意的分布。

Reference:

https://arxiv.org/pdf/1502.03167.pdf


其實沒看見過特別有力的解釋。

所以我覺得還是實驗效果好的原因。


斯坦福的課程是這麼解釋的, 因為可能在某些情況下,我們或者需要飽和的和分布不好的參數,做完batch normalization後, 解決了反向傳播過程中的梯度問題(梯度消失和爆炸),但有時候會需要一些梯度消失和爆炸的情況,所以會把標準化的參數再往回拉一點。不是完全打回原形


推薦閱讀:

當tensorflow模型超過單張顯卡顯存的時候,應該怎麼拆分到多個GPU上運行?
tensorflow是如何求導的?
怎麼理解tensorflow中tf.train.shuffle_batch()函數?
tensorflow的自動求導具體是在哪部分代碼里實現的?
如何看待Theano宣布終止開發 ?

TAG:機器學習 | 深度學習DeepLearning | TensorFlow | 卷積神經網路CNN |