Batch Norm和Dropout问题大总结

1. 为什么训练时要保证每层的方差一致?

每层的方差保持一致可以减缓梯度消失或爆炸。简单的说,神经网络的误差反向传播,忽略激活函数的偏导数时,相当于自后向前不停乘上网络每一层的权重。我们知道,对与一个任意张量,例如3, 当我们把它不停的乘上一个小于1的正数,那么最后结果就会越来越小,最后变成0。如果把一个数不停的乘上一个大于1的整数,结果就会变成无穷大。对于误差,也是这样,如果权重太大,梯度就会越来越大,导致梯度爆炸。如果网络权重太小,梯度就会越来愈小,导致梯度消失。权重初始化就是要使权重大小刚好在这个范围里。 合理的方差既保证了数值一定的不同, 又保证了数值一定的稳定。 因此,保证每层方差一致可以减缓梯度消失或爆炸。

2. 什么是Covariate Shift现象?

"Covariate Shift"可以理解为网络中间层的输入分布发生变化的现象
在这里插入图片描述
假设这是一个识别猫的神经网络模型,并且我们已经在所有黑猫的图像上训练了数据(如左图所示)。但如果现在我们想把此网络应用于所有颜色的猫,此时网络可能就不会那么好用了。
在这里插入图片描述
如果你的训练数据分布是左图(红色圆圈为正例,黑色叉号表示反例),你想把从左图训练好的网络应用于右图的数据分布,那可能就需要重新训练神经网络了。这就是网络各层的输入分布发生了变化。归一化就是想解决因为数据分布的变化导致后面层难以训练的问题。

3. Batch Norm中为什么归一化后还要引入 γ \gamma γ β \beta β

减均值除方差得到的分布是正态分布,我们能否认为正态分布就是最好或最能体现我们训练样本的特征分布呢?
不能这样认为,如果激活函数在方差为1的数据上,没有表现最好的效果,比如Sigmoid激活函数。这个函数在-1~1之间的梯度变化不大。假如某一层学习到特征数据本身就分布在S型激活函数的两侧,把它归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,就没有达到非线性变换的目的,换言之,减均值除方差操作后可能会削弱网络的性能。如果每一层的数据分布都是标准正太分布,导致其完全学习不到输入数据的特征,因为,费劲心思学习到的特征分布被归一化了,因此,直接对每一层做归一化显然是不合理的。

4. Batch Norm训练和测试的区别

在每个batch上进行而不是在整个数据集上进行。在训练集上有BN测试集上没有BN,这样不会发生数值上的偏移,道理类似dropout,即记录下训练集上的BN参数(均值、标准差、\beta、\gamma)作为网络参数的一部分。

训练阶段:
计算每一batch的mean和variance,然后归一化,放缩

测试阶段:
在这里插入图片描述

5. 为什么Dropout后需要Rescale?

假设失活概率为 p ,就是某层中的每个神经元都有p的概率失活,而实际测试时是不会有dropout的,这样在训练和测试时,输出层每个神经元的输入和的期望会有量级上的差异。则会导致每次预测的结果都不一样。因此在训练时还要对隐藏层的输出数据除以(1-p)之后再传给输出层神经元,作为神经元失活的补偿,以使得在训练时和测试时每一层输入有大致相同的期望。训练时,对于网络中的某个输出值x,期望变为 ( 1 − p ) ∗ x + p ∗ 0 = ( 1 − p ) ∗ x (1-p)*x + p*0 = (1-p)*x (1p)x+p0=(1p)x, 为了保持测试时(没有dropout)期望一致,在训练时, 对包含dropout的输出乘 1 ( 1 − p ) \frac{1}{(1-p)} (1p)1, 使得期望仍然为 1 / ( 1 − p ) ∗ ( 1 − p ) x = x 1/(1-p) * (1-p)x = x 1/(1p)(1p)x=x。 因此,dropout后做rescale主要保证了神经元的期望均值与无dropout时一致,但未保证期望方差(标准差)一致。方差会产生一个与dropout系数p相关的偏移。所以dropout与bn联合使用可能会产生一定问题。

6. dropout与Batch Norm联合使用会产生哪些问题?

参考:https://zhuanlan.zhihu.com/p/33101420

未完待续。。。

7. 如何减轻该状况?

未完待续。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Batch Normalization(批归一化)是一种常用的深度学习中的正则化技术,用于加速模型的训练过程和提高模型的性能。它通过在网络的每个层中对输入进行归一化,将其均值调整为0,方差调整为1,从而使得数据分布更加稳定,有利于模型的训练和收敛。 Batch Normalization 的主要作用有以下几点: 1. 加速收敛:通过将每个批次的输入进行归一化,Batch Normalization 能够加速模型的收敛过程。它有助于解决梯度消失或梯度爆炸的问题,使得模型能够更快地收敛。 2. 控制内部协变量偏移:内部协变量偏移是指由于训练过程中每一层输入分布的变化而导致的模型参数难以训练的问题Batch Normalization 通过标准化输入,减少了内部协变量偏移的影响,使得模型参数更容易优化。 3. 正则化作用:Batch Normalization 在归一化的同时引入了一定的噪声,类似于 Dropout 的正则化效果,有助于减少模型的过拟合。 GoogLeNet 是由 Google 提出的一种深度卷积神经网络结构,它是 Inception 系列网络的代表。GoogLeNet 采用了一种多分支的网络结构,通过并行地使用不同尺寸的卷积核和池化操作,从而在保持计算效率的同时实现了更好的特征提取能力。 在 GoogLeNet 中,Batch Normalization 被广泛应用。Batch Normalization 在 GoogLeNet 的每个卷积层后都被添加,用于加速收敛和提高模型性能。通过使用 Batch Normalization,GoogLeNet 在训练过程中能够更快地收敛,并且具有更好的泛化能力。 综上所述,Batch Normalization 是一种常用的正则化技术,用于加速模型训练和提高性能。GoogLeNet 是一种深度卷积神经网络结构,其中使用了 Batch Normalization 来优化模型训练过程。如果你有任何进一步的问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值