参考:https://www.zhihu.com/question/20455227

https://www.jianshu.com/p/4c3081d40ca6

1. 什么是数据归一化?

归一化(标准化)可以定义为:归一化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证模型运行时收敛加快。

归一化和标准化的区别:

简单来说归一化的分母是大于等于标准化的分母的,且归一化的分子是小于分母,故归一化是把x限制在[0,1]之间,而标准化没有限制,且对噪点不敏感

2. 为什么要进行数据归一化?

取消量纲 使得剃度始终朝着最小值的方向前进 少走弯路 加速收敛

若样本x的一个特征A是从10000-100000,另一个特征B是从0.1-1,这样训练神经网络时候会导致B的作用非常小,这是不希望看到的。

同时这样会导致求偏导时A的参数变化大,B的参数变化小,这样会导致lost最小化是不停的走弯路,浪费时间

3. 数据归一化的方法有哪些?

深度学习 输入数据归一化 训练数据归一化_方差

(归一化和标准化本质上是对数据的线性变换)

4 哪些模型不需要归一化

      概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像adaboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。

 

 

batch 归一化:不仅对输入x进行归一化,同时对各个隐藏层的z进行归一化

 

深度学习 输入数据归一化 训练数据归一化_方差_02

上述γ、β的意义是我们不想让隐藏单元总是服从0 1分布,也许隐藏单元(同一层)之间不同分布有意义,通过设置不同的γ、β可以构造其它均值,方差的隐藏单元。这里γ、β也是需要学习的参数,同样可以使用动量、RMS、Adam来优化。下图是一个实例

深度学习 输入数据归一化 训练数据归一化_数据_03

batch 归一化可以应用在mini-batch

切记切记,归一化和标准化的x均值方差都是对mini-batch中的某一维度

为什么batch 归一化会有用?

简单来说就是在mini-batch归一化时,因为只使用了部分数据,故归一化时存在噪声的,这就相当于给神经网络增加了噪声,相当于dropout,给隐藏单元增加了噪声,使后面的隐藏单元不过分依赖于任何一个隐藏单元,有轻微正则化的作用

 

 

测试时如何求均值,方差

γ、β根据BP算法求出,但均值方差在训练时用的是整个mini-batch,在test时往往会处理单个样本,而单个样本的均值方差是没有意义的。

深度学习 输入数据归一化 训练数据归一化_数据_04

 

不同mini-batch 对应不同的均值,方差,故可以用最后一轮最新的一组均值方差,通过指数加权平均来求出

当然也可以直接使用用整个训练集的均值,方差