深度学习——Batch Normalization

Batch Normalization

BatchNorm的基本思想:能不能让每个隐层节点的激活输入分布固定下来呢?这样就避免了“Internal Covariate Shift”问题了。之前的研究表明如果在图像处理中对输入图像进行白化(Whiten)操作的话——所谓白化就是对输入数据分布变换到0均值,单位方差的正态分布——那么神经网络会较快收敛

BN作者就开始推论了:图像是深度神经网络的输入层,做白化能加快收敛,那么其实对于深度网络来说,其中某个隐层的神经元是下一层的输入,意思是其实深度神经网络的每一个隐层都是输入层,不过是相对下一层来说而已,那么能不能对每个隐层都做白化呢?BN也确实就是这么做的,可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作。

在BN出现之前,我们的归一化操作一般都在数据输入层,对输入的数据进行求均值以及求方差做归一化,但是BN的出现打破了这一个规定,我们可以在网络中任意一层进行归一化处理,因为我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化操作就成为Batch Normalization。

BN怎么做?

如上图所示,BN步骤主要分为4步:

  1. 求每一个训练批次数据的均值
  2. 求每一个训练批次数据的方差
  3. 使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。
  4. 尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xixi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。

可以看到,BN针对的是一整个batch进行一阶统计量及二阶统计量的计算,即是隐式的默认了每个batch之间的分布是大体一致的,小范围的不同可以认为是噪音增加模型的鲁棒性,但是如果大范围的变动其实会增加模型的训练难度。
同时,BN在计算过程中,需每一层进行标准化,同时还需要保存统计量,相对来说其内存占用较大,同时也不适用于RNN等网络。

BatchNorm的好处

不仅仅极大提升了训练速度,收敛过程大大加快;

②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;

③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。

 

 

预测时均值和方差怎么求?

在训练时,我们会对同一批的数据的均值和方差进行求解,进而进行归一化操作。但是对于预测时我们的均值和方差怎么求呢?比如我们预测单个样本时,那还怎么求均值和方法呀!其实是这种样子的,对于预测阶段时所使用的均值和方差,其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差,待训练完毕后,我们求整个训练样本的均值和方差期望值,作为我们进行预测时进行BN的的均值和方差:

最后测试阶段,BN的使用公式就是:

关于BN的使用位置,在CNN中一般应作用与非线性激活函数之前,s型函数s(x)的自变量x是经过BN处理后的结果。因此前向传导的计算公式就应该是:

其实因为偏置参数b经过BN层后其实是没有用的,最后也会被均值归一化,当然BN层后面还有个β参数作为偏置项,所以b这个参数就可以不用了。因此最后把BN层+激活函数层就变成了:

CNN中的BN

卷积神经网络的特征是对应到一整张特征响应图上的,所以做BN时也应以响应图为单位而不是按照各个维度。

比如在某一层,batch大小为m,响应图大小为w×h,则做BN的数据量为m×w×h。

 

BN训练和测试时的参数是一样的嘛?

对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。

而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。

对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和bata。

BN训练时为什么不用全量训练集的均值和方差呢?

因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合。

也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Batch Normalization是一种用于加速神经网络训练的技术。在神经网络中,输入的数据分布可能会随着层数的增加而发生变化,这被称为“内部协变量偏移”问题。Batch Normalization通过对每一层的输入数据进行归一化处理,使其均值接近于0,标准差接近于1,从而解决了内部协变量偏移问题。 具体地,对于一个Mini-Batch中的一组输入数据,Batch Normalization将这组数据进行标准化处理,使得其均值为0,标准差为1。这样做的好处是,可以使得每一层的输入数据分布更加稳定,从而加速神经网络的训练过程。此外,Batch Normalization还具有一定的正则化效果,可以减少过拟合问题的发生。 Batch Normalization被广泛应用于深度学习中的各种网络结构中,例如卷积神经网络(CNN)和循环神经网络(RNN)。它是深度学习中一种非常重要的技术,可以提高网络的训练速度和准确度。 ### 回答2: Batch Normalization(批归一化)是一种用于训练深度神经网络的技术。深度神经网络的层数较多,容易出现梯度消失或梯度爆炸的问题,导致训练困难。Batch Normalization通过在神经网络中的每个层对输入进行归一化处理,从而缓解了这个问题。 具体而言,Batch Normalization将每个输入特征进行标准化,使其均值为0,方差为1,然后再通过缩放和平移操作进行线性变换,将归一化后的特征重新映射回原来的数据范围。这个归一化操作是在每个batch的样本上进行的,因此称为批归一化。 批归一化有以下几个优点。首先,它使得模型更加稳定,通过减少不同层之间的协变量偏移(covariate shift),加速了网络的收敛速度。其次,批归一化减少了对初始参数选择的敏感性,使得网络参数更易于初始化。再次,批归一化还可以起到正则化的作用,减少模型的过拟合。 批归一化可以应用于深度神经网络中各个层的输入。在训练时,对每个batch的输入进行归一化处理,并记录归一化所使用的均值和方差。在预测时,使用训练过程中得到的均值和方差对输入进行归一化处理,以保持模型的稳定性。 综上所述,Batch Normalization是一种用于处理深度神经网络输入的技术,可以加速网络的训练收敛速度,增强模型的稳定性,并提供正则化的效果。它在深度学习领域中得到了广泛的应用。 ### 回答3: Batch Normalization是一种常用的深度学习中的技术,用于加速神经网络的训练和提高模型的稳定性。深度神经网络中,每层的输入数据分布会随着训练过程中参数的更新而发生变化,这使得网络学习变得困难,难以收敛。Batch Normalization通过在每个训练小批量中对数据进行标准化处理,使得各层的输入数据分布基本稳定,有利于网络训练。 具体来说,Batch Normalization的过程分为两步。首先,对于每个小批量的数据,计算其均值和方差,然后对数据进行标准化处理,使得数据的均值接近0,方差接近1。该过程可以通过调整两个可学习参数——缩放因子(scale factor)和位移因子(shift factor)来实现,从而保留数据的表达能力。其次,将标准化后的数据通过一个仿射变换,恢复为网络中层的输出。 Batch Normalization的优点包括:首先,可以加速模型的训练,因为对数据的标准化可以减少数据间的相关性,使得优化过程更快收敛;其次,可以增强模型的泛化能力,减少过拟合的风险;还可以对网络的激活函数的输出进行归一化,从而避免了梯度爆炸或消失的问题,提高了网络的稳定性和学习效率。 总之,Batch Normalization是一种通过对每个小批量的数据进行标准化处理的技术,旨在加速神经网络的训练和提高模型的稳定性,被广泛应用于深度学习中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值