Normalization标准化和Standardization归一化,作为ML常用的tricks,大家再熟悉不过,但大家往往只知道基本的计算公式,且没深入了解过,甚至不知道标准化与归一化的区别,也不知道其具体作用,原理等,其次,存在为为什么使用Batch Normalization替代Normallization等问题。于是,我做了一定功课,及归纳如下。
一:Normalization归一化和Standardization标准化的定义
以上为众所周知的数学公式定义,我们看国外对Normalization及Standardization的定义如下:
从上文可得出,归一化是将数据缩放止0-1之间,而标准化是将数据分布转换成均值为0,方差为1的数据分布。
除此之外,我找到Google对Normalization的定义如下:
从Google定义可知,Normalization是为了将数据的数值列的数值更改至一个公共尺度,而不会改变数值之间的距离差异。这句话很重要,这是让我们对Normalization的更全面的理解。按我的理解为,Normalization是将各个特征的数值都缩放止一个固定的范围内,从而消除各个特征之间存在的数值差异,但对于单个特征本身而言,并不会改变这个特征里面各个数值的几何距离。从上面定义也可得出,Normalization及Standardization并不仅仅只限于上面两种方法,只是上文两种方法是我们最常使用的方法罢了。
二:Normalization归一化和Standardization标准化的区别
(1).归一化是标准化的一种方式,本质上,归一化跟标准化在数学计算上是不存在区别的,都为减去某个数值之后再去除以某个数值,且,归一化及标准化,从某个特征来看,是不会改变单个特征内的数值之间的几何距离。因此,是不会改变特征的数据分布。但从整个数据集来看,所有特征构成的数据,样本之间的几何距离是发生改变的,整个数据集的数据分布是发生改变了的。
(2).归一化目的是将数据缩放至某个区间,而标准化是将各个特征的数据分布都转换成到一个相似的数据分布,都是为了消除各个特征对目标函数的影响的不一致。值得注意的是,只有数据分布本身接近正态分布,标准化后,才可以接近标准的正态分布。
(3).归一化使用到数据的最小值及最大值,而标准化是使用到数据的均值及方差,当然这个只限于上文提到的两种方法。
(4).对于归一化,不是每个样本数据都会对结果产生影响。而标准化,每个样本数据都会产生被参照到,都会产生影响。
三:Normalization归一化和Standardization标准化的选择
(1).当对数据的输出有要求,且不存在极端值,异常值时,可使用归一化。
(2).当数据不属于高斯分布,可考虑使用归一化。
(3).当数据存在异常值时,可考虑使用标准化
四:Normalization归一化和Standardization标准化的作用及原理:
归一化跟标准化可以消除特征的量纲,既使的各个特征的数值范围接近,在计算loss时,不会因为某个特征的数值过大,导致其产生的loss过大,而忽略了某些特征对输出的影响,以便模型的快速拟合,也可以从而提高模型的准确度。
五:Batch Normalization的作用及原理:
Batch Normalization作为DL神器,被各个Net所采用,Batch Normalization对比Normalization有以下优点:
(1).训练过程中,使每次数据输入都具有相同的的数据分布,解决‘Internal covariate Shift’问题,从而加快模型的拟合。
(2).使用min_batch,对比全部数据的均值方差,等于给模型加入噪声,防止模型的过拟合,类似于dropout ,提高模型的鲁棒性。
(3).适应sigmoid函数,因为数据经过sigmoid激活函数后,输出接近两端的极值,梯度接近0,于是使用批归一化,可以将数据分布拉回正态分布。
六:Batch Normalization的生效的真实原因:
上一条我写到Batch Normalization可以解决‘Internal covariate Shift’问题,简称'ICS'问题,以达到加快模型拟合的效果,然而这个观点使提出BN的作者自己提出的,经过最近的一些研究,ICS问题并非导致深层网络难以训练的根本原因,而BN也同时解决不了ICS问题,且经过证明,在经过BN之后的输出层之后的数据,假如噪声,模仿ICS现象,并不妨碍BN的优秀表现。
经过研究,在深度网络中,存在大量的非线性函数,损失曲面形态将会异常复杂,而我们目的便是在这曲面中找到全局最优,然而,因为曲面存在坑坑洼洼,很容易陷入局部最优。
而当网络加入BN之后,可以使网络的参数重组,对于非线性非凸问题复杂的损失曲面有很好的平滑作用,通过L-Lipschitz函数来评估损失曲面的平滑程度,L-Lipschitz函数定义如下:
从公式中不难看出,L越小,代表曲面越平滑,最终的实验结果如下:
可见,经过BN之后,L的值明显降低,可见,BN通过参数重整确实起到了平滑损失曲面及梯度的作用。
参考文档:
https://www.zhihu.com/question/20455227
https://zhuanlan.zhihu.com/p/43200897