1.原理
1.1 数量单位/权重
假设一个函数:健康=3✖️身高+2✖️体重(身高:m,体重:斤)
现在给出一个例子:1.6m130斤的人1,1.9m129的人2
按照函数计算,你会发现他们的健康值差不多,故需要进行统一数量级,排除单位的干扰。有以下两种方法:
1. 最小-最大归一化(Min-Max Normalization)
最小-最大归一化将原始数据缩放到一个指定的最小和最大值(通常是0到1或-1到1)之间。公式如下:
其中:
- xx是原数据点。
- min(x)是数据集中的最小值。
- max(x)是数据集中的最大值。
- x′ 是归一化后的数据点。
优点:
- 保留了数据的原始分布。
- 新的最小值和最大值是预先定义的,如0和1。
缺点:
- 对异常值敏感,因为异常值会拉扯整个数据的尺度。
——当出现3m的人,按照此公式会一直保留异常值的影响
2. 标准化(Standardization,Z-score Normalization)
标准化涉及将数据的均值转换为0,标准差转换为1。这种技术也称为Z-score归一化。公式如下:
其中:
- x 是原始数据点。
- μ 是数据的均值。
- σ 是数据的标准差。
- z 是标准化后的数据点。
优点:
- 去除数据的均值,缩放到位方差。
- 不受异常值影响,因为它们不改变基于均值和标准差的计算。
缺点:
- 数据的范围不是预先定义的,可能在-∞到+∞之间。
- 如果数据不是正态分布,这种方法可能不会很有效。
——why为什么标准化在非正态分布下可能不有效:
- 均值和标准差的代表性:
- 标准化假设数据是以均值为中心的,并且数据的分布是对称的。如果数据不是正态分布,均值和标准差可能无法有效地描述数据的中心位置和分散程度。
- 例如,对于偏态分布(如右偏或左偏),均值可能会被极端值拉动,从而不能准确反映数据的中心趋势。
- 数据的分布形状:
- 标准化会将数据转换为均值为0、标准差为1的分布,但如果原始数据的分布形状与正态分布相差甚远,标准化后的数据可能仍然表现出明显的偏态或峰态。
- 这可能导致某些机器学习算法(如线性回归、逻辑回归等)在训练时表现不佳,因为这些算法通常假设输入数据是正态分布的。
- 影响模型性能:
- 在某些情况下,模型可能对数据的分布形状敏感。如果标准化后的数据仍然不符合模型的假设,可能导致模型的性能下降,甚至影响收敛速度。
1.2 数据的缩放和偏移
处理目的:
缩放器:Compare the effect of different scalers on data with outliers — scikit-learn 1.5.2 documentation
1.3 层之间的流动数据分布偏移
也称为内部协变量偏移,Internal Covariate Shift。是指网络中每层的输入数据分布随着网络训练过程而不断变化的现象。这主要是因为每层的输入是前一层输出的结果,而每层的参数更新会改变输出的分布。这种分布偏移可以导致以下几个问题:
1. 训练难度增加
由于每层输入的分布不断变化,网络需要不断适应这些变化,这使得训练过程变得更加困难。
2. 收敛速度减慢
层之间的数据分布偏移可能导致梯度下降过程中的优化路径变得非常不规则,从而减慢了网络的收敛速度。
3. 梯度问题
在深层网络中,由于每层的输入分布不断变化,可能导致梯度消失或梯度爆炸问题,这进一步增加了训练深层网络的难度。
2.归一化工作过程 Batch Normal例
batchnorm:对一个小批量进行归一化。小批量:一部分小样本/小批量。比如一共50个人,分为5组,一组10人:10人就是一个小批量,一共5批。
动量:(SGD,深度学习基础知识中有提到过)保留历史数据——计算量与存储量额外的数据。同步影响并行效率
——对于每个特征通道/每个人的每个身高,体重等特征成为特证通道,计算当前小批量数据的特证通道的均值和方差,然后进行归一化(代入公式)。(%:BN与LN区别,见下一部分)
归一化后的数据会乘以一个可学习的缩放因子(gamma)并加上一个可学习的偏移量(beta),这样做是为了保持模型的表达能力。
3.各种归一化
[4个样本,3个特征通道,高,宽]
BN:3次归一化,每个样本的统一特征进行归一化
LN:4张图片进行4次归一化
IN:每张图片的每个特征分别归一化,12次
GN:如果是[4,4,240,240]:可方便分组,每次两个特征通道进行归一化(将输入的通道分成 G
个组(group),每个组包含 C / G
个通道,其中 C
是输入的通道总数。对每个组内的数据分别计算均值和标准差,并进行归一化处理。)——解决批量归一化(Batch Normalization)在小批量数据上的局限性。GroupNorm 不依赖于批量数据的统计信息,因此更适合于在小批量或单样本的情况下使用。
4.BN与LN区别
4.1 NIP自然语言用LN,CV图片用BN
图中数值为计算机可能运行结果,非人为制造
即,BN无法精确区分自然语言相似数据,模糊性大,通过小样本推理整体
阿尔法/贝塔.shape——BN:tensor第二个维度,LN:tensor最后一个维度
LN不依赖历史数据(详见2:BN过程)
附:批量归一化BatchNorm
bn1
通常指的是批量归一化层(Batch Normalization Layer)的一个实例。批量归一化是深度学习中常用的一种技术,旨在提高训练速度、稳定性,并有助于防止过拟合。它通过规范化(归一化)层的输入来实现这一点。
批量归一化层的工作过程如下:
- 计算均值和方差:对于每个特征通道,计算当前小批量数据的均值和方差。
- 归一化:使用上述计算得到的均值和方差对每个特征通道的数据进行归一化,使得输出的均值为0,方差为1。
- 缩放和偏移:归一化后的数据会乘以一个可学习的缩放因子(gamma)并加上一个可学习的偏移量(beta),这样做是为了保持模型的表达能力。
在 PyTorch 中,批量归一化层可以通过 torch.nn.BatchNorm2d
类来创建,其中 2d
表示处理的是二维数据(例如图像)
批量归一化(Batch Normalization)是一种在深度学习中常用的技术,它通过规范化层的输入来加速训练过程、提高模型的稳定性,并有助于防止过拟合。批量归一化防止过拟合的方式主要包括以下几点:
- 减少内部协变量偏移(Internal Covariate Shift):
- 内部协变量偏移是指在训练过程中,网络层输入的分布不断变化的现象。这种变化可能导致训练过程变慢,因为每一层都需要适应下一层参数变化带来的输入分布变化。
- 批量归一化通过规范化每层的输入,使得每层的输入分布保持相对稳定,从而减少了这种偏移,使得网络更容易学习。
- 提供一定程度的噪声:
- 批量归一化在训练过程中对每个小批量数据进行归一化,由于每个小批量的数据是随机的,这会在一定程度上引入噪声。
- 这种噪声有助于打破对称性,使得模型对输入数据的小幅度变化更加鲁棒,从而减少过拟合。
- 减少对初始化的敏感性:
- 深度神经网络对权重初始化非常敏感,不当的初始化可能导致梯度消失或梯度爆炸,使得网络难以训练。
- 批量归一化通过规范化层的输入,降低了对初始化的依赖,使得网络更容易训练,也减少了过拟合的风险。
- 平滑优化景观:
- 批量归一化可以平滑优化景观,使得梯度更加稳定,减少了梯度消失或梯度爆炸的问题。
- 稳定的梯度有助于模型更快地收敛,同时也减少了对正则化技术的依赖,如 dropout,从而间接减少了过拟合。
- 减少模型对超参数的依赖:
- 批量归一化使得模型对学习率的选择更加鲁棒,可以在一定程度上使用更大的学习率进行训练。
- 这减少了对超参数(如学习率、权重衰减等)的精细调整的需求,从而减少了过拟合的风险。
需要注意的是,虽然批量归一化有助于防止过拟合,但它并不是一个专门的正则化技术,如 dropout 或 L2 正则化。在实践中,批量归一化通常与其他正则化技术结合使用,以更有效地防止过拟合。此外,批量归一化在测试时的行为(使用移动平均和方差)与训练时略有不同,这也是其设计中的一个重要考虑因素。
拓展
协变量方差
test
1.A 2.B 3.B 4.C 5.A