Batch Normalization的细致理解

批量归一化(BN)在深度学习中扮演关键角色,它不仅是一个简单的数据归一化过程,还包括线性变换以适应不同分布。BN在训练时依据batch进行标准化,而在测试时使用所有训练样本的均值和方差估计。 BN层前的线性变换+b会被归一化过程抵消,但权重w仍有影响,可通过BN后的线性变换补偿。BN解决了训练和测试时的标准化问题,提升了模型的稳定性和性能。
摘要由CSDN通过智能技术生成

最近读论文遇见很多对BN的优化,例如MoCo当中的shuffling BN、Domain Generalization。连原来是什么东西都不知道,怎么看优化呢?

1.不就是归一化吗?其实并不是

可能大家觉得这个东西不就是一个归一化的过程吗?其实并不是这样的一个过程。
我们假定我们直接使用一个归一化,也就是我们本来天马行空的数据直接我们将其拉到均值为0方差为1,那么这样就出现一个问题:在BN层之后的模型必须是接收均值为0方差为1的模型,这可能不太符合普遍规律。
所以BN的作者在这上面加入了一个新的内容就是一个线性变换层。这样就能将本身均值在0方差在1的输出数据做一个适当地变换,让数据的限制不那么死板。所以取得了较好的效果。
大致的过程如下:

m = K.mean(X, axis=-1, keepdims=True)#计算均值
std = K.std(X, axis=-1, keepdims=True)#计算标准差
X_normed = (X - m) / (std + self.epsilon)#归一化
out = self.gamma * X_normed + self.beta#重构变换

说了这么多主要是让大家理解这个BN层最后的线性变换的作用。

2.测试的时候如何处理?

这时出现另外的一个问题,就是我们在训练的时候,数据是一个batch一个batch的通过网络,并且回传。这也就导致了BN(Batch Normalization)中的batch的来源,为什么是针对一个batch做标准化,其实是来自于这里。
这时候一个新的问题产生了,在我们训练的时候存在batch的概念,但是,当我们test(或者描述为evaluate)的时候并没有这个概念。只是一个数据一个数据的输入,并没有batch的概念。那么这个时候我们在向前传播的时候我们用什么做normalization呢?
所以作者就提出了一种解决方案,也就是使用所有batch的均值的平均值和所有batch方差的无偏估计。
分开理解一下:
这里的均值的平均值:其实就相当于全部数据的均值,也相当于每个batch均值的无偏估计。
这里的bacth的方差的无偏估计:其实只是全部batch的方差加和再除以(全部的batch数再减去1),这个是个概率问题。另外,需要注意的是这个batch的方差的无偏估计和全部数据的方差并不是一个东西。

3.还有什么影响?

3.1在BN层之前还有一个线性变换会怎样?

不难发现这个线性变化(x=wx+b)的+b被完全吞没了,因为你均值变回0,加不加b其实都完全一样。但是那个w还是有作用的。
那么这个b失效可怎么办?
其实BN层结束的线性变换,完全可以取代这里进行的变换。

Batch normalization是一种常用的神经网络正则化技术,它的主要思想是对每一层的输入进行归一化,使得网络中每一层的输入分布都具有相似的统计特性。Batch normalization可以在训练过程中减少内部协变量偏移(Internal Covariate Shift)现象的发生,有助于加速网络的训练,并提高网络的泛化能力。 内部协变量偏移是指在训练过程中,每一层的输入分布会发生改变,导致网络中每一层的参数都需要重新适应新的输入分布,从而影响了网络的收敛速度和泛化能力。Batch normalization通过对每一层的输入进行归一化,使得每一层的输入分布都具有相似的统计特性,从而减少了内部协变量偏移现象的发生。 具体来说,Batch normalization的计算公式如下: $$ \hat{x}=\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} \\ y=\gamma\hat{x}+\beta $$ 其中,$x$是输入,$\mu$和$\sigma^2$是在batch内计算得到的均值和方差,$\epsilon$是一个很小的常数,用于避免分母为0的情况,$\hat{x}$是将输入$x$进行归一化后的结果,$\gamma$和$\beta$是可学习的缩放和偏移参数。 Batch normalization的作用是将每一层的输入归一化到均值为0,方差为1的分布上,从而使得每一层的输入分布具有相似的统计特性,加速了网络的训练,并提高了网络的泛化能力。 总之,Batch normalization通过对每一层的输入进行归一化,减少了内部协变量偏移现象的发生,提高了网络的训练速度和泛化能力,是一种非常实用的神经网络正则化技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CUHK-SZ-relu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值