为什么要做归一化?
不同特征之间往往量纲不同,变化区间的数量级也不同,这就会导致某些指标可能会被忽略,影响最终结果
为了消除特征之间的量纲影响,需要进行归一化处理,解决特征之间的可比性,使各个特征之间处于同一数量级,可以直接进行对比评价
归一化有哪些类型?
1.最大-最小归一化
适用于数据较为集中
缺点:如果 最大最小值不稳定,归一化后的结果也会不稳定
2.零均值归一化
处理后的数据满足正态分布
3.非线性归一化
适用于数据分化较大的情况,有些数据很大,有些数据很小。用log,指数,正切等函数对数据原始值进行映射
为什么要做批量归一化?
深度网络的训练是一个很复杂的过程,随着训练的进行,前一层参数的调整使得后一层输入数据分布发生改变,各层在训练的过程中就需要不断地改变以适应学习这种新的数据分布。训练中模型参数的更新很容易导致后面层输入分布的变化,只要前面层发生微小的改变,在后面几层就会被积累放大下去,最终导致靠近输出层的输出剧烈抖动。不仅会增加模型训练的复杂性,影响网络的训练速度而且增加了过拟合的风险。
批量归一化的优点
1.增加了损失函数曲面的平滑性,加速模型收敛,可以使用初始化很大的学习率
2.大大提高模型的速度,提高网络泛化性能
3.数据批量归一化后相当于只使用s型激活函数的线性部分,可以缓解s型函数反向传播的梯度消失问题
批量归一化的工作原理
以batch为单位,对batch进行规范化。具体来说,把每层神经网络任意神经元输入值的分布强行拉回到均值为0方差为1的标准正态分布
在数据转换为均值为0,方差为1的数据分布中,是激活函数的输入值落在对输入较为敏感的区域中,避免梯度消失的问题,而且会导致输入值较小的改变就导致损失函数较大的变化,梯度变大,避免梯度消失。
之后对数据进行平移和缩放变换
为什么批量归一化要引入线性操作?
批量归一化相当于固定了每一层的输入分布,提高了模型的收敛速度,但同时也限制了模型对数据的表达能力,浅层学到的参数信息会被批量归一化操作屏蔽掉,引入线性操作是为了尽可能的恢复对数据的表达能力。
批量归一化的弊端
1.由于是对batch进行归一化,要求较大的batch才能工作,因为batch内部的均值和方差是用来模拟整个样本,batch太小效果就会很大
2.数据的batch大小在训练和测试时往往不同,在训练时一个batch一个batch的计算(滑动的方式),在测试时没有batch的概念,采用训练时通过滑动平均的方法得到的均值和方差,会和模型权重一起,在训练时被保存下来。这样会导致测试集依赖于训练集,然而有时训练集和测试集数据分布并不一致
批量归一化的偏置项是否可以忽略或者置为0?
因为归一化会减去均值,可以