BN(Batch Normalization):批量归一化

批量归一化(BN)是一种在深度学习中用于加速训练和提高模型稳定性的技术,它通过规范化输入数据的分布,减少内部协变量转移,从而改善梯度消失和梯度爆炸问题。BN在每一层网络中应用,使得网络各层输入保持相对稳定,提高了训练效率。尽管BN在图像分类等任务中表现出色,但在小批量、像素级图像生成任务和RNN等动态网络中可能效果不佳。BN的主要优点包括加速训练、模型稳定性和一定的正则化效果,但其缺点包括对小批量的敏感性、影响某些任务的细节信息和训练与推理时统计量的不一致。

现在的神经网络通常都特别深,在输出层像输入层传播导数的过程中,梯度很容易被激活函数或是权重以指数级的规模缩小或放大,从而产生“梯度消失”或“梯度爆炸”的现象,造成训练速度下降和效果不理想。

随着训练的进行,网络中的参数也随着梯度下降在不停更新,一方面,当底层网络中参数发生微弱变化时,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大;另一方面,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停的去适应这些分布变化,使得模型训练变得困难。这种现象叫Internal Covariate Shift

Internal Covariate Shift是BN论文作者提出来的概念,表示呼叫的分布在网络传播的过程中会发生偏移,举例解释,假设有一个玫瑰花的深度学习网络,这是一个二分类的网络,1表示识别为玫瑰花,0则表示非玫瑰花。先看训练数据集的一部分,直观来说,玫瑰花的特征表现很明显,都是红色玫瑰花。
在这里插入图片描述
再看训练数据集的另一部分,很明显,这部分数据的玫瑰花各种颜色都有,其特征分布与上述数据集是不一样的。
在这里插入图片描述
通俗的讲,刚开始的数据都是同一个分布的,模型学习过程中,模型的参数已经适合于一种分布,突然又要适应另一种分布,这就会让模型的参数发生很大的调整,从而影响到收敛的速度和精度。这就是Internal Covariate Shift。

BN的作用就是将这些输入值或卷积网络的张量进行列数标准化操作,将其放缩到合适的范围,从而加快训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性。

网络训练起来,那么参数就要更新,除了输入层的数据外(因为输入层数据,已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。

Internal Covariate Shift带来的问题:

  • 上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低。
  • 网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度。

网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布。

为了减缓Internal Covariate Shift的方法,出现了白化法,对输入数据分布进行变换,使得输入特征分布具有相同的均值和方差,去除特征之间的相关性。

为什么减均值、白化可以加快训练?

  • 首先,图像数据是高度先关的,假设其分布如下图a所示(简化为2维)。由于初始化的时候,我们的参数一般都是0均值,因此,开始的拟合y=Wx+b,基本过原点附近,如图b红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。如果我们对输入数据先做减均值操作,如图c,显然可以加快学习。更进一步,我们对数据再进行去相关操作,使得数据更加容易区分,这样又会加快训练,如图d。
    在这里插入图片描述

白化(whiting)是机器学习里面常用的一种规范化数据分布的方法,主要是PCA白化与ZCA白化。

白化的缺点:

  • 白化过程计算成本太高,并且在每一轮训练中的每一层我们都需要做如此高成本计算的白化操作。例如PCA白化:即对数据进行PCA操作之后,再进行方差归一化,这样数据基本满足0均值、单位方差、弱相关性。对每一层数据都使用白化操作,因为白化需要计算协方差矩阵、求逆等操作,计算量很大,此外,反向传播时,白化操作不一定可导。
  • 白化过程由于改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。底层网络学习到的参数信息会被白化操作丢失掉。比如下图所示,在使用sigmoid激活函数的时候,如果把数据限制到0均值、单位方差,那么相当于只使用了激活函数中近似线性的部分,这显然会降低模型表达能力。
    在这里插入图片描述

为了能够简化计算过程,又需要经过规范化处理后让数据尽可能保留原始的表达能力。提出了简化+改进版的白化——Batch Normalization。

既然白化计算过程比较复杂,尝试单独对每个特征进行normalization,让每个特征都有均值为0,方差为1的分布。既然白化操作减弱了网络中每一层输入数据表达能力,就再加个线性变换操作,让这些数据再能够尽可能恢复本身的表达能力。

BN 是由Google于2015年提出,论文是《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》,这是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,而且在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得训练深层网络模型更加容易和稳定。

Batch Normalization是对每一批数据进行归一化,以前的归一化操作都在数据输入层,对输入的数据进行求均值以及求方差做归一化,但是BN可以在网络中任意一层进行归一化处理,因为现在所有的优化方法大多都是基于mini-batch 进行的随机梯度优化算法,所以归一化操作也是基于mini-batch的。
某一批次的张量通过卷积层并加上偏置后,ReLU激活之前,即。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值