首页 > 编程知识 正文

1bn是多少钱,permutation invariant

时间:2023-05-05 20:56:24 阅读:21417 作者:2044

BN层的作用BN层最重要的作用是加快网络的收敛速度。 BN的论文名称也清楚地说明了这一点,同时BN使网络训练变得容易。 另外,调参过程也变得简单,对初始化的要求不是很高,而且可以使用较大的学习率等,但如果不使用BN,则有可能以更大的学习率进行训练发散,较大的学习率反而作用于训练速度,加速收敛速度,两者相辅相成

另外,也有BN层提高网络泛化能力,抑制过拟合的说法,但这一说法仍在继续。

BN层计算过程BN层计算一个minibatchinputfeature(x i x_i xi ) )中所有元素的平均(mu和方差) sigma ,并根据xIx_IXi将平均值除以标准差,最后可学习参数

具体流程如下:

1 .计算样本均值。

2 .计算样本方差。

3 .样本数据标准化处理。

4 .进行平移和变焦处理。 引入了伽马和贝塔两个参数。 训练和两个参数。 引入了该可学习的重构参数 gamma 和 beta ,使我们的网络能够学习和恢复原网络应学习的特征分布。

需要注意的是,BN在batch维中进行规格化,因此BN中涉及的一些变量的维必须是feature map的大小。 例如,BN layer的输入为ncwhntimesctimeswtimeshn,则BN的参数维必须为C W H C times W times H CWH 也就是说,BN计算batch中特征映射的每个点的平均值、方差、 gamma 和 beta 。

为什么BN可以加速

训练收敛 Internal Covariate Shift

提到训练收敛的问题,需要先解释一个现象,叫做内部协变量偏移(Internal Covariate Shift),对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate shift问题只发生在输入层。

固定输入分布

而BatchNorm的基本思想就是,能不能让每个隐层节点的激活输入分布固定下来呢?这样就避免了“Internal Covariate Shift”问题了。所以就有了BN中的数据标准化处理,BN 其实就是在做 feature scaling,而且它的目的也是为了在训练的时候避免这种 Internal Covariate Shift 的问题。

batch normalization

顺着这个思路想下去,如果要限制到一个固定的输入,那应该是什么样子。BN选择了normalization,也就是一种白化操作,这个很好理解,我们在原始图像输入到网络之前都会做减均值,除标准差的操作,这个操作有时单独做,有时和第一层卷积组合起来做,但是不管哪种都必须要有的。图像处理中对输入图像进行白化(Whiten)可以有效加快神经网络的收敛,而对多层网络中的每一层输出做白化,就是我们看到的在CNN中加入BN层的样子。

γ gamma γ& β beta β

但是到这里还没有结束,简单直接白化引入了太多的人工设计,使输入强行归一化,对于原始图像来说这样直接处理还行,但是越是到了网络的深层,CNN提取出来的特征就越是无法解释,那么同样的白化操作就变得不合理,所以BN在白化之后引入了两个参数控制白化的程度,它刚刚好使白化的逆过程,而且,这两个参数是参与训练的,那么一种极端的可能就是,白化如果对结果没有作用,那么 γ gamma γ& β beta β 很有可能将白化后的结果恢复成原来的样子。

为什么BN能抑制过拟合

BN层抑制过拟合抑制存在争议,《UNDERSTANDING DEEP LEARNING REQUIRES RETHINKING GENERALIZATION》实验出BN层加入使得overfitting再更多的training epoch后出现,但并不能阻止。
如果硬要说是防止过拟合,可以这样理解:BN每次的mini-batch的数据都不一样,但是每次的mini-batch的数据都会对moving mean和moving variance产生作用,可以认为是引入了噪声,这就可以认为是进行了data augmentation,而data augmentation被认为是防止过拟合的一种方法。因此,可以认为用BN可以防止过拟合。

BN层与卷积层的融合

一般情况下BN层都是直接接到卷积操作之后,训练结束后,卷积和的参数和BN层的参数都会固定下来。同时上面介绍了,BN是对输入特征图的每一个像素点归一化后的线性变换,并且变换的参数相同。满足了这些特点,BN层在网络inference过程中,其实可以融合进卷积层中,具体的方式就是用BN的参数改变卷积核中每一个位置的参数。
假设卷积变化如下:

我们将卷积公式代入到BN的公式中,有:

另:


则有:

即重新计算后的卷积核参数,融合了固定参数的BN层。

Sync BN

在一般的视觉问题上,单卡的batchsize其实已经够大,没必要把所有卡上的都统计一遍。然而到了现在的检测或者分割问题上,有些大模型单卡只能bz=1,这样的话BN完全无法发挥作用,所以我们需要在更多的卡上同步bn。
PyTorch-Encoding
Synchronized-BatchNorm-PyTorch
pytorch-syncbn

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。