深度学习中的Normalization: (i. 更好train;ii. 防过拟合)
1 对神经元输出规范化:BatchNorm/LayerNorm/InstanceNorm/GroupNorm
2 对权重规范化(Weight Norm):广义上讲,一般机器学习里看到的损失函数里面加入的对参数的的L1/L2等正则项(L1正则的规范化目标是造成参数的稀疏化,就是争取达到让大量参数值取得0值的效果,而L2正则的规范化目标是有效减小原始参数值的大小。)
(https://zhuanlan.zhihu.com/p/43200897
https://zhuanlan.zhihu.com/p/33173246
)
BN: Batch Normalization —— 纵向规范化
(对同一batch内的特征 or 本层各个神经元的输出,分别归一化:譬如同一batch内的“年龄”)
(原论文用在输出和激活函数之间;但不少研究表明将BN放在激活函数之后效果更好)
- 由于 BN 是针对单个维度定义的,因此标准公式中的计算均为 element-wise 的,BN 独立地规范化每一个输入维度 ,但规范化的参数是一个 mini-batch 的一阶统计量和二阶统计量,因此要求batch近似同分布的;
- 每个batch内做zscore (mean、std 都是batch内计算的,所以batch太小会问题),使得网络中每层输入数据的分布相对稳定,加速模型学习速度;
- zscore后变换,因为理想情况下zscore变换后为N(0,1)的标准正态分布。此时,激活函数为relu,则意味着,有一半的输出被置为0了。(另一种解释:Normalization有可能降低神经网络的非线性表达能力,所以会以此方式来补偿Normalization操作后神经网络的表达能力)
缺点
受batch_size影响
训练时和推理时统计量不一致
LN:Layer Normalization —— 横向规范化
(对同一层(而不是batch)内的各个特征统一归一化,譬如“年龄”、“身高” 使用的是同一个均值和方差)
LN 是一种横向的规范化,考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入
batch size 设置得较小训练出来的模型相对大batch size训练出的模型泛化能力更强,在测试集上的表现更好,而太大的batch size往往不太Work,而且泛化能力较差