深度学习-CNN-BN(Batch normalization)层解释

批量标准化(BN)是谷歌提出的一种优化训练方法,用于防止梯度消失和梯度爆炸,允许更大学习率,提高训练速度,并改善正则化。在CNN中,BN层通常置于卷积层和线性层之后,用于归一化输出,减少对初始化的依赖。BN层的PyTorch实现包括计算输入的均值和方差,以及应用可学习的γ和β参数进行线性变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是BN

Batch Normalization(数据批量标准化)是由google提出的一种训练优化方法。
先说Batch是怎么确定的。在CNN中,Batch就是训练网络所设定的图片数量batch_size。
Normalization过程:
在这里插入图片描述
输入:输入数据x1…xm(这些数据是准备进入激活函数的数据)
计算过程中可以看到,
1.求数据均值;
2.求数据方差;
3.数据进行标准化(个人认为称作正态化也可以)
4.训练参数γ,β
5.输出y通过γ与β的线性变换得到新的值

在正向传播的时候,通过可学习的γ与β参数求出新的分布值;在反向传播的时候,通过链式求导方式,求出γ与β以及相关权值。
链式求导法则:
在这里插入图片描述

BN的作用

(1)防止梯度消失与梯度爆炸

梯度消失:
以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。
在这里插入图片描述
事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图。
在这里插入图片描述
如果输入很大,其对应的斜率就很小,我们知道,其斜率(梯度)在反向传播中是权值学习速率。所以就会出现如下的问题。
在这里插入图片描述
在深度网络中,如果网络的激活输出很大,其梯度就很小,学习速率就很慢。假设每层学习梯度都小于最大值0.25,网络有n层,因为链式求导的原因,第一层的梯度小于0.25的n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。
这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。
梯度爆炸:
根据链式求导法, 第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n
假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。

(2)允许更大的学习率,大幅提高训练速度

你可以选择比较大的初始学习率,让你的训练速度飙涨。以前还需要慢慢调整学习率,甚至在网络训练到一半的时候,还需要想着学习率进一步调小的比例选择多少比较合适,现在我们可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。当然这个算法即使你选择了较小的学习率,也比以前的收敛速度快,因为它具有快速训练收敛的特性。

(3)改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求

你再也不用去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性。

(4)减少对初始化的强烈依赖

(5)不需要使用局部响应归一化层了,因为BN本身就是一个归一化网络层

(6)可以把训练数据彻底打乱(防止每批训练的时候,某一个样本都经常被挑选到,文献说这个可以提高1%的精度)

在CNN中使用BN

BN层同卷积层、池化层一样,都是独立的一层,并且一般用在卷积层和线性层之后,因为非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值