今天要学习的内容是一个小知识点:归一化
什么是归一化
归一化(Normalization): 是一种无量纲处理手段,即将有量纲的表达式,经过变换,化成无量纲的表达式,称为标量。通常来说,想比较两个有度量单位的物理量是不可以的,但是我们可以先将度量单位去掉,变成标量,就可以作比较了。归一化的具体作用是:归纳样本的统计分布性;操作是:把数据经某种算法限制在(0,1)或者(-1,1)范围内,限制数据到(0,1)区间是统计样本的概率分布,而限制到(-1,1)区间是统计样本的坐标分布。
常见的归一化方式是Rescaling (min-max normalization) 线性归一化:适用在数据比较集中的情况
x ′ = x − min ( x ) max ( x ) − min ( x ) x^\prime=\frac{x-\min(x)}{\max(x)-\min(x)} x′=max(x)−min(x)x−min(x)
不论是计算,还是建模,首先要做的是对样本数据进行预处理,这要求样本的度量单位要统一,不然无法做统计分析,因此预处理的第一步往往是对数据去量纲。而去量纲化的操作通常有这几种:归一化和标准化。
易混淆概念–标准化
标准化(Standardization): 是对原始数据按比例进行缩放处理,使得数据落入一个小的特定区间,这跟归一化差不多,但是唯一的差别就是缩放本质不同,归一化是将样本的特征值转化到同一量纲下,把数据映射到(0,1)或者(-1,1)区间。 而标准化是将数据通过去均值实现中心化(中心化:将数据的平均值变为0的操作),得到的数据是符合标准正态分布的,区别在于标准化是依照特征矩阵的列,归一化是依照特征矩阵的行处理数据。
标准化的形式是:Standardization (Z-score normalization)标准差归一化:将数据处理成符合均值为0,方差为1的标准正态分布
x ′ = x − μ ( x ) σ ( x ) , μ 为 均 值 , σ 为 方 差 x^\prime=\frac{x-\mu(x)}{\sigma(x)}\;,\; \mu为均值,\sigma为方差 x′=σ(x)x−μ(x),μ为均值,σ为方差
个人观点:我认为归一化和标准化其实是起着相同效果的操作,在实际中无需将两者划分得这么清楚,因为他们的共同点都是消除不同量纲,都是一种线性变换,都是对样本x按比例缩放再平移。
为什么要归一化
在训练神经网络之前,我们一般都要对数据进行归一化,这样做的原因有三点:
- 避免神经元饱和: 当神经元的激活在接近0或1时会出现饱和现象,这时候,梯度几乎为0,一旦出现梯度接近0,根据梯度的链式反应,在反向传播过程中就会出现梯度消失的问题;
- 加快收敛: 样本数据中普遍会存在一些奇异样本,这些样本数据会引起网络训练时间加长,以及网络无法收敛等问题。为避免这种情况,加快网络学习速度,我们先要对数据进行归一化处理,使得所有的样本的输入信号的均值接近0,或者均方差很小;
- 避免数值问题: 太大的数会引发计算机的数值问题。
Batch Normalization
批量归一化(Batch Normalization,BN): 顾名思义,就是批量地将样本进行归一化操作,它是基于mini-batch的数据计算均值和方差的,而不是整个training set。当小批次数量,即mini-batch设置较大时,数据分布较接近,在训练前充分打乱,将BN层设置在非线性映射前,这样有利于网络收敛。
BN在具体训练时的操作流程为:
输入:上一层输出的结果 X = { x 1 , . . . , x i , . . . , x n } X=\{x_1,...,x_i,...,x_n\} X=