本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
BN批归一化层是一种常用的深度学习技术,它通过解决内部协变量偏移问题来加速网络训练的速度
本文简单介绍BN批归一化层的原理并详细讲述BN批归一化层的计算公式
本节介绍批归一化层是什么,用来干什么,BN的计算公式等
批归一化层简介
BN批归一化层在Inception-V2的原文中提出:
《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
BN批归一化层解决什么问题
由于前层的权重发生变化会导致后一层的输入发生变化,
而当深度学习网络很多层的时候,前几层的变化会经过层层传播、扩大,
在训练时调整前层的权重时,很容易令后层网络的输入发生极大的变化,
上述现象称为内部协变量偏移,它导致后层的神经元出现饱和等各种问题,并给训练造成困难,
因此提出BN批归一化来hold住输入的分布,消除内部协变量偏移,加速多层神经网络的训练
BN批归一化层一般嵌入到其他层的神经元值之后、激活函数之前的位置
BN层主要的目的是解决一般神经网络层之中的协变量偏移问题,
通过加入BN层,可以一定程度抑制神经元值的内部协变量偏移,加速网络的训练
BN批归一化层的结构与计算公式
BN批归一化层的结构与计算公式
批归一化层由归一化与仿射两部分组成,如下:
由于批归一化一般是嵌入在神经元值N和激活函数之间,因此我们用N来表示这里的输入
BN批归一化层的计算公式
批归一化BN层的具体计算公式如下:
BN层计算公式详细解说如下:
1. 归一化中的和
是输入N的期望值,是N的方差
两者都通过整体样本进行估算 ,估算公式如下:
,n是样本数
2. 归一化中的 ε
是一个较小的数,在分母中加入是为了防止分母过小
3. 仿射部分的
是待优化的参数,跟着模型一起训练
BN层的运算是针对每一个神经元而言的,即每个神经元各自进行归一化,不同的神经元对应的参数是不一样的
本节介绍BN层应用于模型时的完整结构以及期望、方差的估算方法
BN层应用于模型时的完整结构
BN层一般嵌入到神经网络层的神经元值之后、激活函数之前的位置,
BN批归一化的完整示图与计算公式如下:
从图中可以看到,批归一化层先将神经元值WX+B的值进行归一化,再进行仿射(缩放与平衡)还原
BN层中的期望与方差的估算方法
在BN层的归一化计算部分,涉及到神经元值N的期望与方差的估算:
在训练阶段与使用阶段分别采取不同的方法估算和
具体如下:
1. 训练阶段
在训练阶段,归一化使用当前批训练数据的期望与方差
2. 模型应用阶段
在模型应用时,可以使用所有训练数据的期望与方差
也可采用抽取最后K次批训练数据的期望与方差进行估算
分别是第i次批训练时的期望和方差
关于BN应用于卷积层
BN应用于卷积层,基本与应用于全连接层时是类似的,
唯一不同的是, 考虑到卷积层单个通道(featureMap)内的各个神经元与周边神经元是相关联的
在归一化时需要保持这个特征,因此,归一化整个过程对单通道的神经元应使用统一的参数
即:1.同一通道的神经元使用相同的
例如一个通道的featureMap为h×w, 共有n个样本
则用这n×h×w个神经元值来估算
2.同一通道的神经元使用相同的
总的来说,BN应用于卷积层时,所有归一化参数是相对通道而言的,而非独立神经元
本节总结批归一化BN到底是怎么一回事
批归一化BN-总结
总的来说,一般在激活函数之前加入BN层,目的是通过归一化来加速网络的训练
加入BN层之后,相当于先作如下计算,再传给激活函数
其中,是待训练的参数,则是一个固定的、极小的常数
期望和方差可以理解为“非训练的、但在训练阶段不断调整的常数”
✍️关于期望与方差
在训练期间,用"当前批"的数据评估期望和方差,并以其作为模型当前的
同时,用当前批数据的来更新模型永久的、固定的
当模型训练完后,用于评估时,则使用这个在训练期间得到的永久的、固定的模型固定的
在pytorch中,model.train()状态时,则代表按输入数据来评估,
model.eval()时,则使用模型固定的
好了,BN层的相关计算公式与算法就介绍到这里了~
End