batch normalization原理以及反向传播公式

BN是重要的正则化手段,同时也会加速模型的收敛。
首先介绍一下深度神经网络的特性。网络中层与层之间有着高度关联性和耦合性。前一层的输出是后一层的输入。随着训练的进行,网络中的参数也随着梯度下降在不停更新。

  • 一方面,当底层网络中参数发生微弱变化时,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大;
  • 另一方面,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停地去适应这些分布变化,使得我们的模型训练变得困难。

上述这一现象叫做Internal Covariate Shift。
在深度学习网络中,每一层的线性变换为(l表示层数):
在这里插入图片描述
非线性变换为:
在这里插入图片描述
随着梯度下降,每一层的参数都在更新,这就导致Zl的分布会不断发生变化,与之而来的是Al的分布也会跟着变化,那么L+1层的参数就要不断适应这种输入分布的变化,这就导致模型收敛的速度非常低。
同时当激活函数选择了sigmoid,tanh等激活函数时,很容易使模型陷入梯度饱和区,这就会导致梯度消失。一种思路是替换激活函数,如ReLu函数,另一种思路是,如果我们可以将输入控制在一个稳定的范围,如:均值为0,方差为1的范围。这样就能避免它们陷入了梯度饱和区。
白化是ML常用的规范化数据的方法,常见的是PCA和ZCA。但是如果每层都做这种操作的话,首先计算成本很高,其次它会改变网络每一次的分布,把网络本身的特性抹去了。

Batch Normalization:

batch normalization原理以及反向传播公式_第1张图片
对于一个batch而言,batch normalization是对每个特征而言的,有m个训练样本,j个维度(j个神经元节点)有:
在这里插入图片描述
对当前的第j维进行规范化:

batch normalization原理以及反向传播公式_第2张图片

其中 ϵ \epsilon ϵ是为了防止方差为0.
此时网络层的输入稳定了,为了保证原有的特征分布不丢失,BN层引入了两个可学习的参数: γ \gamma γ β \beta β 。它们是为了恢复数据原有的表达能力。当:
在这里插入图片描述
可以实现等价变换,并且保留了原始输入特征的分布信息。
所以对于第L层
batch normalization原理以及反向传播公式_第3张图片
在测试过程中
由于训练时,数据是一批一批的,所以可以根据当前batch算出 μ \mu μ σ \sigma σ2,但是在测试中,可能数据不多,没法计算 μ \mu μ σ \sigma σ2。这时,我们使用训练时每一层的 μ \mu μbatch和 σ \sigma σ2batch。此时我们使用整个样本的统计量来对Test数据进行归一化,具体来说使用均值与方差的无偏估计:
batch normalization原理以及反向传播公式_第4张图片
batch normalization原理以及反向传播公式_第5张图片
BN层使网络中每层输入数据分布比较稳定,从而可以加速模型的学习速率(后一层网络不必去不断适应前面网络输出的分布变化,可以做到独立训练)
BN层使模型对网络参数不那么敏感,简化调参过程,使得网络更为稳定。当学习率设置比较高的时候,参数变化的步伐会比较大,容易出现震荡和不收敛,但是使用BN将不会受到参数值大小的影响。
batch normalization原理以及反向传播公式_第6张图片
由此可以看出权值缩放对于BN的计算没有影响,且对 μ \mu μ的梯度计算无影响,当a较大时,对于aW的梯度计算会较小,从而使得模型不会被参数的大小所影响,反而会更加稳定。
通过normalize操作可以让激活函数的输入数据落在梯度非饱和区,缓解梯度消失的问题;另外通过自适应学习 γ \gamma γ β \beta β 又让数据保留更多的原始信息。
BN同时会有正则化的作用,因为每一个batch的 γ \gamma γ β \beta β 都会不同,这就为学习过程增加了随机噪音。一定程度上起到了正则化作用。
BN的反向传播推导:
batch normalization原理以及反向传播公式_第7张图片

你可能感兴趣的:(batch,normalization)