理解 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的本质是解决了反向传播过程中的梯度消失问题。
####梯度消失/爆炸问题

  • 前向传播: h l + 1 = W l h l h_{l+1} = W_lh_l hl+1=Wlhl
  • 反向传播:
    梯度求解的一般形式 ∂ L ∂ h i = ∂ L ∂ h l ∂ h l ∂ h l − 1 . . . ∂ h i + 1 ∂ h i \frac{\partial L}{\partial h_i} = \frac{\partial L}{\partial h_l}\frac{\partial h_l}{\partial h_{l-1}}...\frac{\partial h_{i+1}}{\partial h_i} hiL=hlLhl1hl...hihi+1
    KaTeX parse error: No such environment: eqnarray at position 7: \begin{̲e̲q̲n̲a̲r̲r̲a̲y̲}̲ \frac{\parti…
    上式的结果为权重的连乘,我们知道: 0. 9 30 = 0.04 0.9^{30} = 0.04 0.930=0.04 , 1. 1 30 = 17.4 1.1^{30} = 17.4 1.130=17.4,这就解释了为什么会出现梯度消失和爆炸问题。

BN的实质是网络输出的变换。令x为某一卷积网络层的输出,则BN变换 Y = B N ( x ) Y = BN(x) Y=BN(x)如下:
x ˉ = 1 M ∑ i = i M x i \bar x = \frac{1}{M}\sum_{i=i}^Mx_i xˉ=M1i=iMxi
σ x = 1 M ∑ i = i M ( x i − x ˉ ) 2 \sigma_x = \frac{1}{M}\sum_{i=i}^M(x_i-\bar x)^2 σx=M1i=iM(xixˉ)2
x ^ = x − x ˉ σ x + ϵ \hat x = \frac{x - \bar x}{\sqrt{\sigma_x + \epsilon}} x^=σx+ϵ xxˉ
Y = γ x ^ + β Y= \gamma \hat x + \beta Y=γx^+β

那么BN是如何解决梯度消失和爆炸问题的呢?
主要思想:解决scale对梯度的影响,让BN变换至少具有能恢复原始数据的能力。
∂ 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 \frac{\partial Y_{l+1}}{\partial h_l} =\frac{\partial BN(h_{l+1})}{\partial h_l} = \frac{\partial BN(W_lh_l)}{\partial h_l} = \frac{\partial BN(\alpha W_lh_l)}{\partial h_l} hlYl+1=hlBN(hl+1)=hlBN(Wlhl)=hlBN(αWlhl)
不管参数变化多大,传回上一层的梯度 ∂ Y l + 1 ∂ h l \frac{\partial Y_{l+1}}{\partial h_l} hlYl+1始终不变,不受尺度scale的影响。
∂ 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 \frac{\partial Y_{l+1}}{\partial W_l} =\frac{\partial BN(h_{l+1})}{\partial W_l} = \frac{\partial BN(W_lh_l)}{\partial W_l} = \frac{1}{\alpha} \frac{\partial BN(\alpha W_lh_l)}{\partial W_l} WlYl+1=WlBN(hl+1)=WlBN(Wlhl)=α1WlBN(αWlhl)

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

###面试常问问题

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

BN中有两个参数 γ \gamma γ β \beta β,这个两个参数怎么回事,有什么需要注意的?
这两个参数是可学习的参数。(其实每个BN都包含两个这样的参数)
训练的时候记录每个mini-batch的均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2,最后在测试的时候,用均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2的无偏估计来计算。
(在pytorch中,一般用momentum来更新Inference时使用的均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2。具体来说, x n e w = x ∗ ( 1 − m o m e n t u m ) + m o m e n t i m ∗ x t x_{new} = x * (1 - momentum) + momentim * x_t xnew=x(1momentum)+momentimxt
参考:https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html)。

  • BN和Hisssian矩阵的关系
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Batch normalization是一种常用的神经网络正则化技术,它的主要思想是对每一层的输入进行归一化,使得网络中每一层的输入分布都具有相似的统计特性。Batch normalization可以在训练过程中减少内部协变量偏移(Internal Covariate Shift)现象的发生,有助于加速网络的训练,并提高网络的泛化能力。 内部协变量偏移是指在训练过程中,每一层的输入分布会发生改变,导致网络中每一层的参数都需要重新适应新的输入分布,从而影响了网络的收敛速度和泛化能力。Batch normalization通过对每一层的输入进行归一化,使得每一层的输入分布都具有相似的统计特性,从而减少了内部协变量偏移现象的发生。 具体来说,Batch normalization的计算公式如下: $$ \hat{x}=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} \\ y=\gamma\hat{x}+\beta $$ 其中,$x$是输入,$\mu$和$\sigma^2$是在batch内计算得到的均值和方差,$\epsilon$是一个很小的常数,用于避免分母为0的情况,$\hat{x}$是将输入$x$进行归一化后的结果,$\gamma$和$\beta$是可学习的缩放和偏移参数。 Batch normalization的作用是将每一层的输入归一化到均值为0,方差为1的分布上,从而使得每一层的输入分布具有相似的统计特性,加速了网络的训练,并提高了网络的泛化能力。 总之,Batch normalization通过对每一层的输入进行归一化,减少了内部协变量偏移现象的发生,提高了网络的训练速度和泛化能力,是一种非常实用的神经网络正则化技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值