Normalization

机器学习中Normalization

1:为什么需要Normalization

神经网络训练开始前,都要对输入数据进行归一化处理,那么为什么需要归一化?归一化后有什么好处呢?

机器学习有个很重要的假设: IID独立同分布,就是假设训练数据和测试数据是满足相同分布的。因此在数据喂给模型之前,进行“白化”,其中最典型的白化方法是PCA。白化一般包含两个步骤:
1:去除特征之间的相关性:独立
2:使得所有特征具有相同的均值和方差:同分布

每批数据的分布各不相同,就是导致模型会去拟合各个不同的分布,降低收敛速度。
深度学习训练是有个非常复杂的过程,前面几层微小的变化在后面的层会被积累放大。一旦网络某一层的输入发生变化,那么这一层就要去适应学习这个新的分布,所以如果训练过程中,输入一直发生变化,就会影响网络的训练速度。

2: Internal Covariate Shift(内部协变量转移)

统计机器学习中有个经典的假设是源空间和目标空间的分布是一致的,如果不一致,就出现新的机器学习方向,如transfer learning/domain adaptation等。而Covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间条件概率是一致的,但是其边缘概率不同,
在这里插入图片描述
神经网络各层的输出经过层内操作显然与输出的分布是不一致的,且这种差异随着网络的加深不断增大,但是他们所能“指示”的样本标记是仍然不变的,这变符合CS的定义。由于是对层间的信号的分析,也即是“internal”的来由

简单点说,就是由于各层参数不断变化,隐层的输入总是变来变去。

ICS导致的问题
1:每个神经元不再是独立同分布的
2:上层参数需要不断适应新的输入分布,降低学习速度
3:下层输入的变化可能趋向于变大或变小,导致上层落入饱和区,使得学习过早停止
4:每层参数的更新都会影响到其他层,因此每层的参数更新都需要尽可能的谨慎

3: BN以及LN

3.1 BN

基本思想:在对某层网络进行输入的时候,提前对输入进行预处理,将其进行归一化,使得数据落入均值为0,方差为1的分布。
实现:在网络的每一层输入之前插入一个归一化层,先对数据进行归一化。

理论:
在这里插入图片描述

但是为了保留模型学到的东西,我们不能简单对输入数据进行归一化处理。例如我们的输入本来就是位于S型激活函数的两端,这是模型学到的东西,强行将分布推到S型激活函数的中间会导致丢失上层网络学到的东西,因此变换重构,引入了可学习参数 γ、β,这就是算法关键之处
在这里插入图片描述

训练过程的BN
在这里插入图片描述
在这里插入图片描述

BN中维度计算

神经网络中传递的张量数据,其维度通常记为 [N, H, W, C],其中 N 是 batch_size,H、W 是行、列,C 是通道数。那么上式中 BN 的输入集合 B 就是下图中蓝色的部分:
在这里插入图片描述
test过程的BN
在这里插入图片描述
在这里插入图片描述

3.2 LN

在自然语言中,我们一般使用Layer Normalization
因为在输入中每个batch里面的句子是相互独立的,以batch进行归一化显然是不合理的,而layer norm是对同一句子在不同特征上进行归一化,这比较符合自然语言
在这里插入图片描述

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值