天天看点

理解 Batch Normalization

参考链接:

https://www.zhihu.com/question/38102762

https://zhuanlan.zhihu.com/p/26138673

https://blog.csdn.net/hjimce/article/details/50866313

https://blog.csdn.net/myarrow/article/details/51848285

原理

BN的本质是解决了反向传播过程中的梯度消失问题。

梯度消失/爆炸问题

  • 前向传播: hl+1=Wlhl h l + 1 = W l h l
  • 反向传播:

    梯度求解的一般形式 ∂L∂hi=∂L∂hl∂hl∂hl−1...∂hi+1∂hi ∂ L ∂ h i = ∂ L ∂ h l ∂ h l ∂ h l − 1 . . . ∂ h i + 1 ∂ h i

    ∂L∂Wi===∂L∂hl∂hl∂hl−1...∂hi+1∂WiWlWl−1...Wi+1∂hi+1∂Wi∂hi+1∂Wi∏k=i+1lWk(1)(2)(3) (1) ∂ L ∂ W i = ∂ L ∂ h l ∂ h l ∂ h l − 1 . . . ∂ h i + 1 ∂ W i (2) = W l W l − 1 . . . W i + 1 ∂ h i + 1 ∂ W i (3) = ∂ h i + 1 ∂ W i ∏ k = i + 1 l W k

    上式的结果为权重的连乘,我们知道: 0.930=0.04 0.9 30 = 0.04 , 1.130=17.4 1.1 30 = 17.4 ,这就解释了为什么会出现梯度消失和爆炸问题。

BN的实质是网络输出的变换。令x为某一卷积网络层的输出,则BN变换 Y=BN(x) Y = B N ( x ) 如下:

x¯=1M∑i=iMxi x ¯ = 1 M ∑ i = i M x i

σx=1M∑i=iM(xi−x¯)2 σ x = 1 M ∑ i = i M ( x i − x ¯ ) 2

x̂ =x−x¯σx+ϵ‾‾‾‾‾‾√ x ^ = x − x ¯ σ x + ϵ

Y=γx̂ +β Y = γ x ^ + β

那么BN是如何解决梯度消失和爆炸问题的呢?

主要思想:解决scale对梯度的影响,让BN变换至少具有能恢复原始数据的能力。

∂Yl+1∂hl=∂BN(hl+1)∂hl=∂BN(Wlhl)∂hl=∂BN(αWlhl)∂hl ∂ Y l + 1 ∂ h l = ∂ B N ( h l + 1 ) ∂ h l = ∂ B N ( W l h l ) ∂ h l = ∂ B N ( α W l h l ) ∂ h l

不管参数变化多大,传回上一层的梯度 ∂Yl+1∂hl ∂ Y l + 1 ∂ h l 始终不变,不受尺度scale的影响。

∂Yl+1∂Wl=∂BN(hl+1)∂Wl=∂BN(Wlhl)∂Wl=1α∂BN(αWlhl)∂Wl ∂ Y l + 1 ∂ W l = ∂ B N ( h l + 1 ) ∂ W l = ∂ B N ( W l h l ) ∂ W l = 1 α ∂ B N ( α W l h l ) ∂ W l

对用于更新参数W的梯度 ∂Yl+1∂Wl ∂ Y l + 1 ∂ W l ,如果 W′l=αWl W l ′ = α W l , 则 grad(W′)=1αgrad(W) g r a d ( W ′ ) = 1 α g r a d ( W ) 。如果 α<1 α < 1 ,则 1α>1 1 α > 1 说明尺度较大的参数会获得比较小的梯度;相反,尺度较小的参数会获得比较大的梯度,使得整个网络的参数更新变得更加稳健(所以我们最后参数会趋向于同样大小?)

面试常问问题

  • BN怎么回事?什么原理?
  • BN中有两个参数 γ γ 和 β β 后的均值和方差在训练和预测的时候需要怎么处理?

    BN中有两个参数 γ γ 和 β β ,这个两个参数怎么回事,有什么需要注意的?

    这两个参数是可学习的参数。(其实每个BN都包含两个这样的参数)

    训练的时候记录每个mini-batch的均值 μ μ 和方差 σ2 σ 2 ,最后在测试的时候,用均值 μ μ 和方差 σ2 σ 2 的无偏估计来计算。

  • BN和Hisssian矩阵的关系

继续阅读