卷积神经网络(CNN)自学笔记3:BN层、池化层

一、批量归一化层(Batch Normalisation Layer)

1.为什么需要BN层

在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化,这一过程被称为内部协变量偏移(Internal Covariate Shift)。这种分布的变化会使得每一层都需要不断地适应新的输入分布,从而减慢了训练速度,并且可能导致梯度消失或爆炸。

2.BN层定义

BN层通过对每一批数据进行归一化处理,解决了神经网络训练过程中梯度消失和梯度爆炸的问题,加速了训练过程,并且可以在一定程度上减少模型对初始参数的敏感性和对过拟合的依赖。BN层除了能够解决内部协变量偏移问题之外,还提供了一定的正则化效果,从而提高了模型的泛化能力。

总的来说,BN层通过标准化输入特征,解决了训练过程中的内部协变量偏移问题,同时提供了正则化效果,有效提升了模型的训练效率和泛化能力。

3.BN层原理

批归一化的核心思想是在每一层网络的输入上进行标准化处理。具体来说,BN层在每一层网络的每一批数据上做以下操作:

(1)计算批均值和批方差:对于一个批次的数据,我们首先计算每个特征维度的均值和方差:

\mu =\frac{1}{m}\sum_{i=1}^{m}x_{i}

\sigma ^{2}=\frac{1}{m}\sum_{i=1}^{m}\left ( x_{i} -\mu \right )^{2}

(2)归一化:使用批均值和方差对数据进行标准化处理:

\hat{x}_{i}=\frac{x_{i}-\mu }{\sqrt{\sigma ^{2}}+\varepsilon }

其中,\varepsilon是一个很小的数,防止分母为零。

(3)缩放和平移:引入两个可学习的参数\gamma\beta,对标准化后的数据进行缩放和平移:

y_{i}=\gamma x_{i}+\beta

其中,\gamma\beta分别是缩放因子和偏移量,它们的存在允许网络恢复原来的表示能力。

通过上述操作,BN层可以在保持输入数据分布稳定的同时,保留网络的非线性表达能力。

4.在Pytorch中的实现

torch.nn.BatchNorm2d(num_features, 
                     eps=1e-05, 
                     momentum=0.1, 
                     affine=True, 
                     track_running_stats=True, 
                     device=None, 
                     dtype=None)

num_features:输入特征的数量,即卷积层的输出通道数。例如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值